Imported Upstream version 1.8.2 upstream/1.8.2
authorBdale Garbee <bdale@gag.com>
Wed, 24 Aug 2011 15:39:56 +0000 (09:39 -0600)
committerBdale Garbee <bdale@gag.com>
Wed, 24 Aug 2011 15:39:56 +0000 (09:39 -0600)
150 files changed:
ChangeLog
INSTALL
MANIFEST
Makefile.in
NEWS
README
common/Makefile.in
common/aix.c
common/alloc.c
common/lbuf.c
common/setgroups.c [new file with mode: 0644]
compat/Makefile.in
compat/getgrouplist.c [new file with mode: 0644]
compat/strsignal.c
config.guess
config.h.in
config.sub
configure
configure.in
doc/CONTRIBUTORS [new file with mode: 0644]
doc/Makefile.in
doc/UPGRADE
doc/contributors.pod [new file with mode: 0644]
doc/license.pod
doc/sudo.cat
doc/sudo.man.in
doc/sudo.pod
doc/sudo_plugin.cat
doc/sudo_plugin.man.in
doc/sudoers.cat
doc/sudoers.ldap.cat
doc/sudoers.ldap.man.in
doc/sudoers.ldap.pod
doc/sudoers.man.in
doc/sudoers.pod
doc/sudoreplay.cat
doc/sudoreplay.man.in
doc/visudo.cat
doc/visudo.man.in
doc/visudo.pod
include/error.h
include/gettext.h [new file with mode: 0644]
include/lbuf.h
include/missing.h
ltmain.sh
m4/libtool.m4
m4/ltversion.m4
mkdep.pl [new file with mode: 0755]
mkpkg
plugins/sample/Makefile.in
plugins/sample_group/Makefile.in
plugins/sudoers/Makefile.in
plugins/sudoers/alias.c
plugins/sudoers/audit.c
plugins/sudoers/auth/aix_auth.c
plugins/sudoers/auth/bsdauth.c
plugins/sudoers/auth/fwtk.c
plugins/sudoers/auth/kerb5.c
plugins/sudoers/auth/pam.c
plugins/sudoers/auth/rfc1938.c
plugins/sudoers/auth/securid.c
plugins/sudoers/auth/securid5.c
plugins/sudoers/auth/sia.c
plugins/sudoers/auth/sudo_auth.c
plugins/sudoers/bsm_audit.c
plugins/sudoers/check.c
plugins/sudoers/def_data.c
plugins/sudoers/defaults.c
plugins/sudoers/defaults.h
plugins/sudoers/env.c
plugins/sudoers/find_path.c
plugins/sudoers/getdate.c
plugins/sudoers/getdate.y
plugins/sudoers/gram.c
plugins/sudoers/gram.y
plugins/sudoers/group_plugin.c
plugins/sudoers/interfaces.c
plugins/sudoers/iolog.c
plugins/sudoers/iolog_path.c
plugins/sudoers/ldap.c
plugins/sudoers/linux_audit.c
plugins/sudoers/logging.c
plugins/sudoers/logging.h
plugins/sudoers/logwrap.c [new file with mode: 0644]
plugins/sudoers/match.c
plugins/sudoers/mkdefaults
plugins/sudoers/parse.c
plugins/sudoers/plugin_error.c
plugins/sudoers/po/README [new file with mode: 0644]
plugins/sudoers/po/da.mo [new file with mode: 0644]
plugins/sudoers/po/da.po [new file with mode: 0644]
plugins/sudoers/po/eu.mo [new file with mode: 0644]
plugins/sudoers/po/eu.po [new file with mode: 0644]
plugins/sudoers/po/fi.mo [new file with mode: 0644]
plugins/sudoers/po/fi.po [new file with mode: 0644]
plugins/sudoers/po/pl.mo [new file with mode: 0644]
plugins/sudoers/po/pl.po [new file with mode: 0644]
plugins/sudoers/po/sudoers.pot [new file with mode: 0644]
plugins/sudoers/po/uk.mo [new file with mode: 0644]
plugins/sudoers/po/uk.po [new file with mode: 0644]
plugins/sudoers/po/zh_CN.mo [new file with mode: 0644]
plugins/sudoers/po/zh_CN.po [new file with mode: 0644]
plugins/sudoers/pwutil.c
plugins/sudoers/regress/logging/check_wrap.c [new file with mode: 0644]
plugins/sudoers/regress/logging/check_wrap.in [new file with mode: 0644]
plugins/sudoers/regress/logging/check_wrap.out.ok [new file with mode: 0644]
plugins/sudoers/set_perms.c
plugins/sudoers/sudo_nss.c
plugins/sudoers/sudo_nss.h
plugins/sudoers/sudoers.c
plugins/sudoers/sudoers.h
plugins/sudoers/sudoreplay.c
plugins/sudoers/testsudoers.c
plugins/sudoers/toke.c
plugins/sudoers/toke.l
plugins/sudoers/toke_util.c
plugins/sudoers/visudo.c
src/Makefile.in
src/error.c
src/exec.c
src/exec_pty.c
src/load_plugins.c
src/net_ifs.c
src/parse_args.c
src/po/README [new file with mode: 0644]
src/po/da.mo [new file with mode: 0644]
src/po/da.po [new file with mode: 0644]
src/po/eu.mo [new file with mode: 0644]
src/po/eu.po [new file with mode: 0644]
src/po/fi.mo [new file with mode: 0644]
src/po/fi.po [new file with mode: 0644]
src/po/pl.mo [new file with mode: 0644]
src/po/pl.po [new file with mode: 0644]
src/po/ru.mo [new file with mode: 0644]
src/po/ru.po [new file with mode: 0644]
src/po/sudo.pot [new file with mode: 0644]
src/po/uk.mo [new file with mode: 0644]
src/po/uk.po [new file with mode: 0644]
src/po/zh_CN.mo [new file with mode: 0644]
src/po/zh_CN.po [new file with mode: 0644]
src/preload.c
src/selinux.c
src/sesh.c
src/sudo.c
src/sudo.h
src/sudo_edit.c
src/tgetpass.c
src/utmp.c
sudo.pp
zlib/Makefile.in

index 5eaab26fc822c5cfb535778bdd4e5b73ea67903e..3383f4827082e734df88c0aa8abd2fa7ae8d6f8b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,765 @@
+2011-08-17  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * plugins/sudoers/po/sudoers.pot:
+       Regen pot files
+       [3682e51af1d0] [tip] <1.8>
+
+       * Makefile.in:
+       Fix logic inversion in pot file up to date check.
+       [343dbbca9422] <1.8>
+
+       * doc/sudo.cat, doc/sudo.man.in, doc/sudoers.cat,
+       doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, doc/sudoers.man.in,
+       doc/visudo.cat, doc/visudo.man.in:
+       regen docs
+       [96234478bde2] <1.8>
+
+2011-08-15  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure, configure.in:
+       Add caching for gettext() checks.
+       [4039d21424c3] <1.8>
+
+       * configure, configure.in:
+       Better handling of libintl header and library mismatch.
+       [cc9faee8e486] <1.8>
+
+2011-08-14  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * NEWS:
+       sync
+       [73649a44d934] <1.8>
+
+2011-08-13  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Also check sudoers gid if sudoers is group writable.
+       [3d345347f6ac] <1.8>
+
+       * NEWS:
+       Update for 1.8.2 final
+       [441c22fea363] <1.8>
+
+2011-08-12  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure, configure.in:
+       If dlopen is present but libtool doesn't find it, error out since it
+       probably means that libtool doesn't support the system.
+       [6fc7c0de4f6d] <1.8>
+
+       * configure args on the command line should override builtin defaults.
+       Disable NLS for non-Linux/Solaris unless explicitly enabled.
+       [0ef165f892c2] <1.8>
+
+       * Fix loop that calls authenticate(). If there was an error message
+       from authenticate(), display it.
+       [f0686011ff2e] <1.8>
+
+2011-08-11  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure, configure.in:
+       Update to autoconf 2.68 and libtool 2.4
+       [00df5f3647e1] <1.8>
+
+       * Fix typo; OPT should be OTP
+       [31da1f989740] <1.8>
+
+       * Rename libsudoers convenience library to libparsesudoers to avoid
+       libtool confusion.
+       [e9ae9d611dd5] <1.8>
+
+2011-08-10  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Add Danish sudoers translation from translationproject.org
+       [fa9cd9758249] <1.8>
+
+       * Add dedicated callback function for runas_default sudoers setting
+       that only sets runas_pw if no runas user or group was specified by
+       the user.
+       [3fb4b18525de] <1.8>
+
+2011-08-09  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Update Finish, Polish, Russian and Ukrainian translations from
+       translationproject.org.
+       [0fcd8f6aff0a] <1.8>
+
+       * Makefile.in:
+       Go back to using a callback for runas_default to keep runas_pw in
+       sync. This is needed to make per-entry runas_default settings work
+       with LDAP-based sudoers. Instead of declaring it a callback in
+       def_data.in, sudo and testsudoers poke sudo_defs_table[] which is a
+       bit naughty, but avoids requiring stub functions in visudo and the
+       tests.
+       [4e8e70832f06] <1.8>
+
+2011-08-05  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot:
+       Regen pot files
+       [ca5c58c599a6] <1.8>
+
+       * Makefile.in:
+       Add check for out of date message catalogs when doing "make dist".
+       [36414e5c762b] <1.8>
+
+2011-08-02  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure, configure.in:
+       Make sure compiler supports static-libgcc before using it.
+       [6c98e8809291] <1.8>
+
+2011-08-01  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Link libsudo_noexec.la with LDLDFLAGS for -static-libgcc
+       [a0a3a3fa6470] <1.8>
+
+2011-07-30  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Add new Russian sudo translation from translationproject.org and
+       rebuild the other translation files.
+       [e953d7d1ca6d] <1.8>
+
+2011-07-29  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Update Finish and Polish translations from translationproject.org
+       [17e408d73c85] <1.8>
+
+       * Go back to escaping the command args for "sudo -i" and "sudo -s"
+       before calling the plugin. Otherwise, spaces in the command args
+       are not treated properly. The sudoers plugin will unescape non-
+       spaces to make matching easier.
+       [f666191a4e80] <1.8>
+
+2011-07-28  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Fix some potential problems found by the clang static analyzer, none
+       serious.
+       [c1ab4b940980] <1.8>
+
+       * Updated Ukranian and Chinese (simplified) po files from
+       translationproject.org
+       [792a66672715] <1.8>
+
+2011-07-27  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Updated Polish translation from translationproject.org
+       [5f434cc04482] <1.8>
+
+       * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot:
+       Rebuild pot files
+       [639230dbd741] <1.8>
+
+       * Don't try to audit failure if the runas user does not exist. We
+       don't have the user's command at this point so there is nothing to
+       audit. Add a NULL check in audit_success() and audit_failure() just
+       to be on the safe side.
+       [2bfb96a32b00] <1.8>
+
+       * Add -g to CFLAG for PIE builds.
+       [e4c94977ca4e] <1.8>
+
+2011-07-25  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Remove fallback to per-group lookup when matching groups in sudoers.
+       The sudo front-end will now use getgrouplist() to get the user's
+       list of groups if getgroups() fails or returns zero groups so we
+       always have a list of the user's groups. For systems with
+       mbr_check_membership() which support more that NGROUPS_MAX groups
+       (Mac OS X), skip the call to getgroups() and use getgrouplist() so
+       we get all the groups.
+       [168d6d4a386b] <1.8>
+
+2011-07-22  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Fix setgroups() fallback code on EINVAL.
+       [dd1310945ab3] <1.8>
+
+       * Fix two PERM_INITIAL cases that were still using user_gids.
+       [d497d0d47a23] <1.8>
+
+       * Add Polish sudo message catalog
+       [1a0aa3f9f179] <1.8>
+
+       * user_group is no longer used, remove it
+       [379185a76094] <1.8>
+
+2011-07-21  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Add Polish translation from translationproject.org
+       [2e7cdfe4ef41] <1.8>
+
+       * Add a wrapper for setgroups() that trims off extra groups and
+       retries if setgroups() fails. Also add some missing addrefs for
+       PERM_USER and PERM_FULL_USER.
+       [bacb4170a510] <1.8>
+
+       * configure, configure.in:
+       Instead of keeping separate groups and gids arrays, create struct
+       group_info and use it to store both, along with a count for each.
+       Cache group info on a per-user basis using getgrouplist() to get the
+       groups. We no longer need special to special case the user or list
+       user for user_in_group() and thus no longer need to reset the groups
+       list when listing another user.
+       [f1d8962821a0] <1.8>
+
+       * Don't rely on NULL since we don't include a header for it.
+       [ed46286f848b] <1.8>
+
+       * Fix typo
+       [a38b8fbb0e70] <1.8>
+
+       * Do not shadow global sudo_mode with a local variable in set_cmnd()
+       [8e462ebafea4] <1.8>
+
+2011-07-17  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * bash 2.x doesd not support the -l flag and exits with an error if it
+       is specified so use --login instead. This causes an error with bash
+       1.x (which uses -login instead) but this version is hopefully less
+       used than 2.x.
+       [73020a67b9d5] <1.8>
+
+       * Add Polish translation from translationproject.org
+       [8cac0da9ffb1] <1.8>
+
+2011-07-13  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Make error strings translatable.
+       [d1ff594f27b5] <1.8>
+
+       * Only run configure with --with-pam-login for RHEL 5 and above.
+       [2f1a0ff5230e] <1.8>
+
+       * Fix typo in summary
+       [1e1d7dcae9ab] <1.8>
+
+2011-07-11  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Add missing logwrap.c
+       [abcd28c194d2] <1.8>
+
+       * Split out log file word wrap code into its own file and add unit
+       tests. Fixes an off-by one in the word wrap when the log line
+       length matches loglinelen.
+       [0ae1c7aa9ef1] <1.8>
+
+2011-07-05  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * For SuSE, only use /usr/lib64 as libexec if generating 64-bit
+       binaries.
+       [4448fa1c639f] <1.8>
+
+       * Fix build error when --without-noexec configure option is used.
+       [f6bfd748ae45] <1.8>
+
+       * configure, configure.in:
+       Disable noexec for AIX < 5. LDR_PRELOAD is only available in AIX
+       5.3 and above.
+       [9d957ae1840d] <1.8>
+
+2011-07-03  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * NEWS, doc/UPGRADE:
+       Document group lookup change and possible side effects.
+       [fe4b2d2701b2] <1.8>
+
+2011-07-01  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Resolve the list of gids passed in from the sudo frontend (the
+       result of getgroups()) to names and store both the group names and
+       ids in the sudo_user struct. When matching groups in the sudoers
+       file, match based on the names in the groups list first and only do
+       a gid-based match when we absolutely have to. By matching on the
+       group name (as it is listed in sudoers) instead of id (which we
+       would have to resolve) we save a lot of group lookups for sudoers
+       files with a lot of groups in them.
+       [c10d208bd7e5] <1.8>
+
+2011-06-29  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * NEWS:
+       Update for 1.8.2rc5
+       [f6a3aa2edf7a] <1.8>
+
+2011-06-26  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Workaround for "sudo -i command" and newer versions of bash which
+       don't go into login mode when -c is specified unless -l is too.
+       [381e74d35006] <1.8>
+
+2011-06-23  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Rewrite logfile word wrapping code to be more straight-forward and
+       actually wrap at the correct place.
+       [8a7862d6a82f] <1.8>
+
+2011-06-22  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * NEWS:
+       Fix typo
+       [2456ad2ad3e3] <1.8>
+
+       * NEWS:
+       Mention use_pty bug fix
+       [f4eab5193452] <1.8>
+
+       * Set use_pty=true in command details when use_pty is set in sudoers.
+       From Ludwig Nussel
+       [abaafc5793d9] <1.8>
+
+2011-06-20  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Sync Chinese (simplified) PO files from translationproject.org
+       [a4cf84dd9ddf] <1.8>
+
+2011-06-18  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Add Danish translation from translationproject.org and add missing
+       Basque mo files.
+       [672b88adcc34] <1.8>
+
+       * Makefile.in, configure, configure.in:
+       No longer need to specify LINGUAS in configure, "make install-nls"
+       now just installs all the .mo files it finds.
+       [c226a39ece48] <1.8>
+
+2011-06-17  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Build CONTRIBUTORS from newly-added contributors.pod
+       [b8871dd293ff] <1.8>
+
+       * Rework the wording in the leading paragraph
+       [d8b081dedeb3] <1.8>
+
+2011-06-16  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Add a CONTRIBUTORS file with the names of folks who have contributed
+       code or patches to sudo since I started maintaining it (plus the
+       original authors).
+       [8b064e8996af] <1.8>
+
+2011-06-13  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Preserve SHELL variable for "sudo -s". Otherwise we can end up with
+       a situation where the SHELL variable and the actual shell being run
+       do not match.
+       [8f5bb61a8b76] <1.8>
+
+2011-06-10  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure, configure.in:
+       Only enable Solaris project support when setproject() is present in
+       libproject.
+       [bf370ff3c194] <1.8>
+
+       * Explicitly set mode and owner of /etc/sudoers instead of relying on
+       "cp -p" to work in the postinstall script. On AIX 6.1 at least the
+       postinstall script runs before the final file permissions are set.
+       [7a4a87405349] <1.8>
+
+       * Refer the user to the "Command Environment" section in description
+       of sudo's -i option.
+       [1a063eaf9670] <1.8>
+
+       * Fix typo
+       [442c50370c44] <1.8>
+
+       * If there is no old dependency for an object file, use the MANIFEST
+       to find its source.
+       [d95c77ad283f] <1.8>
+
+       * Remove dependency for getgrouplist.lo as we don't ship that source
+       file.
+       [bbede77e6256] <1.8>
+
+       * Do not declare yyparse() static as the actual function generated by
+       yacc is extern.
+       [8e615bd15a4c] <1.8>
+
+       * Makefile.in:
+       Remove locale files in "make uninstall"
+       [9791be90d5ac] <1.8>
+
+2011-06-06  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure.in:
+       Add Basque translation and sync Finish and Ukranian translations.
+       [64af34789164] <1.8>
+
+       * NEWS:
+       Update PAM change to reflect latest checkin.
+       [657cddf2077a] <1.8>
+
+       * configure, configure.in:
+       FreeBSD no longer needs the main sudo binary to link with -lpam now
+       that plug-ins are loaded with RTLD_GLOBAL.
+       [573a6f4b29af] <1.8>
+
+       * Load plugins with RTLD_GLOBAL instead of RTLD_LOCAL. This fixes
+       problems with pam modules not having access to symbols provided by
+       libpam on some platforms. Affects FreeBSD and SLES 10 at least.
+       [4ec864fdba46] <1.8>
+
+       * Makefile.in:
+       Move xgettext invocation out of update-po target into update-pot
+       [421ac1a073ea] <1.8>
+
+2011-06-04  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot:
+       Regenerate .pot files for 1.8.2rc2
+       [d2a891e3d3dd] <1.8>
+
+       * Makefile.in:
+       Move nls targets to the top level Makefile so the paths in the pot
+       file are saner
+       [6c256cb77f78] <1.8>
+
+       * NEWS:
+       Update 1.8.2 news
+       [17bd04278b04] <1.8>
+
+       * Add compiled version of sudo Finish translation
+       [ff9d20a02aa0] <1.8>
+
+       * Update MANIFEST with .po and .mo files Rebuild sudoers fi and uk .mo
+       files
+       [60c4f3b3829c] <1.8>
+
+       * configure, configure.in:
+       Add Finish translation from translationproject.org
+       [ade788a35521] <1.8>
+
+       * The group named by exempt_group should not have a % prefix.
+       [1f74c691c1e1] <1.8>
+
+       * Fix typo; "Defaults group_plugin" not "Defaults sudo_plugin"
+       [58d36c0e76f9] <1.8>
+
+       * Fix compressed io log corruption in background mode by using _exit()
+       instead of exit() to avoid flushing buffers twice.
+
+       Improved background mode support. When not allocating a pty, the
+       command is run in its own process group. This prevents write access
+       to the tty. When running in a pty, stdin is not hooked up and we
+       never read from /dev/tty, which results in similar behavior.
+       [fe50d6a5c5b9] <1.8>
+
+2011-05-31  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Clean up regress files Generate proper dependencies for regress objs
+       in compat
+       [264196584549] <1.8>
+
+       * Add missing dependency for check_fill.o.
+       [c41f4e6ff078] <1.8>
+
+2011-05-30  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * INSTALL, configure, configure.in:
+       Add support for --enable-nls[=location]
+       [0ea8e7bd1739] <1.8>
+
+2011-05-28  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Include gettext.h
+       [fe8bab6403c6] <1.8>
+
+       * Quiet gcc warnings.
+       [aa16d09710a7] <1.8>
+
+       * configure, configure.in:
+       Don't install .mo files if gettext was not found.
+       [c6b233e829aa] <1.8>
+
+2011-05-27  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Always allocate a pty when running a command in the background but
+       call setsid() after forking to make sure we don't end up with a
+       controlling tty.
+       [77c6b2923714] <1.8>
+
+       * Add missing space between command name and the first command line
+       argument.
+       [d0a36b9c0f38] <1.8>
+
+       * Quiet a compiler warning on some platforms.
+       [654e76cf0574] <1.8>
+
+       * README file that directs people to translationproject.org
+       [5545e9a5ae37] <1.8>
+
+       * Sync translations with TP
+       [b054ce577022] <1.8>
+
+       * Makefile.in:
+       Add 'sync-po' target to top-level Makefile to rsync the po files
+       from translationproject.org.
+       [87a5011b0410] <1.8>
+
+       * install nls files from install target
+       [a3feba9ef323] <1.8>
+
+       * Makefile.in:
+       Include .mo files in sudo binary packags.
+       [bc3ee7e7fb44] <1.8>
+
+       * configure, configure.in:
+       Add simplified chinese translation
+       [c22e6842c766] <1.8>
+
+2011-05-26  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * configure, configure.in:
+       Add ukranian translation
+       [0bb9e6437f0f] <1.8>
+
+       * refer to siglist.c, not ./siglist.c since not all makes will treat
+       foo and ./foo the same.
+       [909051ff6061] <1.8>
+
+       * Set def_preserve_groups before searching for the command when the -P
+       flag is specified.
+       [08e9378f50e4] <1.8>
+
+       * Makefile.in:
+       Add dependency for siglist.lo in compat. This is a generated file
+       so "make depend" needs to depend on it.
+       [e6c0daf36af0] <1.8>
+
+       * More dependency fixes.
+       [7fed03624689] <1.8>
+
+       * Fix a few dependencies.
+       [7cb86c721961] <1.8>
+
+       * Place compiled mo files in the src dir, not the build dir. When
+       installing compiled mo files, display a status message.
+       [b87aa18a9968] <1.8>
+
+2011-05-25  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * Tivoli Directory Server requires that seconds be present in a
+       timestamp, even though RFC 4517 states that they are optional.
+       [47ebf110ea7a] <1.8>
+
+       * Add missing bit of copyright
+       [d05d28a91bc4] <1.8>
+
+       * Mention cycle detection warnings
+       [ee8231aa1aed] <1.8>
+
+       * When checking aliases, also check the contents of the alias in case
+       there are problems with an alias that is referenced inside another.
+       Replace the self reference check with real alias cycle detection.
+       [abcfe1bc95d8] <1.8>
+
+       * Set errno to ELOOP in alias_find() if there is a cycle. Set errno to
+       ENOENT in alias_find() and alias_remove() if the entry could not be
+       found.
+       [e73d169f4e9b] <1.8>
+
+       * Increment alias_seqno before calls to alias_remove_recursive() to
+       avoid false positives with the alias loop detection. Fixes spurious
+       warnings about unused aliases when they are nested.
+       [ac094820ef19] <1.8>
+
+       * add mkdep.pl
+       [3721e9654ba6] <1.8>
+
+       * Add dependency on convenience libs to binaries
+       [8a4db8226dfe] <1.8>
+
+       * Makefile.in:
+       mkdep.pl only works when run from the src dir
+       [2480427a0680] <1.8>
+
+       * Makefile.in:
+       Auto-generate Makefile dependencies with a perl script.
+       [ef5f56907d97] <1.8>
+
+2011-05-23  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * If the user specifies a runas group via sudo's -g option that
+       matches the runas user's group in the passwd database and that group
+       is not denied in the Runas_Spec, allow it. Thus, if user root's gid
+       in /etc/passwd is 0, then "sudo -u root -g root id" is allow even if
+       no groups are present in the Runas_Spec.
+       [942e1e7c5090] <1.8>
+
+2011-05-22  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * NEWS:
+       Mention what is new in 1.8.2 (for now)
+       [d44b26eceee5] <1.8>
+
+       * Add dependencies on gettext.h
+       [32c61c6af852] <1.8>
+
+       * Fix install-nls target with HP-UX sh when gettext is not present.
+       [3441cece9638] <1.8>
+
+       * doc/sudo.cat, doc/sudo.man.in, doc/sudo_plugin.cat,
+       doc/sudo_plugin.man.in, doc/sudoers.cat, doc/sudoers.ldap.cat,
+       doc/sudoers.ldap.man.in, doc/sudoers.man.in, doc/sudoreplay.cat,
+       doc/sudoreplay.man.in, doc/visudo.cat, doc/visudo.man.in:
+       Regen for sudo 1.8.2
+       [9ea124b542cc] <1.8>
+
+2011-05-20  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * plugins/sudoers/po/sudoers.pot, src/po/sudo.pot:
+       regenerate .pot files for lbuf changes
+       [a8a9cc62c3a5] <1.8>
+
+       * configure, configure.in:
+       Add missing "checking" message for gettext when using the cache.
+       [4136bc346576] <1.8>
+
+       * Add primitive format string support to the lbuf code to make
+       translations simpler.
+       [22fc74618d09] <1.8>
+
+       * configure, configure.in, plugins/sudoers/po/sudoers.pot,
+       src/po/sudo.pot:
+       Bump version to 1.8.2
+       [999de1ac5b3e] <1.8>
+
+       * Add message catalog template files for sudo and the sudoers module.
+       [6afad75e7afa] <1.8>
+
+       * configure.in:
+       Add gettext.h convenience header. This is similar to but distinct
+       from the one included with the gettext package.
+       [5ae5a86e0d06] <1.8>
+
+       * configure, configure.in:
+       Add checks for nroff -c and -Tascii flags
+       [580c21905280] <1.8>
+
+       * configure, configure.in:
+       Add check for HP bundled C Compiler (which cannot create shared
+       libs)
+       [34f616cbb0f3] <1.8>
+
+       * Fix C format warnings.
+       [f20a43a817f0] <1.8>
+
+       * Add __printflike
+       [76bf8a4bf075] <1.8>
+
+       * Translate help / usage strings.
+       [16c5b7902d4c] <1.8>
+
+       * Set --msgid-bugs-address to the bugzilla url
+       [3e3cfa7b4ceb] <1.8>
+
+       * INSTALL, Makefile.in, README, configure, configure.in:
+       Add scaffolding to update .po files and install .mo files.
+       [a51e60b35e47] <1.8>
+
+       * Minor warning/error cleanup
+       [593144ac87ff] <1.8>
+
+       * configure.in:
+       Emulate ngettext for the non-nls case
+       [7cdf82de4dee] <1.8>
+
+       * Do not mark untranslatable strings for translation
+       [088271ed02d0] <1.8>
+
+       * Use ROOT_UID not 0.
+       [f901fa2fdaf2] <1.8>
+
+       * Minor warning/error message cleanup
+       [b99c7ef46236] <1.8>
+
+       * cannot -> "unable to" in warning/error messages can't -> "unable to"
+       in warning/error messages
+       [5119140fabc7] <1.8>
+
+       * configure, configure.in:
+       FreeBSD needs the main sudo executable to link with -lpam when
+       loading dynaic pam modules for some reason.
+       [738b6778a505] <1.8>
+
+       * We don't want to translate debugging messages.
+       [357a575c2dfd] <1.8>
+
+       * configure, configure.in:
+       Add calls to bindtextdomain() and textdomain() Currently there are
+       two domains, one for the sudo front-end and one for the sudoers
+       plugin and its associated utilities.
+       [907f39439d80] <1.8>
+
+       * configure, configure.in:
+       Fix caching of libc gettext check.
+       [e229c21f412f] <1.8>
+
+       * Mark defaults descriptions for translation
+       [65e03d1f8203] <1.8>
+
+       * NEWS:
+       Update for sudo 1.8.1p2
+       [89c31f2aa11e] <1.8>
+
+       * Quiet compiler warning when SELinux is enabled.
+       [51b1d7c8aa86] <1.8>
+
+       * dd missing includes of libintl.h.
+       [25662143d36d] <1.8>
+
+       * Fix gettext marker.
+       [7618856ba5de] <1.8>
+
+       * Include libint.h where needed.
+       [cc256b297b9d] <1.8>
+
+       * Prepare sudoers module messages for translation.
+       [1b7f0bbaa55f] <1.8>
+
+       * Only check gid of sudoers file if it is group-readable.
+       [f3cae943f35a] <1.8>
+
+       * For AIX, keep calling authenticate() until reenter reaches 0.
+       [e412676bac73] <1.8>
+
+       * configure, configure.in:
+       Cache the status of the initial gettext() check.
+       [c32281768c0f] <1.8>
+
+       * INSTALL, configure, configure.in:
+       Add --disable-nls flag and improve checks for gettext.
+       [b39674c1e538] <1.8>
+
+       * configure, configure.in:
+       When building with gcc on HP-UX, use -march=1.1 to produce portable
+       binaries on a pa-risc2 host. Previously, the +Dportable option was
+       used for the HP-UX C compiler but gcc always produced native
+       binaries.
+       [41351c23ad41] <1.8>
+
+       * Prepare sudo front end messages for translation.
+       [7807d6f74dac] <1.8>
+
+       * configure, configure.in:
+       Add initial scaffolding to support localization via gettext()
+       [cdbbff7e6376] <1.8>
+
+2011-05-19  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * doc/license.pod:
+       update copyright year
+       [d681661f03cc] <1.8>
+
+       * INSTALL, README:
+       No need to include version number at the top of these files.
+       [7e11f673f773] <1.8>
+
+       * README:
+       This is sudo 1.8.1 not 1.8.0
+       [4d674f230d8a] <1.8>
+
 2011-05-04  Todd C. Miller  <Todd.Miller@courtesan.com>
 
        * Don't let the fnmatch/glob macros expand the function prototype.
diff --git a/INSTALL b/INSTALL
index b8156e64c7c0d5365af9be933c88fef6b580865c..6597087f2d7807cb0e9efbe63aa29a6a0680ab83 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
-Installation instructions for Sudo 1.8
-======================================
+Sudo installation instructions
+==============================
 
 Sudo uses a `configure' script to probe the capabilities and type
 of the system in question.  In this release, `configure' takes many
@@ -638,6 +638,21 @@ The following options are also configurable at runtime:
         Disable environment resetting.  This sets the default value
         of the "env_reset" Defaults option in sudoers to false.
 
+  --enable-nls[=location]
+        Enable natural language support using the gettext() family
+        of functions.  If specified, location is the base directory
+        containing the libintl include and lib directories.  If
+        this option is not specified, configure will look for the
+        gettext() family of functions in the standard C library
+        first, then check for a standalone libintl (linking with
+        libiconv as needed).
+
+  --disable-nls
+        Disable natural language support.  By default, sudo will
+        use the gettext() family of functions, if available, to
+        implement messages in the invoking user's native language.
+       Note that translations do not exist for all languages.
+
 Shadow password and C2 support
 ==============================
 
index f50d03e8f2196cba1ef9cec8ca46c8329f7f1168..b670813ac6d4decb4e96449d5def7aeff994d973 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -15,6 +15,7 @@ common/fileops.c
 common/fmt_string.c
 common/lbuf.c
 common/list.c
+common/setgroups.c
 common/term.c
 common/zero_bytes.c
 compat/Makefile.in
@@ -25,6 +26,7 @@ compat/dlopen.c
 compat/fnmatch.c
 compat/fnmatch.h
 compat/getcwd.c
+compat/getgrouplist.c
 compat/getline.c
 compat/getprogname.c
 compat/glob.c
@@ -55,11 +57,13 @@ config.h.in
 config.sub
 configure
 configure.in
+doc/CONTRIBUTORS
 doc/HISTORY
 doc/LICENSE
 doc/Makefile.in
 doc/TROUBLESHOOTING
 doc/UPGRADE
+doc/contributors.pod
 doc/history.pod
 doc/license.pod
 doc/sample.pam
@@ -93,6 +97,7 @@ include/Makefile.in
 include/alloc.h
 include/error.h
 include/fileops.h
+include/gettext.h
 include/lbuf.h
 include/list.h
 include/missing.h
@@ -105,6 +110,7 @@ m4/ltoptions.m4
 m4/ltsugar.m4
 m4/ltversion.m4
 m4/lt~obsolete.m4
+mkdep.pl
 mkinstalldirs
 mkpkg
 pathnames.h.in
@@ -170,16 +176,34 @@ plugins/sudoers/linux_audit.c
 plugins/sudoers/linux_audit.h
 plugins/sudoers/logging.c
 plugins/sudoers/logging.h
+plugins/sudoers/logwrap.c
 plugins/sudoers/match.c
 plugins/sudoers/mkdefaults
 plugins/sudoers/parse.c
 plugins/sudoers/parse.h
 plugins/sudoers/plugin_error.c
+plugins/sudoers/po/README
+plugins/sudoers/po/da.mo
+plugins/sudoers/po/da.po
+plugins/sudoers/po/eu.mo
+plugins/sudoers/po/eu.po
+plugins/sudoers/po/fi.mo
+plugins/sudoers/po/fi.po
+plugins/sudoers/po/pl.mo
+plugins/sudoers/po/pl.po
+plugins/sudoers/po/sudoers.pot
+plugins/sudoers/po/uk.mo
+plugins/sudoers/po/uk.po
+plugins/sudoers/po/zh_CN.mo
+plugins/sudoers/po/zh_CN.po
 plugins/sudoers/pwutil.c
 plugins/sudoers/redblack.c
 plugins/sudoers/redblack.h
 plugins/sudoers/regress/iolog_path/check_iolog_path.c
 plugins/sudoers/regress/iolog_path/data
+plugins/sudoers/regress/logging/check_wrap.c
+plugins/sudoers/regress/logging/check_wrap.in
+plugins/sudoers/regress/logging/check_wrap.out.ok
 plugins/sudoers/regress/parser/check_fill.c
 plugins/sudoers/regress/sudoers/test1.in
 plugins/sudoers/regress/sudoers/test1.out.ok
@@ -236,6 +260,22 @@ src/get_pty.c
 src/load_plugins.c
 src/net_ifs.c
 src/parse_args.c
+src/po/README
+src/po/da.mo
+src/po/da.po
+src/po/eu.mo
+src/po/eu.po
+src/po/fi.mo
+src/po/fi.po
+src/po/pl.mo
+src/po/pl.po
+src/po/ru.mo
+src/po/ru.po
+src/po/sudo.pot
+src/po/uk.mo
+src/po/uk.po
+src/po/zh_CN.mo
+src/po/zh_CN.po
 src/preload.c
 src/selinux.c
 src/sesh.c
index 6df0c07c32e01ea5c7f3ee84892732a2c7533667..1f5f7139989e339a0399cfa491bae051177581d0 100644 (file)
@@ -29,11 +29,16 @@ sysconfdir = @sysconfdir@
 libexecdir = @libexecdir@
 includedir = @includedir@
 datarootdir = @datarootdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 docdir = @docdir@
 mandir = @mandir@
 timedir = @timedir@
 
+# User and group ids the installed files should be "owned" by
+install_uid = 0
+install_gid = 0
+
 # sudoers owner and mode for package building
 sudoersdir = $(sysconfdir)
 sudoers_uid = @SUDOERS_UID@
@@ -51,6 +56,25 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
 
 SHELL = @SHELL@
 
+INSTALL = $(SHELL) $(top_srcdir)/install-sh -c
+
+ECHO_N = @ECHO_N@
+ECHO_C = @ECHO_C@
+
+# Message catalog support
+NLS = @SUDO_NLS@
+POTFILES = src/po/sudo.pot plugins/sudoers/po/sudoers.pot
+MSGFMT = msgfmt
+MSGMERGE = msgmerge
+XGETTEXT = xgettext
+XGETTEXT_OPTS = -k_ -kN_ --copyright-holder="Todd C. Miller" \
+               "--msgid-bugs-address=http://www.sudo.ws/bugs" \
+               --package-name=@PACKAGE_NAME@ --package-version=$(VERSION) \
+               --flag warning:1:c-format --flag warningx:1:c-format \
+               --flag error:2:c-format --flag errorx:2:c-format \
+               --flag easprintf:3:c-format --flag lbuf_append:2:c-format \
+               --flag lbuf_append_quoted:3:c-format --foreign-user
+
 all: config.status
        for d in $(SUBDIRS) $(SAMPLES); \
            do (cd $$d && exec $(MAKE) $@) && continue; \
@@ -63,21 +87,63 @@ check pre-install: config.status
            exit $$?; \
        done
 
-install-dirs install-binaries install-includes install-plugin uninstall: config.status pre-install
+install-dirs install-binaries install-includes install-plugin: config.status pre-install
        for d in $(SUBDIRS); \
            do (cd $$d && exec $(MAKE) $@) && continue; \
            exit $$?; \
        done
 
-install install-doc: config.status ChangeLog pre-install
+install-doc: config.status ChangeLog
        for d in $(SUBDIRS); \
            do (cd $$d && exec $(MAKE) $@) && continue; \
            exit $$?; \
        done
 
+install: config.status pre-install install-nls
+       for d in $(SUBDIRS); \
+           do (cd $$d && exec $(MAKE) $@) && continue; \
+           exit $$?; \
+       done
+
+uninstall: uninstall-nls
+       for d in $(SUBDIRS); \
+           do (cd $$d && exec $(MAKE) $@) && continue; \
+           exit $$?; \
+       done
+
+uninstall-nls:
+       for pot in $(POTFILES); do \
+           domain=`basename $$pot .pot`; \
+           podir=`dirname $$pot`; \
+           for po in $$podir/*.po; do \
+               lang=`basename $$po .po`; \
+               rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$$domain.mo; \
+           done; \
+       done
+
 autoconf:
        autoconf -I m4
 
+siglist.c:
+       (cd compat && exec $(MAKE) $@)
+
+depend: siglist.c
+       @if test "$(srcdir)" != "."; then \
+           echo "make depend only supported in the source directory"; \
+           exit 1; \
+       fi; \
+       $(srcdir)/mkdep.pl $(srcdir)/common/Makefile.in \
+           $(srcdir)/compat/Makefile.in $(srcdir)/plugins/sample/Makefile.in \
+           $(srcdir)/plugins/sample_group/Makefile.in \
+           $(srcdir)/plugins/sudoers/Makefile.in \
+           $(srcdir)/src/Makefile.in $(srcdir)/zlib/Makefile.in; \
+       ./config.status --file $(srcdir)/common/Makefile \
+           --file $(srcdir)/compat/Makefile \
+           --file $(srcdir)/plugins/sample/Makefile \
+           --file $(srcdir)/plugins/sample_group/Makefile \
+           --file $(srcdir)/plugins/sudoers/Makefile \
+           --file $(srcdir)/src/Makefile --file $(srcdir)/zlib/Makefile
+
 # The 1.8 branch started February 25, 2011
 ChangeLog:
        if test -d $(srcdir)/.hg && cd $(srcdir); then \
@@ -100,7 +166,91 @@ libtool: $(LIBTOOL_DEPS)
 Makefile: $(srcdir)/Makefile.in
        ./config.status --file Makefile
 
-dist: ChangeLog $(srcdir)/MANIFEST
+sync-po:
+       rsync -Lrtvz  translationproject.org::tp/latest/sudo/ src/po/
+       rsync -Lrtvz  translationproject.org::tp/latest/sudoers/ plugins/sudoers/po/
+
+update-pot:
+       @if $(XGETTEXT) --help >/dev/null 2>&1; then \
+           cd $(top_srcdir); \
+           for pot in $(POTFILES); do \
+               echo "Updating $$pot"; \
+               domain=`basename $$pot .pot`; \
+               case "$$domain" in \
+                   sudo) cfiles="src/*c common/*c compat/*c";; \
+                   sudoers) cfiles="plugins/sudoers/*.c plugins/sudoers/auth/*.c";; \
+                   *) echo unknown domain $$domain; continue;; \
+               esac; \
+               $(XGETTEXT) $(XGETTEXT_OPTS) -d$$domain $$cfiles -o $$pot.tmp; \
+               if diff -I'^.POT-Creation-Date' $$pot.tmp $$pot >/dev/null; then \
+                   rm -f $$pot.tmp; \
+               else \
+                   mv -f $$pot.tmp $$pot; \
+               fi; \
+           done; \
+       fi
+
+update-po: update-pot
+       @if $(MSGFMT) --help >/dev/null 2>&1; then \
+           cd $(top_srcdir); \
+           for pot in $(POTFILES); do \
+               podir=`dirname $$pot`; \
+               for po in $$podir/*.po; do \
+                   echo $(ECHO_N) "Updating $$po$(ECHO_C)"; \
+                   $(MSGMERGE) --update $$po $$pot; \
+                   $(MSGFMT) --output /dev/null --check-format $$po || exit 1; \
+               done; \
+           done; \
+       fi
+
+compile-po:
+       @if $(MSGFMT) --help >/dev/null 2>&1; then \
+           cd $(top_srcdir); \
+           rm -f Makefile.$$$$; \
+           POFILES=""; \
+           for pot in $(POTFILES); do \
+               podir=`dirname $$pot`; \
+               for po in $$podir/*.po; do \
+                   POFILES="$$POFILES $$po"; \
+               done; \
+           done; \
+           echo "all: `echo $$POFILES | sed 's/\.po/.mo/g'`" >> Makefile.$$$$; \
+           echo "" >> Makefile.$$$$; \
+           for po in $$POFILES; do \
+               mo=`echo $$po | sed 's/po$$/mo/'`; \
+               echo "$$mo: $$po" >> Makefile.$$$$; \
+               echo "  $(MSGFMT) --statistics -c -o $$mo $$po" >> Makefile.$$$$; \
+           done; \
+           make -f Makefile.$$$$; \
+           rm -f Makefile.$$$$; \
+       fi
+
+install-nls:
+       @if test "$(NLS)" = "enabled"; then \
+           cd $(top_srcdir); \
+           for pot in $(POTFILES); do \
+               podir=`dirname $$pot`; \
+               domain=`basename $$pot .pot`; \
+               echo $(ECHO_N) "Installing $$domain message catalogs:$(ECHO_C)"; \
+               for mo in $$podir/*.mo; do \
+                   lang=`basename $$mo .mo`; \
+                   echo $(ECHO_N) " $$lang$(ECHO_C)"; \
+                   $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \
+                   $(INSTALL) -O $(install_uid) -G $(install_gid) -M 0644 $$mo $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$$domain.mo; \
+               done; \
+               echo ""; \
+           done; \
+       fi
+
+check-dist: update-pot compile-po
+       @if [ -d .hg ]; then \
+           if hg stat -am | grep '\.[mp]ot*$$'; then \
+               echo "Uncommitted message catalog changes" 1>&2; \
+               false; \
+           fi; \
+       fi
+
+dist: check-dist ChangeLog $(srcdir)/MANIFEST
        pax -w -x ustar -s '/^/$(PACKAGE_TARNAME)-$(VERSION)\//' \
            -f ../$(PACKAGE_TARNAME)-$(VERSION).tar \
            `sed 's/[   ].*//' $(srcdir)/MANIFEST`
@@ -119,6 +269,7 @@ package: sudo.pp
            includedir=$(includedir) \
            timedir=$(timedir) \
            mandir=$(mandir) \
+           localedir=$(localedir) \
            docdir=$(docdir) \
            sysconfdir=$(sysconfdir) \
            sudoersdir=$(sudoersdir) \
diff --git a/NEWS b/NEWS
index 729ad66eff669cbf0af546dbe440a5804e06a6fd..abcbcc9ea1b8e19525711a2fdebb48833777c8a1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,59 @@
+What's new in Sudo 1.8.2?
+
+ * Sudo, visudo, sudoreplay and the sudoers plug-in now have natural
+   language support (NLS). This can be disabled by passing configure
+   the --disable-nls option.  Sudo will use gettext(), if available,
+   to display translated messages.  All translations are coordinated
+   via The Translation Project, http://translationproject.org/.
+
+ * Plug-ins are now loaded with the RTLD_GLOBAL flag instead of
+   RTLD_LOCAL.  This fixes missing symbol problems in PAM modules
+   on certain platforms, such as FreeBSD and SuSE Linux Enterprise.
+
+ * I/O logging is now supported for commands run in background mode
+   (using sudo's -b flag).
+
+ * Group ownership of the sudoers file is now only enforced when
+   the file mode on sudoers allows group readability or writability.
+
+ * Visudo now checks the contents of an alias and warns about cycles
+   when the alias is expanded.
+
+ * If the user specifes a group via sudo's -g option that matches
+   the target user's group in the password database, it is now
+   allowed even if no groups are present in the Runas_Spec.
+
+ * The sudo Makefiles now have more complete dependencies which are
+   automatically generated instead of being maintained manually.
+
+ * The "use_pty" sudoers option is now correctly passed back to the
+   sudo front end.  This was missing in previous versions of sudo
+   1.8 which prevented "use_pty" from being honored.
+
+ * "sudo -i command" now works correctly with the bash version
+   2.0 and higher.  Previously, the .bash_profile would not be
+   sourced prior to running the command unless bash was built with
+   NON_INTERACTIVE_LOGIN_SHELLS defined.
+
+ * When matching groups in the sudoers file, sudo will now match
+   based on the name of the group instead of the group ID. This can
+   substantially reduce the number of group lookups for sudoers
+   files that contain a large number of groups.
+
+ * Multi-factor authentication is now supported on AIX.
+
+ * Added support for non-RFC 4517 compliant LDAP servers that require
+   that seconds be present in a timestamp, such as Tivoli Directory Server.
+
+ * If the group vector is to be preserved, the PATH search for the
+   command is now done with the user's original group vector.
+
+ * For LDAP-based sudoers, the "runas_default" sudoOption now works
+   properly in a sudoRole that contains a sudoCommand.
+
+ * Spaces in command line arguments for "sudo -s" and "sudo -i" are
+   now escaped with a backslash when checking the security policy.
+
 What's new in Sudo 1.8.1p2?
 
  * Two-character CIDR-style IPv4 netmasks are now matched correctly
diff --git a/README b/README
index 3ed6c5b78bf3c136657a0a0e192f377dab8da1a5..919c74a6565d97e06382a0e45a97ac4d34e99c08 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,3 @@
-This is Sudo version 1.8.0
-
 The sudo philosophy
 ===================
 Sudo is a program designed to allow a sysadmin to give limited root privileges
index a0fd01da4391e2aebbd698bd4065fd3b4a8aee6b..a1319eff6304842f8b3884511636c7ce8a5e9f88 100644 (file)
@@ -30,7 +30,7 @@ CC = @CC@
 LIBTOOL = @LIBTOOL@
 
 # C preprocessor flags
-CPPFLAGS = -I. -I$(top_builddir) -I$(incdir) @CPPFLAGS@
+CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(top_srcdir) @CPPFLAGS@
 
 # Usually -O and/or -g
 CFLAGS = @CFLAGS@
@@ -43,7 +43,7 @@ DEFS = @OSDEFS@
 SHELL = @SHELL@
 
 LTOBJS = alloc.lo atobool.lo fileops.lo fmt_string.lo \
-        lbuf.lo list.lo term.lo zero_bytes.lo @COMMON_OBJS@
+        lbuf.lo list.lo setgroups.lo term.lo zero_bytes.lo @COMMON_OBJS@
 
 all: libcommon.la
 
@@ -58,26 +58,6 @@ Makefile: $(srcdir)/Makefile.in
 libcommon.la: $(LTOBJS)
        $(LIBTOOL) --mode=link $(CC) -o $@ $(LTOBJS) -no-install
 
-# Dependencies
-aix.lo: $(srcdir)/aix.c $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/aix.c
-alloc.lo: $(srcdir)/alloc.c $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/alloc.c
-atobool.lo: $(srcdir)/atobool.c $(incdir)/missing.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/atobool.c
-fileops.lo: $(srcdir)/fileops.c $(incdir)/fileops.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/fileops.c
-fmt_string.lo: $(srcdir)/fmt_string.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/fmt_string.c
-lbuf.lo: $(srcdir)/lbuf.c $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h $(incdir)/missing.h $(incdir)/lbuf.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/lbuf.c
-list.lo: $(srcdir)/list.c $(incdir)/missing.h $(incdir)/list.h $(incdir)/error.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/list.c
-term.lo: $(srcdir)/term.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/term.c
-zero_bytes.lo: $(srcdir)/zero_bytes.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/zero_bytes.c
-
 pre-install:
 
 install:
@@ -110,3 +90,33 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+aix.lo: $(srcdir)/aix.c $(top_builddir)/config.h $(incdir)/missing.h \
+        $(incdir)/alloc.h $(incdir)/error.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/aix.c
+alloc.lo: $(srcdir)/alloc.c $(top_builddir)/config.h $(incdir)/missing.h \
+          $(incdir)/alloc.h $(incdir)/error.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/alloc.c
+atobool.lo: $(srcdir)/atobool.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/atobool.c
+fileops.lo: $(srcdir)/fileops.c $(top_builddir)/config.h \
+            $(top_srcdir)/compat/timespec.h $(incdir)/missing.h \
+            $(incdir)/fileops.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/fileops.c
+fmt_string.lo: $(srcdir)/fmt_string.c $(top_builddir)/config.h \
+               $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/fmt_string.c
+lbuf.lo: $(srcdir)/lbuf.c $(top_builddir)/config.h $(incdir)/missing.h \
+         $(incdir)/alloc.h $(incdir)/error.h $(incdir)/lbuf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/lbuf.c
+list.lo: $(srcdir)/list.c $(top_builddir)/config.h $(incdir)/missing.h \
+         $(incdir)/list.h $(incdir)/error.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/list.c
+setgroups.lo: $(srcdir)/setgroups.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/setgroups.c
+term.lo: $(srcdir)/term.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/term.c
+zero_bytes.lo: $(srcdir)/zero_bytes.c $(top_builddir)/config.h \
+               $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/zero_bytes.c
index 00c0f6ad8528cba7cec8ef9f302828216cae5ab5..875eb8cbb91d456a5d89b2fb187edd1556cb4b29 100644 (file)
@@ -35,6 +35,9 @@
 #include "alloc.h"
 #include "error.h"
 
+#define DEFAULT_TEXT_DOMAIN    "sudo"
+#include "gettext.h"
+
 #ifdef HAVE_GETUSERATTR
 
 #ifndef HAVE_SETRLIMIT64
@@ -138,10 +141,10 @@ aix_setauthdb(char *user)
 
     if (user != NULL) {
        if (setuserdb(S_READ) != 0)
-           error(1, "unable to open userdb");
+           error(1, _("unable to open userdb"));
        if (getuserattr(user, S_REGISTRY, &registry, SEC_CHAR) == 0) {
            if (setauthdb(registry, NULL) != 0)
-               error(1, "unable to switch to registry \"%s\" for %s",
+               error(1, _("unable to switch to registry \"%s\" for %s"),
                    registry, user);
        }
        enduserdb();
@@ -155,7 +158,7 @@ void
 aix_restoreauthdb(void)
 {
     if (setauthdb(NULL, NULL) != 0)
-       error(1, "unable to restore registry");
+       error(1, _("unable to restore registry"));
 }
 #endif
 
index 7fbf3c88d3dc8b665ccd886fdef13676538d96f4..d3a251657c2186796b9d32bf1f3aac99fd612318 100644 (file)
@@ -52,6 +52,9 @@
 #include "alloc.h"
 #include "error.h"
 
+#define DEFAULT_TEXT_DOMAIN    "sudo"
+#include "gettext.h"
+
 /*
  * If there is no SIZE_MAX or SIZE_T_MAX we have to assume that size_t
  * could be signed (as it is on SunOS 4.x).  This just means that
@@ -76,10 +79,10 @@ emalloc(size_t size)
     void *ptr;
 
     if (size == 0)
-       errorx(1, "internal error, tried to emalloc(0)");
+       errorx(1, _("internal error, tried to emalloc(0)"));
 
     if ((ptr = malloc(size)) == NULL)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     return ptr;
 }
 
@@ -93,13 +96,13 @@ emalloc2(size_t nmemb, size_t size)
     void *ptr;
 
     if (nmemb == 0 || size == 0)
-       errorx(1, "internal error, tried to emalloc2(0)");
+       errorx(1, _("internal error, tried to emalloc2(0)"));
     if (nmemb > SIZE_MAX / size)
-       errorx(1, "internal error, emalloc2() overflow");
+       errorx(1, _("internal error, emalloc2() overflow"));
 
     size *= nmemb;
     if ((ptr = malloc(size)) == NULL)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     return ptr;
 }
 
@@ -113,11 +116,11 @@ erealloc(void *ptr, size_t size)
 {
 
     if (size == 0)
-       errorx(1, "internal error, tried to erealloc(0)");
+       errorx(1, _("internal error, tried to erealloc(0)"));
 
     ptr = ptr ? realloc(ptr, size) : malloc(size);
     if (ptr == NULL)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     return ptr;
 }
 
@@ -132,14 +135,14 @@ erealloc3(void *ptr, size_t nmemb, size_t size)
 {
 
     if (nmemb == 0 || size == 0)
-       errorx(1, "internal error, tried to erealloc3(0)");
+       errorx(1, _("internal error, tried to erealloc3(0)"));
     if (nmemb > SIZE_MAX / size)
-       errorx(1, "internal error, erealloc3() overflow");
+       errorx(1, _("internal error, erealloc3() overflow"));
 
     size *= nmemb;
     ptr = ptr ? realloc(ptr, size) : malloc(size);
     if (ptr == NULL)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     return ptr;
 }
 
@@ -197,7 +200,7 @@ easprintf(char **ret, const char *fmt, ...)
     va_end(ap);
 
     if (len == -1)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     return len;
 }
 
@@ -211,7 +214,7 @@ evasprintf(char **ret, const char *format, va_list args)
     int len;
 
     if ((len = vasprintf(ret, format, args)) == -1)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     return len;
 }
 
index 92f489ef159df0c8c6e70d61af1b0686724b0d00..dc2b7bfafdc13891de04e5163975020604f36c92 100644 (file)
@@ -69,81 +69,89 @@ lbuf_destroy(struct lbuf *lbuf)
 }
 
 /*
- * Append strings to the buffer, expanding it as needed.
+ * Parse the format and append strings, only %s and %% escapes are supported.
+ * Any characters in set are quoted with a backslash.
  */
 void
-lbuf_append_quoted(struct lbuf *lbuf, const char *set, ...)
+lbuf_append_quoted(struct lbuf *lbuf, const char *set, const char *fmt, ...)
 {
     va_list ap;
-    int len = 0;
-    char *cp, *s;
-
-    va_start(ap, set);
-    while ((s = va_arg(ap, char *)) != NULL) {
-       len += strlen(s);
-       for (cp = s; (cp = strpbrk(cp, set)) != NULL; cp++)
-           len++;
-    }
-    va_end(ap);
-
-    /* Expand buffer as needed. */
-    if (lbuf->len + len >= lbuf->size) {
-       do {
-           lbuf->size += 256;
-       } while (lbuf->len + len >= lbuf->size);
-       lbuf->buf = erealloc(lbuf->buf, lbuf->size);
-    }
+    int len;
+    char *cp, *s = NULL;
 
-    va_start(ap, set);
-    /* Append each string. */
-    while ((s = va_arg(ap, char *)) != NULL) {
-       while ((cp = strpbrk(s, set)) != NULL) {
-           len = (int)(cp - s);
-           memcpy(lbuf->buf + lbuf->len, s, len);
-           lbuf->len += len;
-           lbuf->buf[lbuf->len++] = '\\';
-           lbuf->buf[lbuf->len++] = *cp;
-           s = cp + 1;
-       }
-       if (*s != '\0') {
+    va_start(ap, fmt);
+    while (*fmt != '\0') {
+       len = 1;
+       if (fmt[0] == '%' && fmt[1] == 's') {
+           s = va_arg(ap, char *);
            len = strlen(s);
-           memcpy(lbuf->buf + lbuf->len, s, len);
-           lbuf->len += len;
        }
+       /* Assume worst case that all chars must be escaped. */
+       if (lbuf->len + (len * 2) + 1 >= lbuf->size) {
+           do {
+               lbuf->size += 256;
+           } while (lbuf->len + len + 1 >= lbuf->size);
+           lbuf->buf = erealloc(lbuf->buf, lbuf->size);
+       }
+       if (*fmt == '%') {
+           if (*(++fmt) == 's') {
+               while ((cp = strpbrk(s, set)) != NULL) {
+                   len = (int)(cp - s);
+                   memcpy(lbuf->buf + lbuf->len, s, len);
+                   lbuf->len += len;
+                   lbuf->buf[lbuf->len++] = '\\';
+                   lbuf->buf[lbuf->len++] = *cp;
+                   s = cp + 1;
+               }
+               if (*s != '\0') {
+                   len = strlen(s);
+                   memcpy(lbuf->buf + lbuf->len, s, len);
+                   lbuf->len += len;
+               }
+               fmt++;
+               continue;
+           }
+       }
+       if (strchr(set, *fmt) != NULL)
+           lbuf->buf[lbuf->len++] = '\\';
+       lbuf->buf[lbuf->len++] = *fmt++;
     }
     lbuf->buf[lbuf->len] = '\0';
     va_end(ap);
 }
 
 /*
- * Append strings to the buffer, expanding it as needed.
+ * Parse the format and append strings, only %s and %% escapes are supported.
  */
 void
-lbuf_append(struct lbuf *lbuf, ...)
+lbuf_append(struct lbuf *lbuf, const char *fmt, ...)
 {
     va_list ap;
-    int len = 0;
-    char *s;
-
-    va_start(ap, lbuf);
-    while ((s = va_arg(ap, char *)) != NULL)
-       len += strlen(s);
-    va_end(ap);
-
-    /* Expand buffer as needed. */
-    if (lbuf->len + len >= lbuf->size) {
-       do {
-           lbuf->size += 256;
-       } while (lbuf->len + len >= lbuf->size);
-       lbuf->buf = erealloc(lbuf->buf, lbuf->size);
-    }
+    int len;
+    char *s = NULL;
 
-    va_start(ap, lbuf);
-    /* Append each string. */
-    while ((s = va_arg(ap, char *)) != NULL) {
-       len = strlen(s);
-       memcpy(lbuf->buf + lbuf->len, s, len);
-       lbuf->len += len;
+    va_start(ap, fmt);
+    while (*fmt != '\0') {
+       len = 1;
+       if (fmt[0] == '%' && fmt[1] == 's') {
+           s = va_arg(ap, char *);
+           len = strlen(s);
+       }
+       if (lbuf->len + len + 1 >= lbuf->size) {
+           do {
+               lbuf->size += 256;
+           } while (lbuf->len + len + 1 >= lbuf->size);
+           lbuf->buf = erealloc(lbuf->buf, lbuf->size);
+       }
+       if (*fmt == '%') {
+           if (*(++fmt) == 's') {
+               memcpy(lbuf->buf + lbuf->len, s, len);
+               lbuf->len += len;
+               fmt++;
+               continue;
+           }
+       }
+       lbuf->buf[lbuf->len++] = *fmt++;
     }
     lbuf->buf[lbuf->len] = '\0';
     va_end(ap);
diff --git a/common/setgroups.c b/common/setgroups.c
new file mode 100644 (file)
index 0000000..c469d20
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * 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>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif /* STDC_HEADERS */
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include <errno.h>
+#include <limits.h>
+
+#include "missing.h"
+
+int
+sudo_setgroups(int ngids, const GETGROUPS_T *gids)
+{
+    int maxgids, rval;
+
+    rval = setgroups(ngids, gids);
+    if (rval == -1 && errno == EINVAL) {
+       /* Too many groups, try again with fewer. */
+#if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX)
+       maxgids = (int)sysconf(_SC_NGROUPS_MAX);
+       if (maxgids == -1)
+#endif
+           maxgids = NGROUPS_MAX;
+       if (ngids > maxgids)
+           rval = setgroups(maxgids, gids);
+    }
+    return rval;
+}
index 79b7da412c083c41fae16e94b58687d85365b7aa..5d971c682d869c55db1d442e9bfd8df989a0d91a 100644 (file)
@@ -30,7 +30,7 @@ CC = @CC@
 LIBTOOL = @LIBTOOL@
 
 # C preprocessor flags
-CPPFLAGS = -I$(top_builddir) -I$(incdir) @CPPFLAGS@
+CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(top_srcdir) @CPPFLAGS@
 
 # Usually -O and/or -g
 CFLAGS = @CFLAGS@
@@ -42,6 +42,8 @@ DEFS = @OSDEFS@
 
 SHELL = @SHELL@
 
+TEST_PROGS = fnm_test globtest
+
 LIBOBJDIR = 
 
 LTLIBOBJS = @LTLIBOBJS@
@@ -53,73 +55,30 @@ Makefile: $(srcdir)/Makefile.in
 
 .SUFFIXES: .o .c .h .lo
 
+.c.o:
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $<
+
 .c.lo:
        $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $<
 
 libreplace.la: $(LTLIBOBJS)
        $(LIBTOOL) --mode=link $(CC) -o $@ $(LTLIBOBJS) -no-install
 
-./siglist.c: ./mksiglist
+siglist.c: mksiglist
        ./mksiglist > $@
 
-./mksiglist: $(srcdir)/mksiglist.c $(srcdir)/mksiglist.h $(incdir)/missing.h $(top_builddir)/config.h
+mksiglist: $(srcdir)/mksiglist.c $(srcdir)/mksiglist.h $(incdir)/missing.h $(top_builddir)/config.h
        $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mksiglist.c -o $@
 
-fnm_test.o: $(srcdir)/regress/fnmatch/fnm_test.c
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/fnmatch/fnm_test.c
-
 fnm_test: fnm_test.o libreplace.la
        $(LIBTOOL) --mode=link $(CC) -o $@ fnm_test.o libreplace.la
 
-globtest.o: $(srcdir)/regress/glob/globtest.c
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/glob/globtest.c
-
 globtest: globtest.o libreplace.la
        $(LIBTOOL) --mode=link $(CC) -o $@ globtest.o libreplace.la
 
 @DEV@$(srcdir)/mksiglist.h: $(srcdir)/siglist.in
 @DEV@  awk 'BEGIN {print "/* public domain */\n"} /^    [A-Z]/ {printf("#ifdef SIG%s\n    if (my_sys_siglist[SIG%s] == NULL)\n\tmy_sys_siglist[SIG%s] = \"%s\";\n#endif\n", $$1, $$1, $$1, substr($$0, 13))}' < $(srcdir)/siglist.in > $@
 
-# Dependencies
-closefrom.lo: $(srcdir)/closefrom.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/closefrom.c
-dlopen.lo: $(srcdir)/dlopen.c $(srcdir)/dlfcn.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/dlopen.c
-fnmatch.lo: $(srcdir)/fnmatch.c $(srcdir)/fnmatch.h $(srcdir)/charclass.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/fnmatch.c
-getcwd.lo: $(srcdir)/getcwd.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getcwd.c
-getline.lo: $(srcdir)/getline.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getline.c
-getprogname.lo: $(srcdir)/getprogname.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getprogname.c
-glob.lo: $(srcdir)/glob.c $(srcdir)/glob.h $(srcdir)/charclass.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/glob.c
-isblank.lo: $(srcdir)/isblank.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/isblank.c
-memrchr.lo: $(srcdir)/memrchr.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/memrchr.c
-mktemp.lo: $(srcdir)/mktemp.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mktemp.c
-nanosleep.lo: $(srcdir)/nanosleep.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/nanosleep.c
-siglist.lo: ./siglist.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) ./siglist.c
-snprintf.lo: $(srcdir)/snprintf.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/snprintf.c
-strcasecmp.lo: $(srcdir)/strcasecmp.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strcasecmp.c
-strerror.lo: $(srcdir)/strerror.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strerror.c
-strlcat.lo: $(srcdir)/strlcat.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strlcat.c
-strlcpy.lo: $(srcdir)/strlcpy.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strlcpy.c
-strsignal.lo: $(srcdir)/strsignal.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strsignal.c
-utimes.lo: $(srcdir)/utimes.c $(incdir)/missing.h $(srcdir)/utime.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/utimes.c
-
 pre-install:
 
 install:
@@ -136,7 +95,7 @@ install-plugin:
 
 uninstall:
 
-check: fnm_test globtest
+check: $(TEST_PROGS)
        @./fnm_test $(srcdir)/regress/fnmatch/fnm_test.in
        @mkdir -p `sed 's@/[^/]*$$@@' $(srcdir)/regress/glob/files | sort -u`
        @touch `cat $(srcdir)/regress/glob/files`
@@ -147,7 +106,7 @@ check: fnm_test globtest
        @rm -rf fake
 
 clean:
-       -$(LIBTOOL) --mode=clean rm -f mksiglist siglist.c *.lo *.o *.la *.a stamp-* core *.core core.*
+       -$(LIBTOOL) --mode=clean rm -f $(TEST_PROGS) mksiglist siglist.c *.lo *.o *.la *.a stamp-* core *.core core.*
 
 mostlyclean: clean
 
@@ -160,3 +119,62 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+closefrom.lo: $(srcdir)/closefrom.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/closefrom.c
+dlopen.lo: $(srcdir)/dlopen.c $(top_builddir)/config.h \
+           $(top_srcdir)/compat/dlfcn.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/dlopen.c
+fnm_test.o: $(srcdir)/regress/fnmatch/fnm_test.c $(top_builddir)/config.h \
+            $(top_srcdir)/compat/fnmatch.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/fnmatch/fnm_test.c
+fnmatch.lo: $(srcdir)/fnmatch.c $(top_builddir)/config.h $(incdir)/missing.h \
+            $(top_srcdir)/compat/charclass.h $(top_srcdir)/compat/fnmatch.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/fnmatch.c
+getcwd.lo: $(srcdir)/getcwd.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getcwd.c
+getgrouplist.lo: $(srcdir)/getgrouplist.c $(top_builddir)/config.h \
+                 $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getgrouplist.c
+getline.lo: $(srcdir)/getline.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getline.c
+getprogname.lo: $(srcdir)/getprogname.c $(top_builddir)/config.h \
+                $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getprogname.c
+glob.lo: $(srcdir)/glob.c $(top_builddir)/config.h $(incdir)/missing.h \
+         $(top_srcdir)/compat/glob.h $(top_srcdir)/compat/charclass.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/glob.c
+globtest.o: $(srcdir)/regress/glob/globtest.c $(top_builddir)/config.h \
+            $(top_srcdir)/compat/glob.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/glob/globtest.c
+isblank.lo: $(srcdir)/isblank.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/isblank.c
+memrchr.lo: $(srcdir)/memrchr.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/memrchr.c
+mksiglist.lo: $(srcdir)/mksiglist.c $(top_builddir)/config.h \
+              $(incdir)/missing.h $(top_srcdir)/compat/mksiglist.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mksiglist.c
+mktemp.lo: $(srcdir)/mktemp.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mktemp.c
+nanosleep.lo: $(srcdir)/nanosleep.c $(top_builddir)/config.h \
+              $(top_srcdir)/compat/timespec.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/nanosleep.c
+setenv.lo: $(srcdir)/setenv.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/setenv.c
+siglist.lo: siglist.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) siglist.c
+snprintf.lo: $(srcdir)/snprintf.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/snprintf.c
+strlcat.lo: $(srcdir)/strlcat.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strlcat.c
+strlcpy.lo: $(srcdir)/strlcpy.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strlcpy.c
+strsignal.lo: $(srcdir)/strsignal.c $(top_builddir)/config.h \
+              $(incdir)/missing.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/strsignal.c
+unsetenv.lo: $(srcdir)/unsetenv.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/unsetenv.c
+utimes.lo: $(srcdir)/utimes.c $(top_builddir)/config.h \
+           $(top_srcdir)/compat/utime.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/utimes.c
diff --git a/compat/getgrouplist.c b/compat/getgrouplist.c
new file mode 100644 (file)
index 0000000..2d22714
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif /* STDC_HEADERS */
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif /* HAVE_STRING_H */
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif /* HAVE_STRINGS_H */
+#include <grp.h>
+
+#include "missing.h"
+
+#ifdef HAVE_GETGRSET
+/*
+ * BSD-compatible getgrouplist(3) using getgrset(3)
+ */
+int
+getgrouplist(const char *name, gid_t basegid, gid_t *groups, int *ngroupsp)
+{
+    char *cp, *grset = NULL;
+    int i, ngroups = 1;
+    int grpsize = *ngroupsp;
+    int rval = -1;
+    gid_t gid;
+
+    /* We support BSD semantics where the first element is the base gid */
+    if (grpsize <= 0)
+       return -1;
+    groups[0] = basegid;
+
+#ifdef HAVE_SETAUTHDB
+    aix_setauthdb((char *) name);
+#endif
+    if ((grset = getgrset(name)) != NULL) {
+       for (cp = strtok(grset, ","); cp != NULL; cp = strtok(NULL, ",")) {
+           gid = atoi(cp);
+           if (gid != basegid) {
+               if (ngroups == grpsize)
+                   goto done;
+               groups[ngroups++] = gid;
+           }
+       }
+    }
+    rval = 0;
+
+done:
+    efree(grset);
+#ifdef HAVE_SETAUTHDB
+    aix_restoreauthdb();
+#endif
+    *ngroupsp = ngroups;
+
+    return rval;
+}
+
+#else /* HAVE_GETGRSET */
+
+/*
+ * BSD-compatible getgrouplist(3) using getgrent(3)
+ */
+int
+getgrouplist(const char *name, gid_t basegid, gid_t *groups, int *ngroupsp)
+{
+    int i, ngroups = 1;
+    int grpsize = *ngroupsp;
+    int rval = -1;
+    struct group *grp;
+
+    /* We support BSD semantics where the first element is the base gid */
+    if (grpsize <= 0)
+       return -1;
+    groups[0] = basegid;
+
+    setgrent();
+    while ((grp = getgrent()) != NULL) {
+       if (grp->gr_gid == basegid)
+           continue;
+
+       for (i = 0; grp->gr_mem[i] != NULL; i++) {
+           if (strcmp(name, grp->gr_mem[i]) == 0)
+               break;
+       }
+       if (grp->gr_mem[i] == NULL)
+           continue; /* user not found */
+
+       /* Only add if it is not the same as an existing gid */
+       for (i = 0; i < ngroups; i++) {
+           if (grp->gr_gid == groups[i])
+               break;
+       }
+       if (i == ngroups) {
+           if (ngroups == grpsize)
+               goto done;
+           groups[ngroups++] = grp->gr_gid;
+       }
+    }
+    rval = 0;
+
+done:
+    endgrent();
+    *ngroupsp = ngroups;
+
+    return rval;
+}
+#endif /* HAVE_GETGRSET */
index 1e5d79122b4354c8057ed6ac7074d0c0d50e7d6a..a13346c1012f102a5517ccdb5a23e4804122bc44 100644 (file)
@@ -23,6 +23,9 @@
 
 #include "missing.h"
 
+#define DEFAULT_TEXT_DOMAIN    "sudo"
+#include "gettext.h"
+
 #if defined(HAVE_DECL_SYS_SIGLIST) && HAVE_DECL_SYS_SIGLIST == 1
 # define my_sys_siglist        sys_siglist
 #elif defined(HAVE_DECL__SYS_SIGLIST) && HAVE_DECL__SYS_SIGLIST == 1
@@ -41,5 +44,5 @@ strsignal(int signo)
 {
     if (signo > 0 && signo < NSIG)
        return (char *)my_sys_siglist[signo];
-    return "Unknown signal";
+    return _("Unknown signal");
 }
index d53e309f4b981ea4a966e53a7133ca290cefd1f3..2852378467cace09473584342ae0246a5093a6fc 100644 (file)
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
 #   Free Software Foundation, Inc.
 
-timestamp='2009-11-19'
+timestamp='2010-08-21'
 
 # 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
@@ -56,8 +56,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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."
@@ -91,7 +92,7 @@ if test $# != 0; then
   exit 1
 fi
 
-trap 'exit 1' 1 2 15
+trap 'exit 1' HUP INT TERM
 
 # 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
@@ -105,7 +106,7 @@ trap 'exit 1' 1 2 15
 
 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 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
 : ${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) ; } ||
@@ -333,6 +334,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     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"
@@ -548,7 +552,7 @@ EOF
                echo rs6000-ibm-aix3.2
        fi
        exit ;;
-    *:AIX:*:[456])
+    *: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
@@ -964,6 +968,9 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
+    tile*:Linux:*:*)
+       echo ${UNAME_MACHINE}-tilera-linux-gnu
+       exit ;;
     vax:Linux:*:*)
        echo ${UNAME_MACHINE}-dec-linux-gnu
        exit ;;
index 0f7384dd3b11330cc5dc1d777dbb9e8b7f8110d0..a0c7045975eb8a0b1deea21a8e389b6c67b8bd2c 100644 (file)
@@ -91,9 +91,6 @@
    don't. */
 #undef HAVE_DECL___SYS_SIGLIST
 
-/* Define to 1 if you have the `dgettext' function. */
-#undef HAVE_DGETTEXT
-
 /* 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 `getdomainname' function. */
 #undef HAVE_GETDOMAINNAME
 
-/* Define to 1 if you have the `getgroups' function. */
+/* Define to 1 if you have the `getgrouplist' function. */
+#undef HAVE_GETGROUPLIST
+
+/* Define to 1 if your system has a working `getgroups' function. */
 #undef HAVE_GETGROUPS
 
+/* Define to 1 if you have the `getgrset' function. */
+#undef HAVE_GETGRSET
+
 /* Define to 1 if you have the `getifaddrs' function. */
 #undef HAVE_GETIFADDRS
 
 /* Define to 1 if <netinet/in.h> contains struct in6_addr. */
 #undef HAVE_IN6_ADDR
 
-/* Define to 1 if you have the `initgroups' function. */
-#undef HAVE_INITGROUPS
-
 /* Define to 1 if you have the `initprivs' function. */
 #undef HAVE_INITPRIVS
 
 /* Define to 1 if you have the `ldap_unbind_ext_s' function. */
 #undef HAVE_LDAP_UNBIND_EXT_S
 
+/* Define to 1 if you have the <libintl.h> header file. */
+#undef HAVE_LIBINTL_H
+
 /* Define to 1 to enable Linux audit support. */
 #undef HAVE_LINUX_AUDIT
 
 #undef ISSET
 #define ISSET(t, f)     ((t) & (f))
 
-/* New ANSI-style OS defs for HP-UX and ConvexOS. */
+/* ANSI-style OS defs for HP-UX and ConvexOS. */
 #if defined(hpux) && !defined(__hpux)
 # define __hpux                1
 #endif /* hpux */
index acb095a26b3b23266656cb8719d004e29c4b14ea..43e9be3fe2a23a946743e8c8687ad51ad458ba7e 100755 (executable)
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
 #   Free Software Foundation, Inc.
 
-timestamp='2009-11-07'
+timestamp='2010-09-11'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -75,8 +75,9 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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."
@@ -123,8 +124,9 @@ esac
 # 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-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
@@ -281,6 +283,7 @@ case $basic_machine in
        | moxie \
        | mt \
        | msp430 \
+       | nds32 | nds32le | nds32be \
        | nios | nios2 \
        | ns16k | ns32k \
        | or32 \
@@ -294,7 +297,7 @@ case $basic_machine in
        | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
        | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
        | spu | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
+       | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
        | ubicom32 \
        | v850 | v850e \
        | we32k \
@@ -302,6 +305,15 @@ case $basic_machine in
        | z8k | z80)
                basic_machine=$basic_machine-unknown
                ;;
+       c54x)
+               basic_machine=tic54x-unknown
+               ;;
+       c55x)
+               basic_machine=tic55x-unknown
+               ;;
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
        m6811 | m68hc11 | m6812 | m68hc12 | picochip)
                # Motorola 68HC11/12.
                basic_machine=$basic_machine-unknown
@@ -333,7 +345,7 @@ case $basic_machine in
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
        | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
        | elxsi-* \
@@ -367,6 +379,7 @@ case $basic_machine in
        | mmix-* \
        | mt-* \
        | msp430-* \
+       | nds32-* | nds32le-* | nds32be-* \
        | nios-* | nios2-* \
        | none-* | np1-* | ns16k-* | ns32k-* \
        | orion-* \
@@ -380,7 +393,8 @@ case $basic_machine in
        | sparclite-* \
        | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
        | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile-* | tilegx-* \
        | tron-* \
        | ubicom32-* \
        | v850-* | v850e-* | vax-* \
@@ -480,6 +494,15 @@ case $basic_machine in
                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
@@ -843,6 +866,12 @@ case $basic_machine in
        np1)
                basic_machine=np1-gould
                ;;
+        neo-tandem)
+               basic_machine=neo-tandem
+               ;;
+        nse-tandem)
+               basic_machine=nse-tandem
+               ;;
        nsr-tandem)
                basic_machine=nsr-tandem
                ;;
@@ -1077,17 +1106,10 @@ case $basic_machine in
                basic_machine=t90-cray
                os=-unicos
                ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
+        # This must be matched before tile*.
+        tilegx*)
+               basic_machine=tilegx-unknown
+               os=-linux-gnu
                ;;
        tile*)
                basic_machine=tile-unknown
@@ -1260,6 +1282,9 @@ 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|'`
                ;;
@@ -1281,8 +1306,8 @@ case $os in
        # -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* | -solaris* | -sym* \
-             | -kopensolaris* \
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
              | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1295,7 +1320,8 @@ case $os in
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
              | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -mingw32* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1436,6 +1462,8 @@ case $os in
        -dicos*)
                os=-dicos
                ;;
+        -nacl*)
+               ;;
        -none)
                ;;
        *)
@@ -1476,6 +1504,15 @@ case $basic_machine in
         c4x-* | tic4x-*)
                os=-coff
                ;;
+       tic54x-*)
+               os=-coff
+               ;;
+       tic55x-*)
+               os=-coff
+               ;;
+       tic6x-*)
+               os=-coff
+               ;;
        # This must come before the *-dec entry.
        pdp10-*)
                os=-tops20
index cad0d5c70ee6c127a071d8a281e168652939850e..aa7b4c8b3807240c50f938e4a79fbc5f84c38464 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,13 +1,13 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for sudo 1.8.1p2.
+# Generated by GNU Autoconf 2.68 for sudo 1.8.2.
 #
 # Report bugs to <http://www.sudo.ws/bugs/>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -91,6 +91,7 @@ fi
 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
@@ -224,11 +225,18 @@ IFS=$as_save_IFS
   # 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
        export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+       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+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -327,7 +335,7 @@ $as_echo X"$as_dir" |
       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"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -367,19 +375,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# 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.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  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: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -543,7 +551,7 @@ test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# 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`
 
@@ -562,8 +570,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='sudo'
 PACKAGE_TARNAME='sudo'
-PACKAGE_VERSION='1.8.1p2'
-PACKAGE_STRING='sudo 1.8.1p2'
+PACKAGE_VERSION='1.8.2'
+PACKAGE_STRING='sudo 1.8.2'
 PACKAGE_BUGREPORT='http://www.sudo.ws/bugs/'
 PACKAGE_URL=''
 
@@ -618,8 +626,11 @@ OTOOL
 LIPO
 NMEDIT
 DSYMUTIL
+MANIFEST_TOOL
 AWK
 STRIP
+ac_ct_AR
+DLLTOOL
 OBJDUMP
 LN_S
 NM
@@ -680,6 +691,8 @@ password_timeout
 timeout
 timedir
 iolog_dir
+SUDO_NLS
+LIBINTL
 LT_STATIC
 LIBDL
 CONFIGURE_ARGS
@@ -862,6 +875,7 @@ enable_zlib
 enable_env_reset
 enable_warnings
 enable_admin_flag
+enable_nls
 with_selinux
 enable_gss_krb5_ccache_name
 enable_shared
@@ -869,6 +883,7 @@ enable_static
 with_pic
 enable_fast_install
 with_gnu_ld
+with_sysroot
 enable_libtool_lock
 with_noexec
 with_netsvc
@@ -950,8 +965,9 @@ do
   fi
 
   case $ac_option in
-  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)   ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -996,7 +1012,7 @@ do
     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"
+      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
@@ -1022,7 +1038,7 @@ do
     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"
+      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
@@ -1226,7 +1242,7 @@ do
     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"
+      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
@@ -1242,7 +1258,7 @@ do
     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"
+      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
@@ -1272,8 +1288,8 @@ do
   | --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."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1281,7 +1297,7 @@ Try \`$0 --help' for more information."
     # 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'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1291,7 +1307,7 @@ Try \`$0 --help' for more information."
     $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}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1299,13 +1315,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  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" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1328,7 +1344,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  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'
@@ -1342,8 +1358,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1358,9 +1374,9 @@ 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"
+  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"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1399,11 +1415,11 @@ else
 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"
+  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"
+       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
@@ -1429,7 +1445,7 @@ 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 sudo 1.8.1p2 to adapt to many kinds of systems.
+\`configure' configures sudo 1.8.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1443,7 +1459,7 @@ Configuration:
       --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
+  -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
@@ -1494,7 +1510,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of sudo 1.8.1p2:";;
+     short | recursive ) echo "Configuration of sudo 1.8.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1519,6 +1535,7 @@ Optional Features:
   --enable-env-reset      Whether to enable environment resetting by default.
   --enable-warnings       Whether to enable compiler warnings
   --enable-admin-flag     Whether to create a Ubuntu-style admin flag file
+  --disable-nls           Disable natural language support using gettext
   --enable-gss-krb5-ccache-name
                           Use GSS-API to set the Kerberos V cred cache name
   --enable-shared[=PKGS]  build shared libraries [default=yes]
@@ -1621,6 +1638,8 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --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-noexec=PATH      fully qualified pathname of sudo_noexec.so
   --with-netsvc[=PATH]    path to netsvc.conf
   --with-pam-login        enable specific PAM session for sudo -i
@@ -1634,8 +1653,9 @@ Some influential environment variables:
   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 C Compiler' implementation to use. Defaults to
-              the first program found out of: `bison -y', `byacc', `yacc'.
+  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.
@@ -1706,10 +1726,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-sudo configure 1.8.1p2
-generated by GNU Autoconf 2.65
+sudo configure 1.8.2
+generated by GNU Autoconf 2.68
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1753,7 +1773,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1799,7 +1819,7 @@ fi
   # 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1825,7 +1845,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then :
@@ -1836,7 +1856,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1850,7 +1870,7 @@ 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1868,7 +1888,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1909,7 +1929,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1922,7 +1942,7 @@ 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1977,7 +1997,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -1989,10 +2009,10 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2028,7 +2048,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+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; }
 
@@ -2051,17 +2071,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $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;}
-( cat <<\_ASBOX
-## --------------------------------------- ##
+( $as_echo "## --------------------------------------- ##
 ## Report this to http://www.sudo.ws/bugs/ ##
-## --------------------------------------- ##
-_ASBOX
+## --------------------------------------- ##"
      ) | 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2070,7 +2088,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -2083,7 +2101,7 @@ 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -2124,7 +2142,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -2301,7 +2319,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 rm -f conftest.val
 
   fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_compute_int
@@ -2315,7 +2333,7 @@ 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 { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$4+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2359,19 +2377,22 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
 
-# ac_fn_c_check_decl LINENO SYMBOL VAR
-# ------------------------------------
-# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+# 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_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5
-$as_echo_n "checking whether $2 is declared... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  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
@@ -2380,8 +2401,12 @@ $4
 int
 main ()
 {
-#ifndef $2
-  (void) $2;
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
 #endif
 
   ;
@@ -2398,15 +2423,15 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  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 sudo $as_me 1.8.1p2, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+It was created by sudo $as_me 1.8.2, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2516,11 +2541,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2554,11 +2577,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2571,11 +2592,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2589,11 +2608,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2648,7 +2665,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # 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
@@ -2663,7 +2685,11 @@ do
     { $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"
+    . "$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
 
@@ -2739,7 +2765,7 @@ if $ac_cache_corrupted; then
 $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
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2838,6 +2864,8 @@ $as_echo "$as_me: Configuring Sudo version $PACKAGE_VERSION" >&6;}
 
 
 
+
+
 
 
 
@@ -2896,6 +2924,7 @@ LDAP="#"
 BAMAN=0
 LCMAN=0
 SEMAN=0
+LIBINTL=
 ZLIB=
 ZLIB_SRC=
 AUTH_OBJS=
@@ -2903,6 +2932,7 @@ AUTH_REG=
 AUTH_EXCL=
 AUTH_EXCL_DEF=
 AUTH_DEF=passwd
+SUDO_NLS=disabled
 
 CHECKSHADOW=true
 shadow_defs=
@@ -2961,9 +2991,9 @@ fi
 # Check whether --with-CC was given.
 if test "${with_CC+set}" = set; then :
   withval=$with_CC; case $with_CC in
-    yes)       as_fn_error "\"must give --with-CC an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-CC an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"illegal argument: --without-CC.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"illegal argument: --without-CC.\"" "$LINENO" 5
                ;;
     *)         CC=$with_CC
                ;;
@@ -2976,7 +3006,7 @@ fi
 if test "${with_rpath+set}" = set; then :
   withval=$with_rpath; case $with_rpath in
     yes|no)    ;;
-    *)         as_fn_error "\"--with-rpath does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-rpath does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -3004,7 +3034,7 @@ if test "${with_bsm_audit+set}" = set; then :
                SUDOERS_OBJS="${SUDOERS_OBJS} bsm_audit.lo"
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-bsm-audit does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-bsm-audit does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -3020,7 +3050,7 @@ if test -n "$ac_tool_prefix"; then
 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 test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3060,7 +3090,7 @@ if test -z "$ac_cv_prog_CC"; then
 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3113,7 +3143,7 @@ if test -z "$CC"; then
 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 test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3153,7 +3183,7 @@ if test -z "$CC"; then
 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 test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3212,7 +3242,7 @@ if test -z "$CC"; then
 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 test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3256,7 +3286,7 @@ do
 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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3310,8 +3340,8 @@ 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; }
+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
@@ -3425,9 +3455,8 @@ 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_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+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; }
@@ -3469,8 +3498,8 @@ 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; }
+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
@@ -3527,9 +3556,9 @@ $as_echo "$ac_try_echo"; } >&5
     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.
+as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3540,7 +3569,7 @@ 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 test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3580,8 +3609,8 @@ 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; }
+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
@@ -3591,7 +3620,7 @@ 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 test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3628,7 +3657,7 @@ 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 test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3706,7 +3735,7 @@ else
 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 test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3827,13 +3856,13 @@ if ac_fn_c_try_compile "$LINENO"; then :
 
 else
 
-                   as_fn_error "unable to find AUDIT_USER_CMD in libaudit.h for --with-linux-audit" "$LINENO" 5
+                   as_fn_error $? "unable to find AUDIT_USER_CMD in libaudit.h for --with-linux-audit" "$LINENO" 5
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-linux-audit does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-linux-audit does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -3843,9 +3872,9 @@ fi
 # Check whether --with-incpath was given.
 if test "${with_incpath+set}" = set; then :
   withval=$with_incpath; case $with_incpath in
-    yes)       as_fn_error "\"must give --with-incpath an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-incpath an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-incpath not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-incpath not supported.\"" "$LINENO" 5
                ;;
     *)         { $as_echo "$as_me:${as_lineno-$LINENO}: Adding ${with_incpath} to CPPFLAGS" >&5
 $as_echo "$as_me: Adding ${with_incpath} to CPPFLAGS" >&6;}
@@ -3861,9 +3890,9 @@ fi
 # Check whether --with-libpath was given.
 if test "${with_libpath+set}" = set; then :
   withval=$with_libpath; case $with_libpath in
-    yes)       as_fn_error "\"must give --with-libpath an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-libpath an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-libpath not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-libpath not supported.\"" "$LINENO" 5
                ;;
     *)         { $as_echo "$as_me:${as_lineno-$LINENO}: Adding ${with_libpath} to LDFLAGS" >&5
 $as_echo "$as_me: Adding ${with_libpath} to LDFLAGS" >&6;}
@@ -3876,9 +3905,9 @@ fi
 # Check whether --with-libraries was given.
 if test "${with_libraries+set}" = set; then :
   withval=$with_libraries; case $with_libraries in
-    yes)       as_fn_error "\"must give --with-libraries an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-libraries an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-libraries not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-libraries not supported.\"" "$LINENO" 5
                ;;
     *)         { $as_echo "$as_me:${as_lineno-$LINENO}: Adding ${with_libraries} to LIBS" >&5
 $as_echo "$as_me: Adding ${with_libraries} to LIBS" >&6;}
@@ -3940,7 +3969,7 @@ $as_echo "$with_passwd" >&6; }
                AUTH_DEF=""
                test "$with_passwd" = "yes" && AUTH_REG="$AUTH_REG passwd"
                ;;
-    *)         as_fn_error "\"Sorry, --with-passwd does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"Sorry, --with-passwd does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -3994,7 +4023,7 @@ $as_echo "yes" >&6; }
                ;;
     no)                long_otp_prompt=off
                ;;
-    *)         as_fn_error "\"--with-long-otp-prompt does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-long-otp-prompt does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4070,7 +4099,7 @@ if test "${with_aixauth+set}" = set; then :
   withval=$with_aixauth; case $with_aixauth in
     yes)       AUTH_EXCL="$AUTH_EXCL AIX_AUTH";;
     no)                ;;
-    *)         as_fn_error "\"--with-aixauth does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-aixauth does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4082,7 +4111,7 @@ if test "${with_pam+set}" = set; then :
   withval=$with_pam; case $with_pam in
     yes)       AUTH_EXCL="$AUTH_EXCL PAM";;
     no)                ;;
-    *)         as_fn_error "\"--with-pam does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-pam does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4101,7 +4130,7 @@ $as_echo "yes" >&6; }
                AUTH_REG="$AUTH_REG AFS"
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-AFS does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-AFS does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4120,7 +4149,7 @@ $as_echo "yes" >&6; }
                AUTH_REG="$AUTH_REG DCE"
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-DCE does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-DCE does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4131,7 +4160,7 @@ fi
 if test "${with_logincap+set}" = set; then :
   withval=$with_logincap; case $with_logincap in
     yes|no)    ;;
-    *)         as_fn_error "\"--with-logincap does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-logincap does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4143,7 +4172,7 @@ if test "${with_bsdauth+set}" = set; then :
   withval=$with_bsdauth; case $with_bsdauth in
     yes)       AUTH_EXCL="$AUTH_EXCL BSD_AUTH";;
     no)                ;;
-    *)         as_fn_error "\"--with-bsdauth does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-bsdauth does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4155,7 +4184,7 @@ if test "${with_project+set}" = set; then :
   withval=$with_project; case $with_project in
     yes|no)    ;;
     no)        ;;
-    *)         as_fn_error "\"--with-project does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-project does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4171,7 +4200,7 @@ if test "${with_lecture+set}" = set; then :
                ;;
     no|none|never)     lecture=never
                ;;
-    *)         as_fn_error "\"unknown argument to --with-lecture: $with_lecture\"" "$LINENO" 5
+    *)         as_fn_error $? "\"unknown argument to --with-lecture: $with_lecture\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4192,9 +4221,9 @@ $as_echo_n "checking whether sudo should log via syslog or to a file by default.
 # Check whether --with-logging was given.
 if test "${with_logging+set}" = set; then :
   withval=$with_logging; case $with_logging in
-    yes)       as_fn_error "\"must give --with-logging an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-logging an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-logging not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-logging not supported.\"" "$LINENO" 5
                ;;
     syslog)    $as_echo "#define LOGGING SLOG_SYSLOG" >>confdefs.h
 
@@ -4211,7 +4240,7 @@ $as_echo "file" >&6; }
                { $as_echo "$as_me:${as_lineno-$LINENO}: result: both" >&5
 $as_echo "both" >&6; }
                ;;
-    *)         as_fn_error "\"unknown argument to --with-logging: $with_logging\"" "$LINENO" 5
+    *)         as_fn_error $? "\"unknown argument to --with-logging: $with_logging\"" "$LINENO" 5
                ;;
 esac
 else
@@ -4225,13 +4254,13 @@ fi
 # Check whether --with-logfac was given.
 if test "${with_logfac+set}" = set; then :
   withval=$with_logfac; case $with_logfac in
-    yes)       as_fn_error "\"must give --with-logfac an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-logfac an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-logfac not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-logfac not supported.\"" "$LINENO" 5
                ;;
     authpriv|auth|daemon|user|local0|local1|local2|local3|local4|local5|local6|local7)         logfac=$with_logfac
                ;;
-    *)         as_fn_error "\"$with_logfac is not a supported syslog facility.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"$with_logfac is not a supported syslog facility.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4243,14 +4272,14 @@ $as_echo_n "checking at which syslog priority to log commands... " >&6; }
 # Check whether --with-goodpri was given.
 if test "${with_goodpri+set}" = set; then :
   withval=$with_goodpri; case $with_goodpri in
-    yes)       as_fn_error "\"must give --with-goodpri an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-goodpri an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-goodpri not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-goodpri not supported.\"" "$LINENO" 5
                ;;
     alert|crit|debug|emerg|err|info|notice|warning)
                goodpri=$with_goodpri
                ;;
-    *)         as_fn_error "\"$with_goodpri is not a supported syslog priority.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"$with_goodpri is not a supported syslog priority.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4269,14 +4298,14 @@ $as_echo_n "checking at which syslog priority to log failures... " >&6; }
 # Check whether --with-badpri was given.
 if test "${with_badpri+set}" = set; then :
   withval=$with_badpri; case $with_badpri in
-    yes)       as_fn_error "\"must give --with-badpri an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-badpri an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-badpri not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-badpri not supported.\"" "$LINENO" 5
                ;;
     alert|crit|debug|emerg|err|info|notice|warning)
                badpri=$with_badpri
                ;;
-    *)         as_fn_error "$with_badpri is not a supported syslog priority." "$LINENO" 5
+    *)         as_fn_error $? "$with_badpri is not a supported syslog priority." "$LINENO" 5
                ;;
 esac
 fi
@@ -4293,9 +4322,9 @@ $as_echo "$badpri" >&6; }
 # Check whether --with-logpath was given.
 if test "${with_logpath+set}" = set; then :
   withval=$with_logpath; case $with_logpath in
-    yes)       as_fn_error "\"must give --with-logpath an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-logpath an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-logpath not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-logpath not supported.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4307,13 +4336,13 @@ $as_echo_n "checking how long a line in the log file should be... " >&6; }
 # Check whether --with-loglen was given.
 if test "${with_loglen+set}" = set; then :
   withval=$with_loglen; case $with_loglen in
-    yes)       as_fn_error "\"must give --with-loglen an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-loglen an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-loglen not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-loglen not supported.\"" "$LINENO" 5
                ;;
     [0-9]*)    loglen=$with_loglen
                ;;
-    *)         as_fn_error "\"you must enter a number, not $with_loglen\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must enter a number, not $with_loglen\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4336,7 +4365,7 @@ if test "${with_ignore_dot+set}" = set; then :
                ;;
     no)                ignore_dot=off
                ;;
-    *)         as_fn_error "\"--with-ignore-dot does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-ignore-dot does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4361,7 +4390,7 @@ if test "${with_mail_if_no_user+set}" = set; then :
                ;;
     no)                mail_no_user=off
                ;;
-    *)         as_fn_error "\"--with-mail-if-no-user does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-mail-if-no-user does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4386,7 +4415,7 @@ if test "${with_mail_if_no_host+set}" = set; then :
                ;;
     no)                mail_no_host=off
                ;;
-    *)         as_fn_error "\"--with-mail-if-no-host does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-mail-if-no-host does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4411,7 +4440,7 @@ if test "${with_mail_if_noperms+set}" = set; then :
                ;;
     no)                mail_noperms=off
                ;;
-    *)         as_fn_error "\"--with-mail-if-noperms does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-mail-if-noperms does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4432,9 +4461,9 @@ $as_echo_n "checking who should get the mail that sudo sends... " >&6; }
 # Check whether --with-mailto was given.
 if test "${with_mailto+set}" = set; then :
   withval=$with_mailto; case $with_mailto in
-    yes)       as_fn_error "\"must give --with-mailto an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-mailto an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-mailto not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-mailto not supported.\"" "$LINENO" 5
                ;;
     *)         mailto=$with_mailto
                ;;
@@ -4453,7 +4482,7 @@ $as_echo "$mailto" >&6; }
 # Check whether --with-mailsubject was given.
 if test "${with_mailsubject+set}" = set; then :
   withval=$with_mailsubject; case $with_mailsubject in
-    yes)       as_fn_error "\"must give --with-mailsubject an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-mailsubject an argument.\"" "$LINENO" 5
                ;;
     no)                { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, --without-mailsubject not supported." >&5
 $as_echo "$as_me: WARNING: Sorry, --without-mailsubject not supported." >&2;}
@@ -4479,7 +4508,7 @@ $as_echo_n "checking for bad password prompt... " >&6; }
 # Check whether --with-passprompt was given.
 if test "${with_passprompt+set}" = set; then :
   withval=$with_passprompt; case $with_passprompt in
-    yes)       as_fn_error "\"must give --with-passprompt an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-passprompt an argument.\"" "$LINENO" 5
                ;;
     no)                { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, --without-passprompt not supported." >&5
 $as_echo "$as_me: WARNING: Sorry, --without-passprompt not supported." >&2;}
@@ -4502,7 +4531,7 @@ $as_echo_n "checking for bad password message... " >&6; }
 # Check whether --with-badpass-message was given.
 if test "${with_badpass_message+set}" = set; then :
   withval=$with_badpass_message; case $with_badpass_message in
-    yes)       as_fn_error "\"Must give --with-badpass-message an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"Must give --with-badpass-message an argument.\"" "$LINENO" 5
                ;;
     no)                { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, --without-badpass-message not supported." >&5
 $as_echo "$as_me: WARNING: Sorry, --without-badpass-message not supported." >&2;}
@@ -4530,7 +4559,7 @@ if test "${with_fqdn+set}" = set; then :
                ;;
     no)                fqdn=off
                ;;
-    *)         as_fn_error "\"--with-fqdn does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-fqdn does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4549,9 +4578,9 @@ fi
 # Check whether --with-timedir was given.
 if test "${with_timedir+set}" = set; then :
   withval=$with_timedir; case $with_timedir in
-    yes)       as_fn_error "\"must give --with-timedir an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-timedir an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-timedir not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-timedir not supported.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4562,7 +4591,7 @@ fi
 if test "${with_iologdir+set}" = set; then :
   withval=$with_iologdir; case $with_iologdir in
     yes)    ;;
-    no)     as_fn_error "\"--without-iologdir not supported.\"" "$LINENO" 5
+    no)     as_fn_error $? "\"--without-iologdir not supported.\"" "$LINENO" 5
            ;;
 esac
 fi
@@ -4588,15 +4617,15 @@ fi
 # Check whether --with-sudoers-mode was given.
 if test "${with_sudoers_mode+set}" = set; then :
   withval=$with_sudoers_mode; case $with_sudoers_mode in
-    yes)       as_fn_error "\"must give --with-sudoers-mode an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-sudoers-mode an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-sudoers-mode not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-sudoers-mode not supported.\"" "$LINENO" 5
                ;;
     [1-9]*)    SUDOERS_MODE=0${with_sudoers_mode}
                ;;
     0*)                SUDOERS_MODE=$with_sudoers_mode
                ;;
-    *)         as_fn_error "\"you must use an octal mode, not a name.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must use an octal mode, not a name.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4606,13 +4635,13 @@ fi
 # Check whether --with-sudoers-uid was given.
 if test "${with_sudoers_uid+set}" = set; then :
   withval=$with_sudoers_uid; case $with_sudoers_uid in
-    yes)       as_fn_error "\"must give --with-sudoers-uid an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-sudoers-uid an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-sudoers-uid not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-sudoers-uid not supported.\"" "$LINENO" 5
                ;;
     [0-9]*)    SUDOERS_UID=$with_sudoers_uid
                ;;
-    *)         as_fn_error "\"you must use an unsigned numeric uid, not a name.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must use an unsigned numeric uid, not a name.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4622,13 +4651,13 @@ fi
 # Check whether --with-sudoers-gid was given.
 if test "${with_sudoers_gid+set}" = set; then :
   withval=$with_sudoers_gid; case $with_sudoers_gid in
-    yes)       as_fn_error "\"must give --with-sudoers-gid an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-sudoers-gid an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-sudoers-gid not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-sudoers-gid not supported.\"" "$LINENO" 5
                ;;
     [0-9]*)    SUDOERS_GID=$with_sudoers_gid
                ;;
-    *)         as_fn_error "\"you must use an unsigned numeric gid, not a name.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must use an unsigned numeric gid, not a name.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4640,13 +4669,13 @@ $as_echo_n "checking for umask programs should be run with... " >&6; }
 # Check whether --with-umask was given.
 if test "${with_umask+set}" = set; then :
   withval=$with_umask; case $with_umask in
-    yes)       as_fn_error "\"must give --with-umask an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-umask an argument.\"" "$LINENO" 5
                ;;
     no)                sudo_umask=0777
                ;;
     [0-9]*)    sudo_umask=$with_umask
                ;;
-    *)         as_fn_error "\"you must enter a numeric mask.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must enter a numeric mask.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4674,7 +4703,7 @@ if test "${with_umask_override+set}" = set; then :
                ;;
     no)                umask_override=off
                ;;
-    *)         as_fn_error "\"--with-umask-override does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-umask-override does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4686,9 +4715,9 @@ $as_echo_n "checking for default user to run commands as... " >&6; }
 # Check whether --with-runas-default was given.
 if test "${with_runas_default+set}" = set; then :
   withval=$with_runas_default; case $with_runas_default in
-    yes)       as_fn_error "\"must give --with-runas-default an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-runas-default an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-runas-default not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-runas-default not supported.\"" "$LINENO" 5
                ;;
     *)         runas_default="$with_runas_default"
                ;;
@@ -4707,9 +4736,9 @@ $as_echo "$runas_default" >&6; }
 # Check whether --with-exempt was given.
 if test "${with_exempt+set}" = set; then :
   withval=$with_exempt; case $with_exempt in
-    yes)       as_fn_error "\"must give --with-exempt an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-exempt an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-exempt not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-exempt not supported.\"" "$LINENO" 5
                ;;
     *)
 cat >>confdefs.h <<_ACEOF
@@ -4731,9 +4760,9 @@ $as_echo_n "checking for editor that visudo should use... " >&6; }
 # Check whether --with-editor was given.
 if test "${with_editor+set}" = set; then :
   withval=$with_editor; case $with_editor in
-    yes)       as_fn_error "\"must give --with-editor an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"must give --with-editor an argument.\"" "$LINENO" 5
                ;;
-    no)                as_fn_error "\"--without-editor not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-editor not supported.\"" "$LINENO" 5
                ;;
     *)
 cat >>confdefs.h <<_ACEOF
@@ -4762,7 +4791,7 @@ if test "${with_env_editor+set}" = set; then :
                ;;
     no)                env_editor=off
                ;;
-    *)         as_fn_error "\"--with-env-editor does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-env-editor does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4784,11 +4813,11 @@ $as_echo_n "checking number of tries a user gets to enter their password... " >&
 if test "${with_passwd_tries+set}" = set; then :
   withval=$with_passwd_tries; case $with_passwd_tries in
     yes)       ;;
-    no)                as_fn_error "\"--without-editor not supported.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"--without-editor not supported.\"" "$LINENO" 5
                ;;
     [1-9]*)    passwd_tries=$with_passwd_tries
                ;;
-    *)         as_fn_error "\"you must enter the numer of tries, > 0\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must enter the numer of tries, > 0\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4812,7 +4841,7 @@ if test "${with_timeout+set}" = set; then :
                ;;
     [0-9]*)    timeout=$with_timeout
                ;;
-    *)         as_fn_error "\"you must enter the numer of minutes.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must enter the numer of minutes.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4836,7 +4865,7 @@ if test "${with_password_timeout+set}" = set; then :
                ;;
     [0-9]*)    password_timeout=$with_password_timeout
                ;;
-    *)         as_fn_error "\"you must enter the numer of minutes.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"you must enter the numer of minutes.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4859,7 +4888,7 @@ if test "${with_tty_tickets+set}" = set; then :
                ;;
     no)                tty_tickets=off
                ;;
-    *)         as_fn_error "\"--with-tty-tickets does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-tty-tickets does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4890,7 +4919,7 @@ if test "${with_insults+set}" = set; then :
                ;;
     no)                insults=off
                ;;
-    *)         as_fn_error "\"--with-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4915,7 +4944,7 @@ if test "${with_all_insults+set}" = set; then :
                with_goons_insults=yes
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-all-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-all-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4929,7 +4958,7 @@ if test "${with_classic_insults+set}" = set; then :
 
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-classic-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-classic-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4943,7 +4972,7 @@ if test "${with_csops_insults+set}" = set; then :
 
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-csops-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-csops-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4957,7 +4986,7 @@ if test "${with_hal_insults+set}" = set; then :
 
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-hal-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-hal-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -4971,7 +5000,7 @@ if test "${with_goons_insults+set}" = set; then :
 
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-goons-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-goons-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -5037,7 +5066,7 @@ if test "${with_pc_insults+set}" = set; then :
 
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-pc-insults does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-pc-insults does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -5102,7 +5131,7 @@ $as_echo "yes" >&6; }
                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
                ;;
-    *)         as_fn_error "\"--with-interfaces does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-interfaces does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 else
@@ -5125,7 +5154,7 @@ $as_echo "yes" >&6; }
     no)                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
                ;;
-    *)         as_fn_error "\"--with-stow does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-stow does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 else
@@ -5140,7 +5169,7 @@ $as_echo_n "checking whether to use an askpass helper... " >&6; }
 # Check whether --with-askpass was given.
 if test "${with_askpass+set}" = set; then :
   withval=$with_askpass; case $with_askpass in
-    yes)       as_fn_error "\"--with-askpass takes a path as an argument.\"" "$LINENO" 5
+    yes)       as_fn_error $? "\"--with-askpass takes a path as an argument.\"" "$LINENO" 5
                ;;
     no)                ;;
     *)         cat >>confdefs.h <<EOF
@@ -5159,7 +5188,7 @@ fi
 # Check whether --with-plugindir was given.
 if test "${with_plugindir+set}" = set; then :
   withval=$with_plugindir; case $with_plugindir in
-    no)                as_fn_error "\"illegal argument: --without-plugindir.\"" "$LINENO" 5
+    no)                as_fn_error $? "\"illegal argument: --without-plugindir.\"" "$LINENO" 5
                ;;
     *)         ;;
 esac
@@ -5282,7 +5311,7 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                root_sudo=off
                ;;
-    *)         as_fn_error "\"--enable-root-sudo does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--enable-root-sudo does not take an argument.\"" "$LINENO" 5
                ;;
   esac
 
@@ -5426,6 +5455,8 @@ fi
 # Check whether --enable-zlib was given.
 if test "${enable_zlib+set}" = set; then :
   enableval=$enable_zlib;
+else
+  enable_zlib=yes
 fi
 
 
@@ -5489,6 +5520,14 @@ $as_echo "$as_me: WARNING: Ignoring unknown argument to --enable-admin-flag: $en
 fi
 
 
+# Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+  enableval=$enable_nls;
+else
+  enable_nls=yes
+fi
+
+
 
 # Check whether --with-selinux was given.
 if test "${with_selinux+set}" = set; then :
@@ -5502,7 +5541,7 @@ if test "${with_selinux+set}" = set; then :
                SEMAN=1
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setkeycreatecon in -lselinux" >&5
 $as_echo_n "checking for setkeycreatecon in -lselinux... " >&6; }
-if test "${ac_cv_lib_selinux_setkeycreatecon+set}" = set; then :
+if ${ac_cv_lib_selinux_setkeycreatecon+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -5536,14 +5575,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_setkeycreatecon" >&5
 $as_echo "$ac_cv_lib_selinux_setkeycreatecon" >&6; }
-if test "x$ac_cv_lib_selinux_setkeycreatecon" = x""yes; then :
+if test "x$ac_cv_lib_selinux_setkeycreatecon" = xyes; then :
   $as_echo "#define HAVE_SETKEYCREATECON 1" >>confdefs.h
 
 fi
 
                ;;
     no)                ;;
-    *)         as_fn_error "\"--with-selinux does not take an argument.\"" "$LINENO" 5
+    *)         as_fn_error $? "\"--with-selinux does not take an argument.\"" "$LINENO" 5
                ;;
 esac
 fi
@@ -5559,7 +5598,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
 $as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then :
+if ${ac_cv_search_strerror+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -5593,11 +5632,11 @@ for ac_lib in '' cposix; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_strerror+set}" = set; then :
+  if ${ac_cv_search_strerror+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_strerror+set}" = set; then :
+if ${ac_cv_search_strerror+:} false; then :
 
 else
   ac_cv_search_strerror=no
@@ -5625,7 +5664,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -5655,7 +5694,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -5671,11 +5710,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -5714,7 +5753,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -5730,18 +5769,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+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; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -5755,7 +5794,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -5795,7 +5834,7 @@ if test -z "$ac_cv_prog_AR"; then
 set dummy ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -5847,7 +5886,7 @@ if test -n "$ac_tool_prefix"; then
 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 test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -5887,7 +5926,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -5935,25 +5974,31 @@ else
 fi
 
 if test X"$AR" = X"false"; then
-    as_fn_error "the \"ar\" utility is required to build sudo" "$LINENO" 5
+    as_fn_error $? "the \"ar\" utility is required to build sudo" "$LINENO" 5
 fi
 
 if test "x$ac_cv_prog_cc_c89" = "xno"; then
-    as_fn_error "Sudo version $PACKAGE_VERSION requires an ANSI C compiler to build." "$LINENO" 5
+    as_fn_error $? "Sudo version $PACKAGE_VERSION requires an ANSI C compiler to build." "$LINENO" 5
 fi
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  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
+  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,
@@ -5967,27 +6012,27 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 # 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_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 test "${ac_cv_build+set}" = set; then :
+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
+  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
+  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;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -6005,14 +6050,14 @@ 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 test "${ac_cv_host+set}" = set; then :
+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
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -6020,7 +6065,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -6046,8 +6091,8 @@ esac
 
 
 
-macro_version='2.2.10'
-macro_revision='1.3175'
+macro_version='2.4'
+macro_revision='1.3293'
 
 
 
@@ -6087,7 +6132,7 @@ 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 && \
+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
@@ -6134,7 +6179,7 @@ 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 test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -6189,7 +6234,7 @@ esac
   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
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -6216,7 +6261,7 @@ Xsed="$SED -e 1s/^X//"
 
 { $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 test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -6265,7 +6310,7 @@ esac
   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
+    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
@@ -6279,7 +6324,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -6331,7 +6376,7 @@ esac
   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
+    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
@@ -6346,7 +6391,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+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
@@ -6398,7 +6443,7 @@ esac
   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
+    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
@@ -6477,7 +6522,7 @@ 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 test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -6514,10 +6559,10 @@ 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
+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 test "${lt_cv_prog_gnu_ld+set}" = set; then :
+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.
@@ -6544,7 +6589,7 @@ 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 test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -6607,7 +6652,7 @@ else
 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 test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -6651,7 +6696,7 @@ do
 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -6723,7 +6768,7 @@ 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 test "${lt_cv_nm_interface+set}" = set; then :
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
@@ -6758,7 +6803,7 @@ fi
 # 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 test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -6903,8 +6948,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -6953,9 +6998,83 @@ 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 test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
@@ -6969,6 +7088,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -6991,7 +7115,7 @@ if test -n "$ac_tool_prefix"; then
 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 test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -7031,7 +7155,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -7090,7 +7214,7 @@ 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 test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -7292,6 +7416,21 @@ 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
@@ -7305,14 +7444,167 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+
+
+
+
+
+
+
+
+
+
 
 
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+  # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 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 test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -7325,7 +7617,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    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
@@ -7345,14 +7637,18 @@ $as_echo "no" >&6; }
 fi
 
 
+    test -n "$AR" && break
+  done
 fi
-if test -z "$ac_cv_prog_AR"; then
+if test -z "$AR"; then
   ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+  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 test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -7365,7 +7661,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
+    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
@@ -7384,6 +7680,10 @@ else
 $as_echo "no" >&6; }
 fi
 
+
+  test -n "$ac_ct_AR" && break
+done
+
   if test "x$ac_ct_AR" = x; then
     AR="false"
   else
@@ -7395,12 +7695,14 @@ ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
   fi
-else
-  AR="$ac_cv_prog_AR"
 fi
 
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
 
 
 
@@ -7408,6 +7710,60 @@ test -z "$AR_FLAGS" && 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 "$ac_status" -eq 0; 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 "$ac_status" -ne 0; 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 "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
 
 
 
@@ -7417,7 +7773,7 @@ if test -n "$ac_tool_prefix"; then
 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 test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -7457,7 +7813,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -7516,7 +7872,7 @@ if test -n "$ac_tool_prefix"; then
 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 test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -7556,7 +7912,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -7660,7 +8016,7 @@ do
 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 test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -7727,7 +8083,7 @@ 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7788,8 +8144,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$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 -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -7825,6 +8181,7 @@ for ac_symprfx in "" "_"; do
   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
@@ -7866,6 +8223,18 @@ _LT_EOF
       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 con'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
@@ -7877,7 +8246,7 @@ _LT_EOF
          cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -7903,8 +8272,8 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
          # Now try linking the two files.
          mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
+         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
@@ -7914,8 +8283,8 @@ _LT_EOF
   test $ac_status = 0; } && test -s conftest${ac_exeext}; then
            pipe_works=yes
          fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
        else
          echo "cannot find nm_test_func in $nlist" >&5
        fi
@@ -7952,6 +8321,12 @@ else
 $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
 
 
 
@@ -7973,19 +8348,62 @@ fi
 
 
 
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
-  enableval=$enable_libtool_lock;
-fi
 
-test "x$enable_libtool_lock" != xno && 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 which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
+
+
+
+
+{ $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 "$GCC" = yes; 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; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && 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 which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -8098,7 +8516,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   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 test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -8166,6 +8584,123 @@ 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
 
   case $host_os in
     rhapsody* | darwin*)
@@ -8174,7 +8709,7 @@ need_locks="$enable_libtool_lock"
 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 test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DSYMUTIL"; then
@@ -8214,7 +8749,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
 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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DSYMUTIL"; then
@@ -8266,7 +8801,7 @@ fi
 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 test "${ac_cv_prog_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NMEDIT"; then
@@ -8306,7 +8841,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
 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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -8358,7 +8893,7 @@ fi
 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 test "${ac_cv_prog_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -8398,7 +8933,7 @@ if test -z "$ac_cv_prog_LIPO"; then
 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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -8450,7 +8985,7 @@ fi
 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 test "${ac_cv_prog_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -8490,7 +9025,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
 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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -8542,7 +9077,7 @@ fi
 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 test "${ac_cv_prog_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -8582,7 +9117,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
 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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -8657,7 +9192,7 @@ 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 test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -8686,7 +9221,7 @@ fi
 $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 test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
@@ -8718,7 +9253,7 @@ fi
 $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 test "${lt_cv_ld_force_load+set}" = set; then :
+if ${lt_cv_ld_force_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_force_load=no
@@ -8786,7 +9321,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
 
 { $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 test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8903,8 +9438,7 @@ 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
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -8918,7 +9452,7 @@ 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" = x""yes; then :
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_DLFCN_H 1
 _ACEOF
@@ -9104,7 +9638,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -9182,7 +9716,7 @@ 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9248,7 +9782,7 @@ 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9390,7 +9924,7 @@ if test "$GCC" = yes; then
 
   { $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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -9443,8 +9977,6 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $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 test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -9609,6 +10141,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
        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'
+       ;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
@@ -9728,13 +10266,17 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
 
+{ $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.
@@ -9742,7 +10284,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
 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 test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
 
 
 
+
+
+
+
+
 #
 # 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 test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -9844,7 +10391,7 @@ 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 test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -9899,7 +10446,7 @@ $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 test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10145,7 +10692,8 @@ _LT_EOF
       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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      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'
@@ -10193,7 +10741,7 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
         && test "$tmp_diet" = no
       then
-       tmp_addflag=
+       tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
@@ -10263,8 +10811,8 @@ _LT_EOF
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       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'
+       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
       ;;
 
@@ -10282,8 +10830,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       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'
+       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
@@ -10329,8 +10877,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       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'
+       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
@@ -10460,7 +11008,13 @@ _LT_EOF
        allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = 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
@@ -10473,22 +11027,29 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
@@ -10500,7 +11061,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = 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
@@ -10513,22 +11080,29 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  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,
@@ -10573,20 +11147,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      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'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
+      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~linknames='
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+         else
+           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $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
+       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*)
@@ -10651,7 +11268,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      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
@@ -10659,7 +11276,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -10675,7 +11292,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux10*)
       if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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'
       else
        archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -10699,10 +11316,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
          archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
-         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
-         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -10719,7 +11336,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
          # (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 test "${lt_cv_prog_compiler__b+set}" = set; then :
+if ${lt_cv_prog_compiler__b+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler__b=no
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-       archive_cmds='$CC -shared $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'
+       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.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+       # 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) {}
+int foo (void) { return 0; }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $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'
-
+  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"
+           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 "$lt_cv_irix_exported_symbol" = yes; 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
       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'
@@ -10882,7 +11512,7 @@ rm -f core conftest.err conftest.$ac_objext \
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
        allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_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'
+       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 \*'
@@ -10901,9 +11531,9 @@ rm -f core conftest.err conftest.$ac_objext \
       no_undefined_flag=' -z defs'
       if test "$GCC" = yes; then
        wlarc='${wl}'
-       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*)
@@ -11091,7 +11721,7 @@ x|xyes)
       # 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 test "${lt_cv_archive_cmds_need_lc+set}" = set; then :
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   $RM conftest*
@@ -11479,8 +12109,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  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}`~
@@ -11513,13 +12144,71 @@ cygwin* | mingw* | pw32* | cegcc*)
       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
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -11733,7 +12422,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   shlibpath_overrides_runpath=no
 
   # Some binutils ld are patched to set DT_RUNPATH
-  if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then :
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_shlibpath_overrides_runpath=no
@@ -12153,7 +12842,7 @@ else
   # 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 test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12187,7 +12876,7 @@ 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" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+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 test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12240,16 +12929,16 @@ 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" = x""yes; then :
+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" = x""yes; then :
+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 test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12283,12 +12972,12 @@ 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" = x""yes; then :
+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 test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12322,12 +13011,12 @@ 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" = x""yes; then :
+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 test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12361,7 +13050,7 @@ 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" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -12402,7 +13091,7 @@ fi
 
     { $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 test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
          if test "$cross_compiling" = yes; then :
@@ -12455,10 +13144,10 @@ else
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
 #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-void fnord () __attribute__((visibility("default")));
+int fnord () __attribute__((visibility("default")));
 #endif
 
-void fnord () { int i=42; }
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12508,7 +13197,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
       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 test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
          if test "$cross_compiling" = yes; then :
@@ -12561,10 +13250,10 @@ else
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
 #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-void fnord () __attribute__((visibility("default")));
+int fnord () __attribute__((visibility("default")));
 #endif
 
-void fnord () { int i=42; }
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12797,7 +13486,7 @@ fi
 set dummy uname; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_UNAMEPROG+set}" = set; then :
+if ${ac_cv_prog_UNAMEPROG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$UNAMEPROG"; then
@@ -12834,7 +13523,7 @@ fi
 set dummy tr; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_TRPROG+set}" = set; then :
+if ${ac_cv_prog_TRPROG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$TRPROG"; then
@@ -12873,7 +13562,7 @@ do
 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 test "${ac_cv_prog_NROFFPROG+set}" = set; then :
+if ${ac_cv_prog_NROFFPROG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NROFFPROG"; then
   test -n "$NROFFPROG" && break
 done
 
-if test -z "$NROFFPROG"; then
+if test -n "$NROFFPROG"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $NROFFPROG supports the -c option" >&5
+$as_echo_n "checking whether $NROFFPROG supports the -c option... " >&6; }
+if ${sudo_cv_var_nroff_opt_c+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $NROFFPROG -c </dev/null >/dev/null 2>&1; then
+           sudo_cv_var_nroff_opt_c=yes
+       else
+           sudo_cv_var_nroff_opt_c=no
+       fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_nroff_opt_c" >&5
+$as_echo "$sudo_cv_var_nroff_opt_c" >&6; }
+    if test "$sudo_cv_var_nroff_opt_c" = "yes"; then
+       NROFFPROG="$NROFFPROG -c"
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $NROFFPROG supports the -Tascii option" >&5
+$as_echo_n "checking whether $NROFFPROG supports the -Tascii option... " >&6; }
+if ${sudo_cv_var_nroff_opt_Tascii+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $NROFFPROG -Tascii </dev/null >/dev/null 2>&1; then
+           sudo_cv_var_nroff_opt_Tascii=yes
+       else
+           sudo_cv_var_nroff_opt_Tascii=no
+       fi
+    if test "$sudo_cv_var_nroff_opt_Tascii" = "yes"; then
+       NROFFPROG="$NROFFPROG -Tascii"
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_nroff_opt_Tascii" >&5
+$as_echo "$sudo_cv_var_nroff_opt_Tascii" >&6; }
+else
     MANTYPE="cat"
     mansrcdir='$(srcdir)'
 fi
 
 if test -n "$sudo_cv_prev_host"; then
     if test "$sudo_cv_prev_host" != "$host"; then
-       as_fn_error "config.cache was created on a different host; remove it and re-run configure." "$LINENO" 5
+       as_fn_error $? "config.cache was created on a different host; remove it and re-run configure." "$LINENO" 5
     else
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking previous host type" >&5
 $as_echo_n "checking previous host type... " >&6; }
-       if test "${sudo_cv_prev_host+set}" = set; then :
+       if ${sudo_cv_prev_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   sudo_cv_prev_host="$host"
@@ -12931,7 +13655,7 @@ $as_echo "$sudo_cv_prev_host" >&6; }
     fi
 else
     # this will produce no output since there is no cached value
-    if test "${sudo_cv_prev_host+set}" = set; then :
+    if ${sudo_cv_prev_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   sudo_cv_prev_host="$host"
@@ -12975,7 +13699,7 @@ case "$host" in
                for ac_func in priv_set
 do :
   ac_fn_c_check_func "$LINENO" "priv_set" "ac_cv_func_priv_set"
-if test "x$ac_cv_func_priv_set" = x""yes; then :
+if test "x$ac_cv_func_priv_set" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_PRIV_SET 1
 _ACEOF
@@ -13030,7 +13754,7 @@ rm -f core conftest.err conftest.$ac_objext \
                    for ac_func in authenticate
 do :
   ac_fn_c_check_func "$LINENO" "authenticate" "ac_cv_func_authenticate"
-if test "x$ac_cv_func_authenticate" = x""yes; then :
+if test "x$ac_cv_func_authenticate" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_AUTHENTICATE 1
 _ACEOF
                    with_netsvc="/etc/netsvc.conf"
                fi
 
+               # For implementing getgrouplist()
+               for ac_func in getgrset
+do :
+  ac_fn_c_check_func "$LINENO" "getgrset" "ac_cv_func_getgrset"
+if test "x$ac_cv_func_getgrset" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETGRSET 1
+_ACEOF
+
+fi
+done
+
+
+               # LDR_PRELOAD is supported in AIX 5.3 and later
+               case "$OSREV" in
+                   1-4.*) with_noexec=no ;;
+               esac
+
                # AIX-specific functions
                for ac_func in getuserattr setauthdb
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -13084,15 +13825,40 @@ done
                : ${mansectsu='1m'}
                : ${mansectform='4'}
 
+               # The HP bundled compiler cannot generate shared libs
                if test -z "$GCC"; then
-                   # Use the +DAportable flag on hppa if it is supported
-                   case "$host_cpu" in
-                   hppa*)
+                   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HP bundled C compiler" >&5
+$as_echo_n "checking for HP bundled C compiler... " >&6; }
+if ${sudo_cv_var_hpccbundled+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $CC -V 2>&1 | grep '^(Bundled)' >/dev/null 2>&1; then
+                           sudo_cv_var_hpccbundled=yes
+                       else
+                           sudo_cv_var_hpccbundled=no
+                       fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_hpccbundled" >&5
+$as_echo "$sudo_cv_var_hpccbundled" >&6; }
+                   if test "$sudo_cv_var_hpccbundled" = "yes"; then
+                       as_fn_error $? "The HP bundled C compiler is unable to build Sudo, you must use gcc or the HP ANSI C compiler instead." "$LINENO" 5
+                   fi
+               fi
+
+               # Build PA-RISC1.1 objects for better portability
+               case "$host_cpu" in
+                   hppa2-9*)
                        _CFLAGS="$CFLAGS"
-                       CFLAGS="$CFLAGS +DAportable"
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands +DAportable" >&5
-$as_echo_n "checking whether $CC understands +DAportable... " >&6; }
-if test "${sudo_cv_var_daportable+set}" = set; then :
+                       if test -n "$GCC"; then
+                           portable_flag="-march=1.1"
+                       else
+                           portable_flag="+DAportable"
+                       fi
+                       CFLAGS="$CFLAGS $portable_flag"
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $portable_flag" >&5
+$as_echo_n "checking whether $CC understands $portable_flag... " >&6; }
+if ${sudo_cv_var_daportable+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13123,8 +13889,7 @@ $as_echo "$sudo_cv_var_daportable" >&6; }
                            CFLAGS="$_CFLAGS"
                        fi
                        ;;
-                   esac
-               fi
+               esac
 
                case "$host" in
                        *-*-hpux1-8.*)
@@ -13259,7 +14024,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                if test "$OSMAJOR" -le 4; then
                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpwnam in -lsun" >&5
 $as_echo_n "checking for getpwnam in -lsun... " >&6; }
-if test "${ac_cv_lib_sun_getpwnam+set}" = set; then :
+if ${ac_cv_lib_sun_getpwnam+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -13293,7 +14058,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_getpwnam" >&5
 $as_echo "$ac_cv_lib_sun_getpwnam" >&6; }
-if test "x$ac_cv_lib_sun_getpwnam" = x""yes; then :
+if test "x$ac_cv_lib_sun_getpwnam" = xyes; then :
   LIBS="${LIBS} -lsun"
 fi
 
@@ -13363,7 +14128,7 @@ fi
     *-ncr-sysv4*|*-ncr-sysvr4*)
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lc89" >&5
 $as_echo_n "checking for strcasecmp in -lc89... " >&6; }
-if test "${ac_cv_lib_c89_strcasecmp+set}" = set; then :
+if ${ac_cv_lib_c89_strcasecmp+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -13397,7 +14162,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c89_strcasecmp" >&5
 $as_echo "$ac_cv_lib_c89_strcasecmp" >&6; }
-if test "x$ac_cv_lib_c89_strcasecmp" = x""yes; then :
+if test "x$ac_cv_lib_c89_strcasecmp" = xyes; then :
   LIBS="${LIBS} -lc89"
 fi
 
@@ -13428,7 +14193,7 @@ $as_echo "$as_me: using shlicc as CC" >&6;}
                    for ac_func in auth_challenge
 do :
   ac_fn_c_check_func "$LINENO" "auth_challenge" "ac_cv_func_auth_challenge"
-if test "x$ac_cv_func_auth_challenge" = x""yes; then :
+if test "x$ac_cv_func_auth_challenge" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_AUTH_CHALLENGE 1
 _ACEOF
@@ -13525,14 +14290,14 @@ AUTH_EXCL=${AUTH_EXCL# }
 if test -n "$AUTH_EXCL"; then
     set -- $AUTH_EXCL
     if test $# != 1; then
-       as_fn_error "More than one mutually exclusive authentication method specified: $AUTH_EXCL" "$LINENO" 5
+       as_fn_error $? "More than one mutually exclusive authentication method specified: $AUTH_EXCL" "$LINENO" 5
     fi
     if test -n "$AUTH_REG"; then
-       as_fn_error "Cannot mix mutually exclusive ($AUTH_EXCL) and regular ($AUTH_REG) authentication methods" "$LINENO" 5
+       as_fn_error $? "Cannot mix mutually exclusive ($AUTH_EXCL) and regular ($AUTH_REG) authentication methods" "$LINENO" 5
     fi
 fi
 if test X"${with_skey}${with_opie}" = X"yesyes"; then
-    as_fn_error "\"cannot use both S/Key and OPIE\"" "$LINENO" 5
+    as_fn_error $? "\"cannot use both S/Key and OPIE\"" "$LINENO" 5
 fi
 
 : ${mansectsu='8'}
@@ -13572,7 +14337,7 @@ fi
 if test $ac_cv_c_compiler_gnu = yes; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
 $as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if test "${ac_cv_prog_gcc_traditional+set}" = set; then :
+if ${ac_cv_prog_gcc_traditional+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     ac_pattern="Autoconf.*'x'"
@@ -13613,7 +14378,7 @@ 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 test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13693,7 +14458,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
 $as_echo_n "checking for working volatile... " >&6; }
-if test "${ac_cv_c_volatile+set}" = set; then :
+if ${ac_cv_c_volatile+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13726,19 +14491,53 @@ $as_echo "#define volatile /**/" >>confdefs.h
 fi
 
 if test X"$with_gnu_ld" != "yes" -a -n "$GCC"; then
-    LTLDFLAGS="$LTLDFLAGS -Wc,-static-libgcc"
-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 test "${ac_cv_prog_YACC+set}" = set; then :
+    _CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -static-libgcc"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -static-libgcc" >&5
+$as_echo_n "checking whether $CC understands -static-libgcc... " >&6; }
+if ${sudo_cv_var_gcc_static_libgcc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$YACC"; then
-  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  sudo_cv_var_gcc_static_libgcc=yes
+else
+  sudo_cv_var_gcc_static_libgcc=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_gcc_static_libgcc" >&5
+$as_echo "$sudo_cv_var_gcc_static_libgcc" >&6; }
+    CFLAGS="$_CFLAGS"
+    if test "$sudo_cv_var_gcc_static_libgcc" = "yes"; then
+       LTLDFLAGS="$LTLDFLAGS -Wc,-static-libgcc"
+    fi
+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
@@ -13775,7 +14574,7 @@ test -n "$YACC" || YACC="yacc"
 set dummy flex; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_FLEX+set}" = set; then :
+if ${ac_cv_path_FLEX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $FLEX in
@@ -13922,7 +14721,7 @@ _ACEOF
 $as_echo "$logfac" >&6; }
 { $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 test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14037,7 +14836,7 @@ 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 { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Header+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14064,8 +14863,7 @@ fi
 eval ac_res=\$$as_ac_Header
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -14078,7 +14876,7 @@ done
 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 test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -14112,11 +14910,11 @@ for ac_lib in '' dir; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_opendir+set}" = set; then :
+  if ${ac_cv_search_opendir+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
 
 else
   ac_cv_search_opendir=no
@@ -14135,7 +14933,7 @@ 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 test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -14169,11 +14967,11 @@ for ac_lib in '' x; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_opendir+set}" = set; then :
+  if ${ac_cv_search_opendir+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
 
 else
   ac_cv_search_opendir=no
@@ -14193,7 +14991,7 @@ 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 test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14230,8 +15028,7 @@ for ac_header in malloc.h paths.h utime.h netgroup.h utmpx.h sys/sockio.h sys/bs
 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"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -14249,7 +15046,7 @@ 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 test "${ac_cv_sys_largefile_CC+set}" = set; then :
+if ${ac_cv_sys_largefile_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_sys_largefile_CC=no
@@ -14300,7 +15097,7 @@ $as_echo "$ac_cv_sys_largefile_CC" >&6; }
 
   { $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 test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+if ${ac_cv_sys_file_offset_bits+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   while :; do
@@ -14369,7 +15166,7 @@ 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 test "${ac_cv_sys_large_files+set}" = set; then :
+if ${ac_cv_sys_large_files+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   while :; do
@@ -14442,7 +15239,7 @@ case "$host" in
     *-*-hpux11.*)
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h needs _XOPEN_SOURCE_EXTENDED" >&5
 $as_echo_n "checking whether sys/types.h needs _XOPEN_SOURCE_EXTENDED... " >&6; }
-if test "${sudo_cv_xopen_source_extended+set}" = set; then :
+if ${sudo_cv_xopen_source_extended+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14497,7 +15294,7 @@ EOF
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking POSIX termios" >&5
 $as_echo_n "checking POSIX termios... " >&6; }
-if test "${ac_cv_sys_posix_termios+set}" = set; then :
+if ${ac_cv_sys_posix_termios+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14527,7 +15324,7 @@ fi
 $as_echo "$ac_cv_sys_posix_termios" >&6; }
 
 if test "$ac_cv_sys_posix_termios" != "yes"; then
-    as_fn_error "Must have POSIX termios to build sudo" "$LINENO" 5
+    as_fn_error $? "Must have POSIX termios to build sudo" "$LINENO" 5
 fi
 
 maildir=no
@@ -14554,7 +15351,7 @@ if test $maildir = no; then
     for ac_header in maillock.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "maillock.h" "ac_cv_header_maillock_h" "$ac_includes_default"
-if test "x$ac_cv_header_maillock_h" = x""yes; then :
+if test "x$ac_cv_header_maillock_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MAILLOCK_H 1
 _ACEOF
@@ -14594,7 +15391,7 @@ if test ${with_logincap-'no'} != "no"; then
     for ac_header in login_cap.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "login_cap.h" "ac_cv_header_login_cap_h" "$ac_includes_default"
-if test "x$ac_cv_header_login_cap_h" = x""yes; then :
+if test "x$ac_cv_header_login_cap_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LOGIN_CAP_H 1
 _ACEOF
@@ -14613,18 +15410,59 @@ done
 fi
 if test ${with_project-'no'} != "no"; then
     ac_fn_c_check_header_mongrel "$LINENO" "project.h" "ac_cv_header_project_h" "$ac_includes_default"
-if test "x$ac_cv_header_project_h" = x""yes; then :
-  $as_echo "#define HAVE_PROJECT_H 1" >>confdefs.h
+if test "x$ac_cv_header_project_h" = xyes; then :
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setproject in -lproject" >&5
+$as_echo_n "checking for setproject in -lproject... " >&6; }
+if ${ac_cv_lib_project_setproject+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lproject  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-       SUDO_LIBS="${SUDO_LIBS} -lproject"
+/* 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 setproject ();
+int
+main ()
+{
+return setproject ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_project_setproject=yes
 else
-  -
+  ac_cv_lib_project_setproject=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_project_setproject" >&5
+$as_echo "$ac_cv_lib_project_setproject" >&6; }
+if test "x$ac_cv_lib_project_setproject" = xyes; then :
+
+           $as_echo "#define HAVE_PROJECT_H 1" >>confdefs.h
+
+           SUDO_LIBS="${SUDO_LIBS} -lproject"
+
+fi
+
+
 fi
 
 
 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" = x""yes; then :
+if test "x$ac_cv_type_mode_t" = xyes; then :
 
 else
 
@@ -14636,7 +15474,7 @@ 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 test "${ac_cv_type_uid_t+set}" = set; then :
+if ${ac_cv_type_uid_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14665,11 +15503,11 @@ $as_echo "#define gid_t int" >>confdefs.h
 fi
 
 ac_fn_c_check_type "$LINENO" "__signed char" "ac_cv_type___signed_char" "$ac_includes_default"
-if test "x$ac_cv_type___signed_char" = x""yes; then :
+if test "x$ac_cv_type___signed_char" = xyes; then :
 
 else
   ac_fn_c_check_type "$LINENO" "signed char" "ac_cv_type_signed_char" "$ac_includes_default"
-if test "x$ac_cv_type_signed_char" = x""yes; then :
+if test "x$ac_cv_type_signed_char" = xyes; then :
   $as_echo "#define __signed signed" >>confdefs.h
 
 else
@@ -14682,7 +15520,7 @@ fi
 ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include <sys/types.h>
 #include <signal.h>
 "
-if test "x$ac_cv_type_sig_atomic_t" = x""yes; then :
+if test "x$ac_cv_type_sig_atomic_t" = xyes; then :
 
 else
   $as_echo "#define sig_atomic_t int" >>confdefs.h
@@ -14692,7 +15530,7 @@ fi
 ac_fn_c_check_type "$LINENO" "sigaction_t" "ac_cv_type_sigaction_t" "#include <sys/types.h>
 #include <signal.h>
 "
-if test "x$ac_cv_type_sigaction_t" = x""yes; then :
+if test "x$ac_cv_type_sigaction_t" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_SIGACTION_T 1
@@ -14708,7 +15546,7 @@ ac_fn_c_check_type "$LINENO" "struct timespec" "ac_cv_type_struct_timespec" "#in
 #endif
 #include <time.h>
 "
-if test "x$ac_cv_type_struct_timespec" = x""yes; then :
+if test "x$ac_cv_type_struct_timespec" = xyes; then :
   $as_echo "#define HAVE_TIMESPEC 1" >>confdefs.h
 
 fi
@@ -14716,7 +15554,7 @@ fi
 ac_fn_c_check_type "$LINENO" "struct in6_addr" "ac_cv_type_struct_in6_addr" "#include <sys/types.h>
 #include <netinet/in.h>
 "
-if test "x$ac_cv_type_struct_in6_addr" = x""yes; then :
+if test "x$ac_cv_type_struct_in6_addr" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_IN6_ADDR 1
@@ -14729,7 +15567,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
 $as_echo_n "checking for long long int... " >&6; }
-if test "${ac_cv_type_long_long_int+set}" = set; then :
+if ${ac_cv_type_long_long_int+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14823,7 +15661,7 @@ $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
 # This bug is HP SR number 8606223364.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long int" >&5
 $as_echo_n "checking size of long int... " >&6; }
-if test "${ac_cv_sizeof_long_int+set}" = set; then :
+if ${ac_cv_sizeof_long_int+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long int))" "ac_cv_sizeof_long_int"        "$ac_includes_default"; then :
@@ -14832,9 +15670,8 @@ else
   if test "$ac_cv_type_long_int" = 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_set_status 77
-as_fn_error "cannot compute sizeof (long int)
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "cannot compute sizeof (long int)
+See \`config.log' for more details" "$LINENO" 5; }
    else
      ac_cv_sizeof_long_int=0
    fi
@@ -14853,7 +15690,7 @@ _ACEOF
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for size_t" >&5
 $as_echo_n "checking for size_t... " >&6; }
-if test "${sudo_cv_type_size_t+set}" = set; then :
+if ${sudo_cv_type_size_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14886,7 +15723,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5
 $as_echo_n "checking for ssize_t... " >&6; }
-if test "${sudo_cv_type_ssize_t+set}" = set; then :
+if ${sudo_cv_type_ssize_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14919,7 +15756,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dev_t" >&5
 $as_echo_n "checking for dev_t... " >&6; }
-if test "${sudo_cv_type_dev_t+set}" = set; then :
+if ${sudo_cv_type_dev_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14952,7 +15789,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ino_t" >&5
 $as_echo_n "checking for ino_t... " >&6; }
-if test "${sudo_cv_type_ino_t+set}" = set; then :
+if ${sudo_cv_type_ino_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14986,7 +15823,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking max length of uid_t" >&5
 $as_echo_n "checking max length of uid_t... " >&6; }
-if test "${sudo_cv_uid_t_len+set}" = set; then :
+if ${sudo_cv_uid_t_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftestdata
@@ -15040,7 +15877,7 @@ _ACEOF
          #include <sys/socket.h>
 
 "
-if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then :
+if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then :
 
 $as_echo "#define HAVE_SA_LEN 1" >>confdefs.h
 
@@ -15055,7 +15892,7 @@ if test $ac_cv_header_utmpx_h = "yes"; then
        #include <utmpx.h>
 
 "
-if test "x$ac_cv_member_struct_utmpx_ut_id" = x""yes; then :
+if test "x$ac_cv_member_struct_utmpx_ut_id" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMPX_UT_ID 1
@@ -15068,7 +15905,7 @@ ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_pid" "ac_cv_member_struct_utmp
        #include <utmpx.h>
 
 "
-if test "x$ac_cv_member_struct_utmpx_ut_pid" = x""yes; then :
+if test "x$ac_cv_member_struct_utmpx_ut_pid" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMPX_UT_PID 1
@@ -15081,7 +15918,7 @@ ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_tv" "ac_cv_member_struct_utmpx
        #include <utmpx.h>
 
 "
-if test "x$ac_cv_member_struct_utmpx_ut_tv" = x""yes; then :
+if test "x$ac_cv_member_struct_utmpx_ut_tv" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMPX_UT_TV 1
@@ -15094,7 +15931,7 @@ ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_type" "ac_cv_member_struct_utm
        #include <utmpx.h>
 
 "
-if test "x$ac_cv_member_struct_utmpx_ut_type" = x""yes; then :
+if test "x$ac_cv_member_struct_utmpx_ut_type" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMPX_UT_TYPE 1
@@ -15108,7 +15945,7 @@ fi
        #include <utmpx.h>
 
 "
-if test "x$ac_cv_member_struct_utmpx_ut_exit___e_termination" = x""yes; then :
+if test "x$ac_cv_member_struct_utmpx_ut_exit___e_termination" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMPX_UT_EXIT___E_TERMINATION 1
@@ -15123,7 +15960,7 @@ else
            #include <utmpx.h>
 
 "
-if test "x$ac_cv_member_struct_utmpx_ut_exit_e_termination" = x""yes; then :
+if test "x$ac_cv_member_struct_utmpx_ut_exit_e_termination" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMPX_UT_EXIT_E_TERMINATION 1
@@ -15142,7 +15979,7 @@ else
        #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_id" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_id" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_ID 1
@@ -15155,7 +15992,7 @@ ac_fn_c_check_member "$LINENO" "struct utmp" "ut_pid" "ac_cv_member_struct_utmp_
        #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_pid" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_pid" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_PID 1
@@ -15168,7 +16005,7 @@ ac_fn_c_check_member "$LINENO" "struct utmp" "ut_tv" "ac_cv_member_struct_utmp_u
        #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_tv" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_tv" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_TV 1
@@ -15181,7 +16018,7 @@ ac_fn_c_check_member "$LINENO" "struct utmp" "ut_type" "ac_cv_member_struct_utmp
        #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_type" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_type" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_TYPE 1
@@ -15194,7 +16031,7 @@ ac_fn_c_check_member "$LINENO" "struct utmp" "ut_user" "ac_cv_member_struct_utmp
        #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_user" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_user" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_USER 1
@@ -15208,7 +16045,7 @@ fi
        #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_exit___e_termination" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_exit___e_termination" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_EXIT___E_TERMINATION 1
@@ -15223,7 +16060,7 @@ else
            #include <utmp.h>
 
 "
-if test "x$ac_cv_member_struct_utmp_ut_exit_e_termination" = x""yes; then :
+if test "x$ac_cv_member_struct_utmp_ut_exit_e_termination" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_UTMP_UT_EXIT_E_TERMINATION 1
@@ -15241,7 +16078,7 @@ CFLAGS="$_CFLAGS"
 
 { $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 test "${ac_cv_type_getgroups+set}" = set; then :
+if ${ac_cv_type_getgroups+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -15307,7 +16144,7 @@ _ACEOF
 
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -15318,7 +16155,7 @@ _ACEOF
 fi
 
 ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups"
-if test "x$ac_cv_func_getgroups" = x""yes; then :
+if test "x$ac_cv_func_getgroups" = xyes; then :
 
 fi
 
@@ -15329,7 +16166,7 @@ ac_save_LIBS=$LIBS
 if test $ac_cv_func_getgroups = no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5
 $as_echo_n "checking for getgroups in -lbsd... " >&6; }
-if test "${ac_cv_lib_bsd_getgroups+set}" = set; then :
+if ${ac_cv_lib_bsd_getgroups+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15363,7 +16200,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5
 $as_echo "$ac_cv_lib_bsd_getgroups" >&6; }
-if test "x$ac_cv_lib_bsd_getgroups" = x""yes; then :
+if test "x$ac_cv_lib_bsd_getgroups" = xyes; then :
   GETGROUPS_LIB=-lbsd
 fi
 
@@ -15374,7 +16211,7 @@ fi
 if test $ac_cv_func_getgroups = yes; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5
 $as_echo_n "checking for working getgroups... " >&6; }
-if test "${ac_cv_func_getgroups_works+set}" = set; then :
+if ${ac_cv_func_getgroups_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -15415,14 +16252,13 @@ $as_echo "#define HAVE_GETGROUPS 1" >>confdefs.h
 fi
 LIBS=$ac_save_LIBS
 
-for ac_func in strrchr sysconf tzset strftime initgroups getgroups fstat \
+for ac_func in strrchr sysconf tzset strftime fstat \
               regcomp setlocale nl_langinfo getaddrinfo mbr_check_membership \
               setrlimit64 sysctl
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -15430,10 +16266,24 @@ _ACEOF
 fi
 done
 
+ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist"
+if test "x$ac_cv_func_getgrouplist" = xyes; then :
+  $as_echo "#define HAVE_GETGROUPLIST 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" getgrouplist.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS getgrouplist.$ac_objext"
+ ;;
+esac
+
+fi
+
+
 for ac_func in getline
 do :
   ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline"
-if test "x$ac_cv_func_getline" = x""yes; then :
+if test "x$ac_cv_func_getline" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETLINE 1
 _ACEOF
@@ -15449,7 +16299,7 @@ esac
     for ac_func in fgetln
 do :
   ac_fn_c_check_func "$LINENO" "fgetln" "ac_cv_func_fgetln"
-if test "x$ac_cv_func_fgetln" = x""yes; then :
+if test "x$ac_cv_func_fgetln" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FGETLN 1
 _ACEOF
@@ -15466,8 +16316,7 @@ for ac_func in getutxid getutid
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -15480,8 +16329,7 @@ if test "$utmp_style" = "LEGACY"; then
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -15494,7 +16342,7 @@ fi
 for ac_func in openpty
 do :
   ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty"
-if test "x$ac_cv_func_openpty" = x""yes; then :
+if test "x$ac_cv_func_openpty" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_OPENPTY 1
 _ACEOF
@@ -15502,8 +16350,7 @@ _ACEOF
 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"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -15516,7 +16363,7 @@ else
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5
 $as_echo_n "checking for openpty in -lutil... " >&6; }
-if test "${ac_cv_lib_util_openpty+set}" = set; then :
+if ${ac_cv_lib_util_openpty+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15550,14 +16397,13 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5
 $as_echo "$ac_cv_lib_util_openpty" >&6; }
-if test "x$ac_cv_lib_util_openpty" = x""yes; then :
+if test "x$ac_cv_lib_util_openpty" = xyes; then :
 
        for ac_header in util.h pty.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"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -15578,7 +16424,7 @@ else
        for ac_func in _getpty
 do :
   ac_fn_c_check_func "$LINENO" "_getpty" "ac_cv_func__getpty"
-if test "x$ac_cv_func__getpty" = x""yes; then :
+if test "x$ac_cv_func__getpty" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE__GETPTY 1
 _ACEOF
@@ -15588,7 +16434,7 @@ else
            for ac_func in grantpt
 do :
   ac_fn_c_check_func "$LINENO" "grantpt" "ac_cv_func_grantpt"
-if test "x$ac_cv_func_grantpt" = x""yes; then :
+if test "x$ac_cv_func_grantpt" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GRANTPT 1
 _ACEOF
@@ -15596,7 +16442,7 @@ _ACEOF
                for ac_func in posix_openpt
 do :
   ac_fn_c_check_func "$LINENO" "posix_openpt" "ac_cv_func_posix_openpt"
-if test "x$ac_cv_func_posix_openpt" = x""yes; then :
+if test "x$ac_cv_func_posix_openpt" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_POSIX_OPENPT 1
 _ACEOF
@@ -15610,7 +16456,7 @@ else
                for ac_func in revoke
 do :
   ac_fn_c_check_func "$LINENO" "revoke" "ac_cv_func_revoke"
-if test "x$ac_cv_func_revoke" = x""yes; then :
+if test "x$ac_cv_func_revoke" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_REVOKE 1
 _ACEOF
@@ -15636,13 +16482,13 @@ done
 for ac_func in unsetenv
 do :
   ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv"
-if test "x$ac_cv_func_unsetenv" = x""yes; then :
+if test "x$ac_cv_func_unsetenv" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_UNSETENV 1
 _ACEOF
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unsetenv returns void" >&5
 $as_echo_n "checking whether unsetenv returns void... " >&6; }
-if test "${sudo_cv_func_unsetenv_void+set}" = set; then :
+if ${sudo_cv_func_unsetenv_void+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -15696,7 +16542,7 @@ if test -z "$SKIP_SETRESUID"; then
     for ac_func in setresuid
 do :
   ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid"
-if test "x$ac_cv_func_setresuid" = x""yes; then :
+if test "x$ac_cv_func_setresuid" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SETRESUID 1
 _ACEOF
@@ -15705,7 +16551,7 @@ _ACEOF
        for ac_func in getresuid
 do :
   ac_fn_c_check_func "$LINENO" "getresuid" "ac_cv_func_getresuid"
-if test "x$ac_cv_func_getresuid" = x""yes; then :
+if test "x$ac_cv_func_getresuid" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETRESUID 1
 _ACEOF
@@ -15722,7 +16568,7 @@ if test -z "$SKIP_SETREUID"; then
     for ac_func in setreuid
 do :
   ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid"
-if test "x$ac_cv_func_setreuid" = x""yes; then :
+if test "x$ac_cv_func_setreuid" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SETREUID 1
 _ACEOF
@@ -15735,7 +16581,7 @@ if test -z "$SKIP_SETEUID"; then
     for ac_func in seteuid
 do :
   ac_fn_c_check_func "$LINENO" "seteuid" "ac_cv_func_seteuid"
-if test "x$ac_cv_func_seteuid" = x""yes; then :
+if test "x$ac_cv_func_seteuid" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SETEUID 1
 _ACEOF
@@ -15748,14 +16594,14 @@ if test X"$with_interfaces" != X"no"; then
     for ac_func in getifaddrs
 do :
   ac_fn_c_check_func "$LINENO" "getifaddrs" "ac_cv_func_getifaddrs"
-if test "x$ac_cv_func_getifaddrs" = x""yes; then :
+if test "x$ac_cv_func_getifaddrs" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETIFADDRS 1
 _ACEOF
  for ac_func in freeifaddrs
 do :
   ac_fn_c_check_func "$LINENO" "freeifaddrs" "ac_cv_func_freeifaddrs"
-if test "x$ac_cv_func_freeifaddrs" = x""yes; then :
+if test "x$ac_cv_func_freeifaddrs" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FREEIFADDRS 1
 _ACEOF
@@ -15768,30 +16614,25 @@ done
 
 fi
 if test -z "$BROKEN_GETCWD"; then
-    for ac_func in getcwd
-do :
-  ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd"
-if test "x$ac_cv_func_getcwd" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETCWD 1
-_ACEOF
+    ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd"
+if test "x$ac_cv_func_getcwd" = xyes; then :
+  $as_echo "#define HAVE_GETCWD 1" >>confdefs.h
 
 else
   case " $LIBOBJS " in
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+  *" getcwd.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS getcwd.$ac_objext"
  ;;
 esac
 
 fi
-done
 
 
 fi
 for ac_func in glob
 do :
   ac_fn_c_check_func "$LINENO" "glob" "ac_cv_func_glob"
-if test "x$ac_cv_func_glob" = x""yes; then :
+if test "x$ac_cv_func_glob" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GLOB 1
 _ACEOF
@@ -15838,8 +16679,7 @@ for ac_func in lockf flock
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -15851,15 +16691,14 @@ for ac_func in innetgr _innetgr
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
  for ac_func in getdomainname
 do :
   ac_fn_c_check_func "$LINENO" "getdomainname" "ac_cv_func_getdomainname"
-if test "x$ac_cv_func_getdomainname" = x""yes; then :
+if test "x$ac_cv_func_getdomainname" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETDOMAINNAME 1
 _ACEOF
@@ -15873,7 +16712,7 @@ done
 for ac_func in utimes
 do :
   ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes"
-if test "x$ac_cv_func_utimes" = x""yes; then :
+if test "x$ac_cv_func_utimes" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_UTIMES 1
 _ACEOF
@@ -15881,8 +16720,7 @@ _ACEOF
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -15894,7 +16732,7 @@ else
   for ac_func in futime
 do :
   ac_fn_c_check_func "$LINENO" "futime" "ac_cv_func_futime"
-if test "x$ac_cv_func_futime" = x""yes; then :
+if test "x$ac_cv_func_futime" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FUTIME 1
 _ACEOF
@@ -15913,7 +16751,7 @@ done
 for ac_func in killpg
 do :
   ac_fn_c_check_func "$LINENO" "killpg" "ac_cv_func_killpg"
-if test "x$ac_cv_func_killpg" = x""yes; then :
+if test "x$ac_cv_func_killpg" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_KILLPG 1
 _ACEOF
@@ -15930,7 +16768,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fnmatch with FNM_CASEFOLD" >&5
 $as_echo_n "checking for working fnmatch with FNM_CASEFOLD... " >&6; }
-if test "${sudo_cv_func_fnmatch+set}" = set; then :
+if ${sudo_cv_func_fnmatch+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftestdata; > conftestdata
@@ -15969,7 +16807,7 @@ esac
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isblank" >&5
 $as_echo_n "checking for isblank... " >&6; }
-if test "${sudo_cv_func_isblank+set}" = set; then :
+if ${sudo_cv_func_isblank+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16007,31 +16845,63 @@ esac
 
   fi
 
-for ac_func in memrchr strlcpy strlcat setenv
-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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "memrchr" "ac_cv_func_memrchr"
+if test "x$ac_cv_func_memrchr" = xyes; then :
+  $as_echo "#define HAVE_MEMRCHR 1" >>confdefs.h
 
 else
   case " $LIBOBJS " in
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+  *" memrchr.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS memrchr.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
+if test "x$ac_cv_func_strlcpy" = xyes; then :
+  $as_echo "#define HAVE_STRLCPY 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" strlcpy.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat"
+if test "x$ac_cv_func_strlcat" = xyes; then :
+  $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" strlcat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strlcat.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv"
+if test "x$ac_cv_func_setenv" = xyes; then :
+  $as_echo "#define HAVE_SETENV 1" >>confdefs.h
+
+else
+  case " $LIBOBJS " in
+  *" setenv.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS setenv.$ac_objext"
  ;;
 esac
 
 fi
-done
 
 
 for ac_func in nanosleep
 do :
   ac_fn_c_check_func "$LINENO" "nanosleep" "ac_cv_func_nanosleep"
-if test "x$ac_cv_func_nanosleep" = x""yes; then :
+if test "x$ac_cv_func_nanosleep" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_NANOSLEEP 1
 _ACEOF
@@ -16041,7 +16911,7 @@ else
     # On Solaris, nanosleep is in librt
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nanosleep in -lrt" >&5
 $as_echo_n "checking for nanosleep in -lrt... " >&6; }
-if test "${ac_cv_lib_rt_nanosleep+set}" = set; then :
+if ${ac_cv_lib_rt_nanosleep+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16075,7 +16945,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_nanosleep" >&5
 $as_echo "$ac_cv_lib_rt_nanosleep" >&6; }
-if test "x$ac_cv_lib_rt_nanosleep" = x""yes; then :
+if test "x$ac_cv_lib_rt_nanosleep" = xyes; then :
   REPLAY_LIBS="${REPLAY_LIBS} -lrt"
 else
   case " $LIBOBJS " in
@@ -16093,7 +16963,7 @@ done
 for ac_func in closefrom
 do :
   ac_fn_c_check_func "$LINENO" "closefrom" "ac_cv_func_closefrom"
-if test "x$ac_cv_func_closefrom" = x""yes; then :
+if test "x$ac_cv_func_closefrom" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_CLOSEFROM 1
 _ACEOF
@@ -16108,7 +16978,7 @@ esac
     ac_fn_c_check_decl "$LINENO" "F_CLOSEM" "ac_cv_have_decl_F_CLOSEM" " #include <limits.h>
          #include <fcntl.h>
 "
-if test "x$ac_cv_have_decl_F_CLOSEM" = x""yes; then :
+if test "x$ac_cv_have_decl_F_CLOSEM" = xyes; then :
   $as_echo "#define HAVE_FCNTL_CLOSEM 1" >>confdefs.h
 
 fi
@@ -16121,8 +16991,7 @@ for ac_func in mkstemps mkdtemp
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -16133,8 +17002,7 @@ else
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -16156,8 +17024,7 @@ for ac_func in snprintf vsnprintf asprintf vasprintf
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -16169,18 +17036,18 @@ done
 
 if test X"$ac_cv_type_struct_timespec" != X"no"; then
     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" = x""yes; then :
+if test "x$ac_cv_member_struct_stat_st_mtim" = xyes; then :
   $as_echo "#define HAVE_ST_MTIM 1" >>confdefs.h
 
        ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim.st__tim" "ac_cv_member_struct_stat_st_mtim_st__tim" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_mtim_st__tim" = x""yes; then :
+if test "x$ac_cv_member_struct_stat_st_mtim_st__tim" = xyes; then :
   $as_echo "#define HAVE_ST__TIM 1" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_member "$LINENO" "struct stat" "st_mtimespec" "ac_cv_member_struct_stat_st_mtimespec" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_mtimespec" = x""yes; then :
+if test "x$ac_cv_member_struct_stat_st_mtimespec" = xyes; then :
   $as_echo "#define HAVE_ST_MTIMESPEC 1" >>confdefs.h
 
 fi
@@ -16234,12 +17101,12 @@ esac
 
 fi
 ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket"
-if test "x$ac_cv_func_socket" = x""yes; then :
+if test "x$ac_cv_func_socket" = xyes; then :
 
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
 $as_echo_n "checking for socket in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_socket+set}" = set; then :
+if ${ac_cv_lib_socket_socket+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16273,12 +17140,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
 $as_echo "$ac_cv_lib_socket_socket" >&6; }
-if test "x$ac_cv_lib_socket_socket" = x""yes; then :
+if test "x$ac_cv_lib_socket_socket" = xyes; then :
   NET_LIBS="${NET_LIBS} -lsocket"; LIBS="${LIBS} -lsocket"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -linet" >&5
 $as_echo_n "checking for socket in -linet... " >&6; }
-if test "${ac_cv_lib_inet_socket+set}" = set; then :
+if ${ac_cv_lib_inet_socket+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16312,14 +17179,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_socket" >&5
 $as_echo "$ac_cv_lib_inet_socket" >&6; }
-if test "x$ac_cv_lib_inet_socket" = x""yes; then :
+if test "x$ac_cv_lib_inet_socket" = xyes; then :
   NET_LIBS="${NET_LIBS} -linet"; LIBS="${LIBS} -linet"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to find socket() trying -lsocket -lnsl" >&5
 $as_echo "$as_me: WARNING: unable to find socket() trying -lsocket -lnsl" >&2;}
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
 $as_echo_n "checking for socket in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_socket_lnsl+set}" = set; then :
+if ${ac_cv_lib_socket_socket_lnsl+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16353,7 +17220,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket_lnsl" >&5
 $as_echo "$ac_cv_lib_socket_socket_lnsl" >&6; }
-if test "x$ac_cv_lib_socket_socket_lnsl" = x""yes; then :
+if test "x$ac_cv_lib_socket_socket_lnsl" = xyes; then :
   NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"
 fi
 
 fi
 
 ac_fn_c_check_func "$LINENO" "inet_addr" "ac_cv_func_inet_addr"
-if test "x$ac_cv_func_inet_addr" = x""yes; then :
+if test "x$ac_cv_func_inet_addr" = xyes; then :
 
 else
   ac_fn_c_check_func "$LINENO" "__inet_addr" "ac_cv_func___inet_addr"
-if test "x$ac_cv_func___inet_addr" = x""yes; then :
+if test "x$ac_cv_func___inet_addr" = xyes; then :
 
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_addr in -lnsl" >&5
 $as_echo_n "checking for inet_addr in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_inet_addr+set}" = set; then :
+if ${ac_cv_lib_nsl_inet_addr+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16407,12 +17274,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_inet_addr" >&5
 $as_echo "$ac_cv_lib_nsl_inet_addr" >&6; }
-if test "x$ac_cv_lib_nsl_inet_addr" = x""yes; then :
+if test "x$ac_cv_lib_nsl_inet_addr" = xyes; then :
   NET_LIBS="${NET_LIBS} -lnsl"; LIBS="${LIBS} -lnsl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_addr in -linet" >&5
 $as_echo_n "checking for inet_addr in -linet... " >&6; }
-if test "${ac_cv_lib_inet_inet_addr+set}" = set; then :
+if ${ac_cv_lib_inet_inet_addr+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16446,14 +17313,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_inet_addr" >&5
 $as_echo "$ac_cv_lib_inet_inet_addr" >&6; }
-if test "x$ac_cv_lib_inet_inet_addr" = x""yes; then :
+if test "x$ac_cv_lib_inet_inet_addr" = xyes; then :
   NET_LIBS="${NET_LIBS} -linet"; LIBS="${LIBS} -linet"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to find inet_addr() trying -lsocket -lnsl" >&5
 $as_echo "$as_me: WARNING: unable to find inet_addr() trying -lsocket -lnsl" >&2;}
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_addr in -lsocket" >&5
 $as_echo_n "checking for inet_addr in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_inet_addr_lnsl+set}" = set; then :
+if ${ac_cv_lib_socket_inet_addr_lnsl+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16487,7 +17354,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_inet_addr_lnsl" >&5
 $as_echo "$ac_cv_lib_socket_inet_addr_lnsl" >&6; }
-if test "x$ac_cv_lib_socket_inet_addr_lnsl" = x""yes; then :
+if test "x$ac_cv_lib_socket_inet_addr_lnsl" = xyes; then :
   NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"
 fi
 
 fi
 
 ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog"
-if test "x$ac_cv_func_syslog" = x""yes; then :
+if test "x$ac_cv_func_syslog" = xyes; then :
 
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for syslog in -lsocket" >&5
 $as_echo_n "checking for syslog in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_syslog+set}" = set; then :
+if ${ac_cv_lib_socket_syslog+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16539,12 +17406,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_syslog" >&5
 $as_echo "$ac_cv_lib_socket_syslog" >&6; }
-if test "x$ac_cv_lib_socket_syslog" = x""yes; then :
+if test "x$ac_cv_lib_socket_syslog" = xyes; then :
   NET_LIBS="${NET_LIBS} -lsocket"; LIBS="${LIBS} -lsocket"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for syslog in -lnsl" >&5
 $as_echo_n "checking for syslog in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_syslog+set}" = set; then :
+if ${ac_cv_lib_nsl_syslog+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16578,12 +17445,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_syslog" >&5
 $as_echo "$ac_cv_lib_nsl_syslog" >&6; }
-if test "x$ac_cv_lib_nsl_syslog" = x""yes; then :
+if test "x$ac_cv_lib_nsl_syslog" = xyes; then :
   NET_LIBS="${NET_LIBS} -lnsl"; LIBS="${LIBS} -lnsl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for syslog in -linet" >&5
 $as_echo_n "checking for syslog in -linet... " >&6; }
-if test "${ac_cv_lib_inet_syslog+set}" = set; then :
+if ${ac_cv_lib_inet_syslog+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16617,7 +17484,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_syslog" >&5
 $as_echo "$ac_cv_lib_inet_syslog" >&6; }
-if test "x$ac_cv_lib_inet_syslog" = x""yes; then :
+if test "x$ac_cv_lib_inet_syslog" = xyes; then :
   NET_LIBS="${NET_LIBS} -linet"; LIBS="${LIBS} -linet"
 fi
 
@@ -16630,7 +17497,7 @@ fi
 for ac_func in getprogname
 do :
   ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname"
-if test "x$ac_cv_func_getprogname" = x""yes; then :
+if test "x$ac_cv_func_getprogname" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETPROGNAME 1
 _ACEOF
@@ -16639,7 +17506,7 @@ else
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5
 $as_echo_n "checking for __progname... " >&6; }
-    if test "${sudo_cv___progname+set}" = set; then :
+    if ${sudo_cv___progname+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
 done
 
 
-case ${enable_zlib-"yes"} in
+# gettext() and friends may be located in libc (Linux and Solaris)
+# or in libintl.  However, it is possible to have libintl installed
+# even when gettext() is present in libc.  In the case of GNU libintl,
+# gettext() will be defined to gettext_libintl in libintl.h.
+# Since gcc prefers /usr/local/include to /usr/include, we need to
+# make sure we use the gettext() that matches the include file.
+if test "$enable_nls" != "no"; then
+    if test "$enable_nls" != "yes"; then
+       CPPFLAGS="${CPPFLAGS} -I${enable_nls}/include"
+
+    if test X"$with_rpath" = X"yes"; then
+       case "$host" in
+           *-*-hpux*)  LDFLAGS="${LDFLAGS} -L$enable_nls/lib -Wl,+b,$enable_nls/lib"
+                       ;;
+           *)          LDFLAGS="${LDFLAGS} -L$enable_nls/lib -Wl,-R$enable_nls/lib"
+                       ;;
+       esac
+    else
+       LDFLAGS="${LDFLAGS} -L$enable_nls/lib"
+    fi
+    if test X"$blibpath" != X"" -a "LDFLAGS" = "SUDO_LDFLAGS"; then
+       blibpath_add="${blibpath_add}:$enable_nls/lib"
+    fi
+
+    fi
+    OLIBS="$LIBS"
+    for l in "libc" "-lintl" "-lintl -liconv"; do
+       if test "$l" = "libc"; then
+           # If user specified a dir for libintl ignore libc
+           if test "$enable_nls" != "yes"; then
+               continue
+           fi
+           gettext_name=sudo_cv_gettext
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettext" >&5
+$as_echo_n "checking for gettext... " >&6; }
+       else
+           LIBS="$OLIBS $l"
+           gettext_name=sudo_cv_gettext"`echo $l|sed -e 's/ //g' -e 's/-/_/g'`"
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettext in $l" >&5
+$as_echo_n "checking for gettext in $l... " >&6; }
+       fi
+       if eval \${$gettext_name+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+                       #include <libintl.h>
+int
+main ()
+{
+(void)gettext((char *)0);
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval $gettext_name=yes
+else
+  eval $gettext_name=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+
+       eval gettext_result="\$$gettext_name"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gettext_result" >&5
+$as_echo "$gettext_result" >&6; }
+       test "$gettext_result" = "yes" && break
+    done
+    LIBS="$OLIBS"
+
+    if test "$sudo_cv_gettext" = "yes"; then
+       $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h
+
+       SUDO_NLS=enabled
+    elif test "$sudo_cv_gettext_lintl" = "yes"; then
+       $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h
+
+       SUDO_NLS=enabled
+       LIBINTL="-lintl"
+    elif test "$sudo_cv_gettext_lintl_liconv" = "yes"; then
+       $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h
+
+       SUDO_NLS=enabled
+       LIBINTL="-lintl -liconv"
+    fi
+fi
+
+case "$enable_zlib" in
     yes)
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzdopen in -lz" >&5
 $as_echo_n "checking for gzdopen in -lz... " >&6; }
-if test "${ac_cv_lib_z_gzdopen+set}" = set; then :
+if ${ac_cv_lib_z_gzdopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16719,12 +17679,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzdopen" >&5
 $as_echo "$ac_cv_lib_z_gzdopen" >&6; }
-if test "x$ac_cv_lib_z_gzdopen" = x""yes; then :
+if test "x$ac_cv_lib_z_gzdopen" = xyes; then :
 
            for ac_header in zlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = x""yes; then :
+if test "x$ac_cv_header_zlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_ZLIB_H 1
 _ACEOF
@@ -16786,7 +17746,7 @@ fi
 for ac_func in strsignal
 do :
   ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
-if test "x$ac_cv_func_strsignal" = x""yes; then :
+if test "x$ac_cv_func_strsignal" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STRSIGNAL 1
 _ACEOF
@@ -16805,7 +17765,7 @@ $ac_includes_default
 #include <signal.h>
 
 "
-if test "x$ac_cv_have_decl_sys_siglist" = x""yes; then :
+if test "x$ac_cv_have_decl_sys_siglist" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
@@ -16825,7 +17785,7 @@ $ac_includes_default
 #include <signal.h>
 
 "
-if test "x$ac_cv_have_decl__sys_siglist" = x""yes; then :
+if test "x$ac_cv_have_decl__sys_siglist" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
@@ -16845,7 +17805,7 @@ $ac_includes_default
 #include <signal.h>
 
 "
-if test "x$ac_cv_have_decl___sys_siglist" = x""yes; then :
+if test "x$ac_cv_have_decl___sys_siglist" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
@@ -16901,15 +17861,14 @@ if test -z "${AUTH_EXCL}${AUTH_REG}" -a -n "$AUTH_EXCL_DEF"; then
 fi
 
 if test ${with_pam-"no"} != "no"; then
-    # Note: we already link the main sudo program with -ldl as needed
+    # We already link with -ldl (see LIBDL below) so no need for that here.
     SUDOERS_LIBS="${SUDOERS_LIBS} -lpam"
 
                     for ac_header in security/pam_appl.h pam/pam_appl.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"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -16936,7 +17895,7 @@ $as_echo_n "checking whether to use PAM login... " >&6; }
 $as_echo "yes" >&6; }
                        ;;
            no)         ;;
-           *)          as_fn_error "\"--with-pam-login does not take an argument.\"" "$LINENO" 5
+           *)          as_fn_error $? "\"--with-pam-login does not take an argument.\"" "$LINENO" 5
                        ;;
        esac
 fi
@@ -16966,74 +17925,6 @@ else
 $as_echo "yes" >&6; }
 fi
 
-
-       case $host in
-           *-*-linux*|*-*-solaris*)
-                   # dgettext() may be defined to dgettext_libintl in the
-                   # header file, so first check that it links w/ additional
-                   # libs, then try with -lintl
-                   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <libintl.h>
-int
-main ()
-{
-(void)dgettext((char *)0, (char *)0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  $as_echo "#define HAVE_DGETTEXT 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5
-$as_echo_n "checking for dgettext in -lintl... " >&6; }
-if test "${ac_cv_lib_intl_dgettext+set}" = set; 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 dgettext ();
-int
-main ()
-{
-return dgettext ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_intl_dgettext=yes
-else
-  ac_cv_lib_intl_dgettext=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_dgettext" >&5
-$as_echo "$ac_cv_lib_intl_dgettext" >&6; }
-if test "x$ac_cv_lib_intl_dgettext" = x""yes; then :
-  LIBS="${LIBS} -lintl"
-                       $as_echo "#define HAVE_DGETTEXT 1" >>confdefs.h
-
-fi
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-                   ;;
-       esac
     fi
 fi
 
 
 if test ${with_bsdauth-'no'} != "no"; then
     ac_fn_c_check_header_mongrel "$LINENO" "bsd_auth.h" "ac_cv_header_bsd_auth_h" "$ac_includes_default"
-if test "x$ac_cv_header_bsd_auth_h" = x""yes; then :
+if test "x$ac_cv_header_bsd_auth_h" = xyes; then :
   $as_echo "#define HAVE_BSD_AUTH_H 1" >>confdefs.h
 
        AUTH_OBJS="$AUTH_OBJS bsdauth.lo"
        BSDAUTH_USAGE='[-a auth_type] '
        AUTH_EXCL=BSD_AUTH; BAMAN=1
 else
-  as_fn_error "BSD authentication was specified but bsd_auth.h could not be found" "$LINENO" 5
+  as_fn_error $? "BSD authentication was specified but bsd_auth.h could not be found" "$LINENO" 5
 fi
 
 
@@ -17068,7 +17959,7 @@ if test ${CHECKSIA-'false'} = "true"; then
     for ac_func in sia_ses_init
 do :
   ac_fn_c_check_func "$LINENO" "sia_ses_init" "ac_cv_func_sia_ses_init"
-if test "x$ac_cv_func_sia_ses_init" = x""yes; then :
+if test "x$ac_cv_func_sia_ses_init" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SIA_SES_INIT 1
 _ACEOF
@@ -17138,7 +18029,7 @@ if test ${with_SecurID-'no'} != "no"; then
     #
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SD_Init in -laceclnt" >&5
 $as_echo_n "checking for SD_Init in -laceclnt... " >&6; }
-if test "${ac_cv_lib_aceclnt_SD_Init_______lpthread_______+set}" = set; then :
+if ${ac_cv_lib_aceclnt_SD_Init_______lpthread_______+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17175,7 +18066,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_aceclnt_SD_Init_______lpthread_______" >&5
 $as_echo "$ac_cv_lib_aceclnt_SD_Init_______lpthread_______" >&6; }
-if test "x$ac_cv_lib_aceclnt_SD_Init_______lpthread_______" = x""yes; then :
+if test "x$ac_cv_lib_aceclnt_SD_Init_______lpthread_______" = xyes; then :
 
            AUTH_OBJS="$AUTH_OBJS securid5.lo";
            SUDOERS_LIBS="${SUDOERS_LIBS} -laceclnt -lpthread"
@@ -17228,11 +18119,18 @@ if test ${with_kerb4-'no'} != "no"; then
            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <krb.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   found=yes; break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
        done
        test X"$found" = X"no" && CPPFLAGS="$O_CPPFLAGS"
     else
@@ -17268,7 +18166,7 @@ rm -f conftest.err conftest.$ac_ext
 
        CPPFLAGS="$CPPFLAGS -I${with_kerb4}/include"
        ac_fn_c_check_header_mongrel "$LINENO" "krb.h" "ac_cv_header_krb_h" "$ac_includes_default"
-if test "x$ac_cv_header_krb_h" = x""yes; then :
+if test "x$ac_cv_header_krb_h" = xyes; then :
   found=yes
 else
   found=no
@@ -17283,7 +18181,7 @@ $as_echo "$as_me: WARNING: Unable to locate Kerberos IV include files, you will
 
                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for des_cbc_encrypt in -ldes" >&5
 $as_echo_n "checking for des_cbc_encrypt in -ldes... " >&6; }
-if test "${ac_cv_lib_des_des_cbc_encrypt+set}" = set; then :
+if ${ac_cv_lib_des_des_cbc_encrypt+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17317,13 +18215,13 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_des_des_cbc_encrypt" >&5
 $as_echo "$ac_cv_lib_des_des_cbc_encrypt" >&6; }
-if test "x$ac_cv_lib_des_des_cbc_encrypt" = x""yes; then :
+if test "x$ac_cv_lib_des_des_cbc_encrypt" = xyes; then :
   K4LIBS="-ldes"
 else
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for des_cbc_encrypt in -ldes425" >&5
 $as_echo_n "checking for des_cbc_encrypt in -ldes425... " >&6; }
-if test "${ac_cv_lib_des425_des_cbc_encrypt+set}" = set; then :
+if ${ac_cv_lib_des425_des_cbc_encrypt+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17357,7 +18255,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_des425_des_cbc_encrypt" >&5
 $as_echo "$ac_cv_lib_des425_des_cbc_encrypt" >&6; }
-if test "x$ac_cv_lib_des425_des_cbc_encrypt" = x""yes; then :
+if test "x$ac_cv_lib_des425_des_cbc_encrypt" = xyes; then :
   K4LIBS="-ldes425"
 else
   K4LIBS=""
@@ -17386,7 +18284,7 @@ $as_echo "yes" >&6; }
            K4LIBS="${K4LIBS} -lcom_err"
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lroken" >&5
 $as_echo_n "checking for main in -lroken... " >&6; }
-if test "${ac_cv_lib_roken_main+set}" = set; then :
+if ${ac_cv_lib_roken_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17414,7 +18312,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_roken_main" >&5
 $as_echo "$ac_cv_lib_roken_main" >&6; }
-if test "x$ac_cv_lib_roken_main" = x""yes; then :
+if test "x$ac_cv_lib_roken_main" = xyes; then :
   K4LIBS="${K4LIBS} -lroken"
 fi
 
@@ -17430,7 +18328,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                 as_ac_Lib=`$as_echo "ac_cv_lib_krb_main$K4LIBS" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkrb" >&5
 $as_echo_n "checking for main in -lkrb... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 eval ac_res=\$$as_ac_Lib
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   K4LIBS="-lkrb $K4LIBS"
 else
 
        as_ac_Lib=`$as_echo "ac_cv_lib_krb4_main$K4LIBS" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkrb4" >&5
 $as_echo_n "checking for main in -lkrb4... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17496,8 +18393,7 @@ fi
 eval ac_res=\$$as_ac_Lib
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   K4LIBS="-lkrb4 $K4LIBS"
 else
   K4LIBS="-lkrb $K4LIBS"
@@ -17519,7 +18415,7 @@ if test ${with_kerb5-'no'} != "no"; then
 set dummy krb5-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_KRB5CONFIG+set}" = set; then :
+if ${ac_cv_prog_KRB5CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$KRB5CONFIG"; then
@@ -17598,11 +18494,18 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <krb5.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   found=yes; break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
            done
            if test X"$found" = X"no"; then
                CPPFLAGS="$O_CPPFLAGS"
@@ -17651,7 +18554,7 @@ $as_echo "yes" >&6; }
                SUDOERS_LIBS="${SUDOERS_LIBS} -lkrb5 -lcrypto -ldes -lcom_err -lasn1"
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lroken" >&5
 $as_echo_n "checking for main in -lroken... " >&6; }
-if test "${ac_cv_lib_roken_main+set}" = set; then :
+if ${ac_cv_lib_roken_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17679,7 +18582,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_roken_main" >&5
 $as_echo "$ac_cv_lib_roken_main" >&6; }
-if test "x$ac_cv_lib_roken_main" = x""yes; then :
+if test "x$ac_cv_lib_roken_main" = xyes; then :
   SUDOERS_LIBS="${SUDOERS_LIBS} -lroken"
 fi
 
@@ -17691,7 +18594,7 @@ $as_echo "no" >&6; }
                SUDOERS_LIBS="${SUDOERS_LIBS} -lkrb5 -lk5crypto -lcom_err"
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkrb5support" >&5
 $as_echo_n "checking for main in -lkrb5support... " >&6; }
-if test "${ac_cv_lib_krb5support_main+set}" = set; then :
+if ${ac_cv_lib_krb5support_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17719,7 +18622,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb5support_main" >&5
 $as_echo "$ac_cv_lib_krb5support_main" >&6; }
-if test "x$ac_cv_lib_krb5support_main" = x""yes; then :
+if test "x$ac_cv_lib_krb5support_main" = xyes; then :
   SUDOERS_LIBS="${SUDOERS_LIBS} -lkrb5support"
 fi
 
@@ -17734,8 +18637,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -17746,14 +18648,14 @@ done
     for ac_func in krb5_get_init_creds_opt_alloc
 do :
   ac_fn_c_check_func "$LINENO" "krb5_get_init_creds_opt_alloc" "ac_cv_func_krb5_get_init_creds_opt_alloc"
-if test "x$ac_cv_func_krb5_get_init_creds_opt_alloc" = x""yes; then :
+if test "x$ac_cv_func_krb5_get_init_creds_opt_alloc" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC 1
 _ACEOF
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether krb5_get_init_creds_opt_free takes a context" >&5
 $as_echo_n "checking whether krb5_get_init_creds_opt_free takes a context... " >&6; }
-if test "${sudo_cv_krb5_get_init_creds_opt_free_two_args+set}" = set; then :
+if ${sudo_cv_krb5_get_init_creds_opt_free_two_args+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -17894,7 +18796,7 @@ if test "${with_skey-'no'}" = "yes"; then
 
        ac_fn_c_check_header_compile "$LINENO" "skey.h" "ac_cv_header_skey_h" "#include <stdio.h>
 "
-if test "x$ac_cv_header_skey_h" = x""yes; then :
+if test "x$ac_cv_header_skey_h" = xyes; then :
   found=yes
 else
   found=no
@@ -17908,7 +18810,7 @@ fi
            test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
            ac_fn_c_check_header_compile "$LINENO" "skey.h" "ac_cv_header_skey_h" "#include <stdio.h>
 "
-if test "x$ac_cv_header_skey_h" = x""yes; then :
+if test "x$ac_cv_header_skey_h" = xyes; then :
   found=yes; break
 fi
 
@@ -17955,7 +18857,7 @@ $as_echo "$as_me: WARNING: Unable to locate skey.h, you will have to edit the Ma
     fi
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lskey" >&5
 $as_echo_n "checking for main in -lskey... " >&6; }
-if test "${ac_cv_lib_skey_main+set}" = set; then :
+if ${ac_cv_lib_skey_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -17983,7 +18885,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_skey_main" >&5
 $as_echo "$ac_cv_lib_skey_main" >&6; }
-if test "x$ac_cv_lib_skey_main" = x""yes; then :
+if test "x$ac_cv_lib_skey_main" = xyes; then :
   found=yes
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to locate libskey.a, you will have to edit the Makefile and add -L/path/to/skey/lib to SUDOERS_LDFLAGS" >&5
@@ -17992,7 +18894,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for skeyaccess in -lskey" >&5
 $as_echo_n "checking for skeyaccess in -lskey... " >&6; }
-if test "${ac_cv_lib_skey_skeyaccess+set}" = set; then :
+if ${ac_cv_lib_skey_skeyaccess+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18026,7 +18928,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_skey_skeyaccess" >&5
 $as_echo "$ac_cv_lib_skey_skeyaccess" >&6; }
-if test "x$ac_cv_lib_skey_skeyaccess" = x""yes; then :
+if test "x$ac_cv_lib_skey_skeyaccess" = xyes; then :
   $as_echo "#define HAVE_SKEYACCESS 1" >>confdefs.h
 
 fi
@@ -18105,13 +19007,20 @@ if test "${with_opie-'no'}" = "yes"; then
        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <opie.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   found=yes
 else
   found=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
     else
        found=no
        O_CPPFLAGS="$CPPFLAGS"
@@ -18120,11 +19029,18 @@ rm -f conftest.err conftest.$ac_ext
            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <opie.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   found=yes; break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
        done
        if test "$found" = "no" -o -z "$dir"; then
            CPPFLAGS="$O_CPPFLAGS"
@@ -18167,7 +19083,7 @@ $as_echo "$as_me: WARNING: Unable to locate opie.h, you will have to edit the Ma
     fi
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lopie" >&5
 $as_echo_n "checking for main in -lopie... " >&6; }
-if test "${ac_cv_lib_opie_main+set}" = set; then :
+if ${ac_cv_lib_opie_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18195,7 +19111,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_opie_main" >&5
 $as_echo "$ac_cv_lib_opie_main" >&6; }
-if test "x$ac_cv_lib_opie_main" = x""yes; then :
+if test "x$ac_cv_lib_opie_main" = xyes; then :
   found=yes
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to locate libopie.a, you will have to edit the Makefile and add -L/path/to/opie/lib to SUDOERS_LDFLAGS" >&5
@@ -18212,7 +19128,7 @@ if test ${with_passwd-'no'} != "no"; then
        _LIBS="$LIBS"
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5
 $as_echo_n "checking for library containing crypt... " >&6; }
-if test "${ac_cv_search_crypt+set}" = set; then :
+if ${ac_cv_search_crypt+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -18246,11 +19162,11 @@ for ac_lib in '' crypt crypt_d ufc; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_crypt+set}" = set; then :
+  if ${ac_cv_search_crypt+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_crypt+set}" = set; then :
+if ${ac_cv_search_crypt+:} false; then :
 
 else
   ac_cv_search_crypt=no
@@ -18277,8 +19193,7 @@ fi
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -18294,8 +19209,7 @@ done
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -18320,7 +19234,7 @@ done
     if test "$CHECKSHADOW" = "true"; then
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getspnam" >&5
 $as_echo_n "checking for library containing getspnam... " >&6; }
-if test "${ac_cv_search_getspnam+set}" = set; then :
+if ${ac_cv_search_getspnam+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -18354,11 +19268,11 @@ for ac_lib in '' gen; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_getspnam+set}" = set; then :
+  if ${ac_cv_search_getspnam+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_getspnam+set}" = set; then :
+if ${ac_cv_search_getspnam+:} false; then :
 
 else
   ac_cv_search_getspnam=no
@@ -18379,7 +19293,7 @@ fi
     if test "$CHECKSHADOW" = "true"; then
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getprpwnam" >&5
 $as_echo_n "checking for library containing getprpwnam... " >&6; }
-if test "${ac_cv_search_getprpwnam+set}" = set; then :
+if ${ac_cv_search_getprpwnam+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -18413,11 +19327,11 @@ for ac_lib in '' sec security prot; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_getprpwnam+set}" = set; then :
+  if ${ac_cv_search_getprpwnam+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_getprpwnam+set}" = set; then :
+if ${ac_cv_search_getprpwnam+:} false; then :
 
 else
   ac_cv_search_getprpwnam=no
@@ -18440,8 +19354,7 @@ fi
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -18531,7 +19444,7 @@ $as_echo "$LDAP_LIBS" >&6; }
         OLIBS="$LIBS"
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ber_set_option" >&5
 $as_echo_n "checking for library containing ber_set_option... " >&6; }
-if test "${ac_cv_search_ber_set_option+set}" = set; then :
+if ${ac_cv_search_ber_set_option+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -18565,11 +19478,11 @@ for ac_lib in '' lber; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_ber_set_option+set}" = set; then :
+  if ${ac_cv_search_ber_set_option+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_ber_set_option+set}" = set; then :
+if ${ac_cv_search_ber_set_option+:} false; then :
 
 else
   ac_cv_search_ber_set_option=no
@@ -18621,15 +19534,14 @@ rm -f core conftest.err conftest.$ac_objext \
 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"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
  for ac_func in ldap_sasl_interactive_bind_s
 do :
   ac_fn_c_check_func "$LINENO" "ldap_sasl_interactive_bind_s" "ac_cv_func_ldap_sasl_interactive_bind_s"
-if test "x$ac_cv_func_ldap_sasl_interactive_bind_s" = x""yes; then :
+if test "x$ac_cv_func_ldap_sasl_interactive_bind_s" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LDAP_SASL_INTERACTIVE_BIND_S 1
 _ACEOF
@@ -18648,8 +19560,7 @@ 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 <ldap.h>
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -18662,8 +19573,7 @@ done
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -18675,8 +19585,7 @@ done
 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"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+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
@@ -18688,7 +19597,7 @@ done
     if test X"$check_gss_krb5_ccache_name" = X"yes"; then
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_krb5_ccache_name in -lgssapi" >&5
 $as_echo_n "checking for gss_krb5_ccache_name in -lgssapi... " >&6; }
-if test "${ac_cv_lib_gssapi_gss_krb5_ccache_name+set}" = set; then :
+if ${ac_cv_lib_gssapi_gss_krb5_ccache_name+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18722,14 +19631,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gssapi_gss_krb5_ccache_name" >&5
 $as_echo "$ac_cv_lib_gssapi_gss_krb5_ccache_name" >&6; }
-if test "x$ac_cv_lib_gssapi_gss_krb5_ccache_name" = x""yes; then :
+if test "x$ac_cv_lib_gssapi_gss_krb5_ccache_name" = xyes; then :
   $as_echo "#define HAVE_GSS_KRB5_CCACHE_NAME 1" >>confdefs.h
 
            LDAP_LIBS="${LDAP_LIBS} -lgssapi"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_krb5_ccache_name in -lgssapi_krb5" >&5
 $as_echo_n "checking for gss_krb5_ccache_name in -lgssapi_krb5... " >&6; }
-if test "${ac_cv_lib_gssapi_krb5_gss_krb5_ccache_name+set}" = set; then :
+if ${ac_cv_lib_gssapi_krb5_gss_krb5_ccache_name+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18763,7 +19672,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gssapi_krb5_gss_krb5_ccache_name" >&5
 $as_echo "$ac_cv_lib_gssapi_krb5_gss_krb5_ccache_name" >&6; }
-if test "x$ac_cv_lib_gssapi_krb5_gss_krb5_ccache_name" = x""yes; then :
+if test "x$ac_cv_lib_gssapi_krb5_gss_krb5_ccache_name" = xyes; then :
   $as_echo "#define HAVE_GSS_KRB5_CCACHE_NAME 1" >>confdefs.h
 
                LDAP_LIBS="${LDAP_LIBS} -lgssapi_krb5"
            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <gssapi/gssapi.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   found="gssapi/gssapi.h"; break
@@ -18788,21 +19704,27 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <gssapi.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   found="gssapi.h"; break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
        done
        if test X"$found" != X"no"; then
            for ac_header in $found
 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"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+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
@@ -18815,7 +19737,7 @@ done
                for ac_header in gssapi/gssapi_krb5.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "gssapi/gssapi_krb5.h" "ac_cv_header_gssapi_gssapi_krb5_h" "$ac_includes_default"
-if test "x$ac_cv_header_gssapi_gssapi_krb5_h" = x""yes; then :
+if test "x$ac_cv_header_gssapi_gssapi_krb5_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GSSAPI_GSSAPI_KRB5_H 1
 _ACEOF
@@ -18861,6 +19783,9 @@ esac
 
        ;;
     *)
+       if test X"${ac_cv_func_dlopen}" = X"yes"; then
+           as_fn_error $? "\"dlopen present but libtool doesn't appear to support your platform.\"" "$LINENO" 5
+       fi
        # Preload sudoers module symbols
        SUDO_OBJS="${SUDO_OBJS} preload.o"
        SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la"
@@ -18892,7 +19817,7 @@ case "$host" in
     *-*-hpux*)
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpthread" >&5
 $as_echo_n "checking for main in -lpthread... " >&6; }
-if test "${ac_cv_lib_pthread_main+set}" = set; then :
+if ${ac_cv_lib_pthread_main+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -18920,7 +19845,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_main" >&5
 $as_echo "$ac_cv_lib_pthread_main" >&6; }
-if test "x$ac_cv_lib_pthread_main" = x""yes; then :
+if test "x$ac_cv_lib_pthread_main" = xyes; then :
   SUDO_LIBS="${SUDO_LIBS} -lpthread"
 fi
 
@@ -19040,7 +19965,7 @@ yes|maybe)
     $as_echo "#define WITHOUT_PASSWD 1" >>confdefs.h
 
     if test -z "$AUTH_OBJS"; then
-       as_fn_error "no authentication methods defined." "$LINENO" 5
+       as_fn_error $? "no authentication methods defined." "$LINENO" 5
     fi
     ;;
 esac
@@ -19180,10 +20105,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    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;}
-    cat confcache >$cache_file
+      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;}
@@ -19199,6 +20135,7 @@ 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$//'
@@ -19214,7 +20151,7 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -19315,6 +20252,7 @@ fi
 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
@@ -19360,19 +20298,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# 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.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  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: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -19568,7 +20506,7 @@ $as_echo X"$as_dir" |
       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"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -19621,8 +20559,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by sudo $as_me 1.8.1p2, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+This file was extended by sudo $as_me 1.8.2, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -19687,11 +20625,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-sudo config.status 1.8.1p2
-configured by $0, generated by GNU Autoconf 2.65,
+sudo config.status 1.8.2
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -19707,11 +20645,16 @@ 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
@@ -19733,6 +20676,7 @@ do
     $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;;
@@ -19745,7 +20689,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -19754,7 +20698,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -19835,13 +20779,20 @@ 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"`'
@@ -19856,14 +20807,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de
 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_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"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $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_wl='`$ECHO "$lt_prog_compiler_wl" | $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"`'
@@ -19896,12 +20850,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q
 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"`'
-fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $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"`'
@@ -19956,8 +20910,13 @@ 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 \
@@ -19967,12 +20926,14 @@ lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
 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 \
@@ -19988,7 +20949,6 @@ no_undefined_flag \
 hardcode_libdir_flag_spec \
 hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
-fix_srcfile_path \
 exclude_expsyms \
 include_expsyms \
 file_list_spec \
@@ -20024,6 +20984,7 @@ module_cmds \
 module_expsym_cmds \
 export_symbols_cmds \
 prelink_cmds \
+postlink_cmds \
 postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
@@ -20084,7 +21045,7 @@ do
     "plugins/sudoers/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/sudoers/Makefile" ;;
     "plugins/sudoers/sudoers") CONFIG_FILES="$CONFIG_FILES plugins/sudoers/sudoers" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $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
 }
@@ -20117,12 +21079,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || 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.
@@ -20139,12 +21102,12 @@ if test "x$ac_cr" = x; then
 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'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -20153,18 +21116,18 @@ _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 '$'`
+  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
+    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
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -20172,7 +21135,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -20220,7 +21183,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = "\a"
 
@@ -20252,21 +21215,29 @@ 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 < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+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 $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# 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[        ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[    ]*\):*/\1/
+  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
@@ -20278,7 +21249,7 @@ fi # test -n "$CONFIG_FILES"
 # 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 >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -20290,11 +21261,11 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  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
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -20379,7 +21350,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -20392,7 +21363,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -20411,7 +21382,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) 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 `:'.
@@ -20420,7 +21391,7 @@ do
           [\\/$]*) false;;
           *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
           esac ||
-          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+          as_fn_error "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'"
@@ -20446,8 +21417,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -20572,23 +21543,24 @@ s&@abs_builddir@&$ac_abs_builddir&;t t
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+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' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { 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
+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;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) 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
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -20597,21 +21569,21 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      && 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 "$tmp/config.h" "$ac_file" \
-       || as_fn_error "could not create $ac_file" "$LINENO" 5
+      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 "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
 
@@ -20747,19 +21719,42 @@ 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".
+# 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
 
@@ -20789,6 +21784,12 @@ 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
 
+# 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 in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
 # The name of the directory that contains temporary libtool files.
 objdir=$objdir
 
@@ -20798,6 +21799,9 @@ 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
 
@@ -20912,12 +21916,12 @@ with_gcc=$GCC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
 # 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
 
@@ -21004,9 +22008,6 @@ inherit_rpath=$inherit_rpath
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols
 
@@ -21022,6 +22023,9 @@ 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
 
@@ -21054,210 +22058,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
   # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# 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"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname 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).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-}
-
-
-# func_stripname 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).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
@@ -21272,7 +22235,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -21293,7 +22256,7 @@ if test "$no_create" != yes; then
   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 $?
+  $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
index d180df4a64f3cbbc94dfe856d9e641206344529d..7212ba8717e69bdd552b0e9498dc5f3671c2aae9 100644 (file)
@@ -3,7 +3,7 @@ dnl Process this file with GNU autoconf to produce a configure script.
 dnl
 dnl Copyright (c) 1994-1996,1998-2011 Todd C. Miller <Todd.Miller@courtesan.com>
 dnl
-AC_INIT([sudo], [1.8.1p2], [http://www.sudo.ws/bugs/], [sudo])
+AC_INIT([sudo], [1.8.2], [http://www.sudo.ws/bugs/], [sudo])
 AC_CONFIG_HEADER([config.h pathnames.h])
 dnl
 dnl Note: this must come after AC_INIT
@@ -64,6 +64,8 @@ AC_SUBST([ac_config_libobj_dir])
 AC_SUBST([CONFIGURE_ARGS])
 AC_SUBST([LIBDL])
 AC_SUBST([LT_STATIC])
+AC_SUBST([LIBINTL])
+AC_SUBST([SUDO_NLS])
 dnl
 dnl Variables that get substituted in docs (not overridden by environment)
 dnl
@@ -161,6 +163,7 @@ LDAP="#"
 BAMAN=0
 LCMAN=0
 SEMAN=0
+LIBINTL=
 ZLIB=
 ZLIB_SRC=
 AUTH_OBJS=
@@ -168,6 +171,7 @@ AUTH_REG=
 AUTH_EXCL=
 AUTH_EXCL_DEF=
 AUTH_DEF=passwd
+SUDO_NLS=disabled
 
 dnl
 dnl Other vaiables
@@ -1264,7 +1268,7 @@ AC_ARG_ENABLE(env_debug,
 
 AC_ARG_ENABLE(zlib,
 [AS_HELP_STRING([--enable-zlib[[=PATH]]], [Whether to enable or disable zlib])],
-[])
+[], [enable_zlib=yes])
 
 AC_MSG_CHECKING(whether to enable environment resetting by default)
 AC_ARG_ENABLE(env_reset,
@@ -1311,6 +1315,10 @@ AC_ARG_ENABLE(admin-flag,
   esac
 ])
 
+AC_ARG_ENABLE(nls,
+[AS_HELP_STRING([--disable-nls], [Disable natural language support using gettext])],
+[], [enable_nls=yes])
+
 AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux], [enable SELinux support])],
 [case $with_selinux in
     yes)       SELINUX_USAGE="[[-r role]] [[-t type]] "
@@ -1399,7 +1407,30 @@ dnl
 AC_CHECK_PROG(UNAMEPROG, [uname], [uname])
 AC_CHECK_PROG(TRPROG, [tr], [tr])
 AC_CHECK_PROGS(NROFFPROG, [nroff mandoc])
-if test -z "$NROFFPROG"; then
+if test -n "$NROFFPROG"; then
+    AC_CACHE_CHECK([whether $NROFFPROG supports the -c option],
+       [sudo_cv_var_nroff_opt_c],
+       [if $NROFFPROG -c </dev/null >/dev/null 2>&1; then
+           sudo_cv_var_nroff_opt_c=yes
+       else
+           sudo_cv_var_nroff_opt_c=no
+       fi]
+    )
+    if test "$sudo_cv_var_nroff_opt_c" = "yes"; then
+       NROFFPROG="$NROFFPROG -c"
+    fi
+    AC_CACHE_CHECK([whether $NROFFPROG supports the -Tascii option],
+       [sudo_cv_var_nroff_opt_Tascii],
+       [if $NROFFPROG -Tascii </dev/null >/dev/null 2>&1; then
+           sudo_cv_var_nroff_opt_Tascii=yes
+       else
+           sudo_cv_var_nroff_opt_Tascii=no
+       fi]
+    if test "$sudo_cv_var_nroff_opt_Tascii" = "yes"; then
+       NROFFPROG="$NROFFPROG -Tascii"
+    fi
+    )
+else
     MANTYPE="cat"
     mansrcdir='$(srcdir)'
 fi
@@ -1497,6 +1528,14 @@ case "$host" in
                    with_netsvc="/etc/netsvc.conf"
                fi
 
+               # For implementing getgrouplist()
+               AC_CHECK_FUNCS(getgrset)
+
+               # LDR_PRELOAD is supported in AIX 5.3 and later
+               case "$OSREV" in
+                   [1-4].*) with_noexec=no ;;
+               esac
+
                # AIX-specific functions
                AC_CHECK_FUNCS(getuserattr setauthdb)
                COMMON_OBJS="$COMMON_OBJS aix.lo"
@@ -1513,13 +1552,32 @@ case "$host" in
                : ${mansectsu='1m'}
                : ${mansectform='4'}
 
+               # The HP bundled compiler cannot generate shared libs
                if test -z "$GCC"; then
-                   # Use the +DAportable flag on hppa if it is supported
-                   case "$host_cpu" in
-                   hppa*)
+                   AC_CACHE_CHECK([for HP bundled C compiler],
+                       [sudo_cv_var_hpccbundled],
+                       [if $CC -V 2>&1 | grep '^(Bundled)' >/dev/null 2>&1; then
+                           sudo_cv_var_hpccbundled=yes
+                       else
+                           sudo_cv_var_hpccbundled=no
+                       fi]
+                   )
+                   if test "$sudo_cv_var_hpccbundled" = "yes"; then
+                       AC_MSG_ERROR([The HP bundled C compiler is unable to build Sudo, you must use gcc or the HP ANSI C compiler instead.])
+                   fi
+               fi
+
+               # Build PA-RISC1.1 objects for better portability
+               case "$host_cpu" in
+                   hppa[2-9]*)
                        _CFLAGS="$CFLAGS"
-                       CFLAGS="$CFLAGS +DAportable"
-                       AC_CACHE_CHECK([whether $CC understands +DAportable],
+                       if test -n "$GCC"; then
+                           portable_flag="-march=1.1"
+                       else
+                           portable_flag="+DAportable"
+                       fi
+                       CFLAGS="$CFLAGS $portable_flag"
+                       AC_CACHE_CHECK([whether $CC understands $portable_flag],
                            [sudo_cv_var_daportable],
                            [AC_LINK_IFELSE(
                                [AC_LANG_PROGRAM([[]], [[]])],
@@ -1532,8 +1590,7 @@ case "$host" in
                            CFLAGS="$_CFLAGS"
                        fi
                        ;;
-                   esac
-               fi
+               esac
 
                case "$host" in
                        *-*-hpux[1-8].*)
@@ -1863,7 +1920,21 @@ AC_PROG_GCC_TRADITIONAL
 AC_C_CONST
 AC_C_VOLATILE
 if test X"$with_gnu_ld" != "yes" -a -n "$GCC"; then
-    LTLDFLAGS="$LTLDFLAGS -Wc,-static-libgcc"
+    _CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -static-libgcc"
+    AC_CACHE_CHECK([whether $CC understands -static-libgcc],
+       [sudo_cv_var_gcc_static_libgcc],
+       [AC_LINK_IFELSE(
+           [AC_LANG_PROGRAM([[]], [[]])],
+               [sudo_cv_var_gcc_static_libgcc=yes],
+               [sudo_cv_var_gcc_static_libgcc=no]
+           )
+       ]
+    )
+    CFLAGS="$_CFLAGS"
+    if test "$sudo_cv_var_gcc_static_libgcc" = "yes"; then
+       LTLDFLAGS="$LTLDFLAGS -Wc,-static-libgcc"
+    fi
 fi
 dnl
 dnl Program checks
@@ -1929,8 +2000,12 @@ if test ${with_logincap-'no'} != "no"; then
     ])
 fi
 if test ${with_project-'no'} != "no"; then
-    AC_CHECK_HEADER(project.h, AC_DEFINE(HAVE_PROJECT_H)
-       [SUDO_LIBS="${SUDO_LIBS} -lproject"], -)
+    AC_CHECK_HEADER(project.h, [
+       AC_CHECK_LIB(project, setproject, [
+           AC_DEFINE(HAVE_PROJECT_H)
+           SUDO_LIBS="${SUDO_LIBS} -lproject"
+       ])
+    ], [])
 fi
 dnl
 dnl typedef checks
@@ -2005,9 +2080,10 @@ dnl
 dnl Function checks
 dnl
 AC_FUNC_GETGROUPS
-AC_CHECK_FUNCS(strrchr sysconf tzset strftime initgroups getgroups fstat \
+AC_CHECK_FUNCS(strrchr sysconf tzset strftime fstat \
               regcomp setlocale nl_langinfo getaddrinfo mbr_check_membership \
               setrlimit64 sysctl)
+AC_REPLACE_FUNCS(getgrouplist)
 AC_CHECK_FUNCS(getline, [], [
     AC_LIBOBJ(getline)
     AC_CHECK_FUNCS(fgetln)
@@ -2130,11 +2206,63 @@ AC_CHECK_FUNCS(getprogname, , [
     AC_MSG_RESULT($sudo_cv___progname)
 ])
 
+# gettext() and friends may be located in libc (Linux and Solaris)
+# or in libintl.  However, it is possible to have libintl installed
+# even when gettext() is present in libc.  In the case of GNU libintl,
+# gettext() will be defined to gettext_libintl in libintl.h.
+# Since gcc prefers /usr/local/include to /usr/include, we need to
+# make sure we use the gettext() that matches the include file.
+if test "$enable_nls" != "no"; then
+    if test "$enable_nls" != "yes"; then
+       CPPFLAGS="${CPPFLAGS} -I${enable_nls}/include"
+       SUDO_APPEND_LIBPATH(LDFLAGS, [$enable_nls/lib])
+    fi
+    OLIBS="$LIBS"
+    for l in "libc" "-lintl" "-lintl -liconv"; do
+       if test "$l" = "libc"; then
+           # If user specified a dir for libintl ignore libc
+           if test "$enable_nls" != "yes"; then
+               continue
+           fi
+           gettext_name=sudo_cv_gettext
+           AC_MSG_CHECKING([for gettext])
+       else
+           LIBS="$OLIBS $l"
+           gettext_name=sudo_cv_gettext"`echo $l|sed -e 's/ //g' -e 's/-/_/g'`"
+           AC_MSG_CHECKING([for gettext in $l])
+       fi
+       AC_CACHE_VAL($gettext_name, [
+               AC_LINK_IFELSE(
+                   [
+                       AC_LANG_PROGRAM([[#include <libintl.h>]], [(void)gettext((char *)0);])
+                   ], [eval $gettext_name=yes], [eval $gettext_name=no]
+               )
+       ])
+       eval gettext_result="\$$gettext_name"
+       AC_MSG_RESULT($gettext_result)
+       test "$gettext_result" = "yes" && break
+    done
+    LIBS="$OLIBS"
+
+    if test "$sudo_cv_gettext" = "yes"; then
+       AC_DEFINE(HAVE_LIBINTL_H)
+       SUDO_NLS=enabled
+    elif test "$sudo_cv_gettext_lintl" = "yes"; then
+       AC_DEFINE(HAVE_LIBINTL_H)
+       SUDO_NLS=enabled
+       LIBINTL="-lintl"
+    elif test "$sudo_cv_gettext_lintl_liconv" = "yes"; then
+       AC_DEFINE(HAVE_LIBINTL_H)
+       SUDO_NLS=enabled
+       LIBINTL="-lintl -liconv"
+    fi
+fi
+
 dnl
 dnl Deferred zlib option processing.
 dnl By default we use the system zlib if it is present.
 dnl
-case ${enable_zlib-"yes"} in
+case "$enable_zlib" in
     yes)
        AC_CHECK_LIB(z, gzdopen, [
            AC_CHECK_HEADERS(zlib.h, [ZLIB="-lz"], [enable_zlib=builtin])
@@ -2219,7 +2347,7 @@ dnl PAM support.  Systems that use PAM by default set with_pam=default
 dnl and we do the actual tests here.
 dnl
 if test ${with_pam-"no"} != "no"; then
-    # Note: we already link the main sudo program with -ldl as needed
+    # We already link with -ldl (see LIBDL below) so no need for that here.
     SUDOERS_LIBS="${SUDOERS_LIBS} -lpam"
 
     dnl
@@ -2256,19 +2384,6 @@ if test ${with_pam-"no"} != "no"; then
                            AC_MSG_WARN([Ignoring unknown argument to --enable-pam-session: $enableval])
                            ;;
            esac], AC_MSG_RESULT(yes))
-
-       case $host in
-           *-*-linux*|*-*-solaris*)
-                   # dgettext() may be defined to dgettext_libintl in the
-                   # header file, so first check that it links w/ additional
-                   # libs, then try with -lintl
-                   AC_LINK_IFELSE([AC_LANG_PROGRAM(
-                   [[#include <libintl.h>]], [(void)dgettext((char *)0, (char *)0);])],
-                   [AC_DEFINE(HAVE_DGETTEXT)],
-                   [AC_CHECK_LIB(intl, dgettext, [LIBS="${LIBS} -lintl"]
-                       [AC_DEFINE(HAVE_DGETTEXT)])])
-                   ;;
-       esac
     fi
 fi
 
@@ -2388,7 +2503,7 @@ if test ${with_kerb4-'no'} != "no"; then
        O_CPPFLAGS="$CPPFLAGS"
        for dir in "" "kerberosIV/" "krb4/" "kerberos4/" "kerberosv4/"; do
            CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
-           AC_PREPROC_IFELSE([#include <krb.h>], [found=yes; break])
+           AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <krb.h>]])], [found=yes; break])
        done
        test X"$found" = X"no" && CPPFLAGS="$O_CPPFLAGS"
     else
@@ -2465,7 +2580,7 @@ if test ${with_kerb5-'no'} != "no"; then
            O_CPPFLAGS="$CPPFLAGS"
            for dir in "" "kerberosV/" "krb5/" "kerberos5/" "kerberosv5/"; do
                CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
-               AC_PREPROC_IFELSE([#include <krb5.h>], [found=yes; break])
+               AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]])], [found=yes; break])
            done
            if test X"$found" = X"no"; then
                CPPFLAGS="$O_CPPFLAGS"
@@ -2633,13 +2748,13 @@ if test "${with_opie-'no'}" = "yes"; then
        CPPFLAGS="${CPPFLAGS} -I${with_opie}/include"
        SUDO_APPEND_LIBPATH(LDFLAGS, [${with_opie}/lib])
        SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_opie}/lib])
-       AC_PREPROC_IFELSE([#include <opie.h>], [found=yes], [found=no])
+       AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <opie.h>]])], [found=yes], [found=no])
     else
        found=no
        O_CPPFLAGS="$CPPFLAGS"
        for dir in "" "/usr/local" "/usr/contrib"; do
            test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
-           AC_PREPROC_IFELSE([#include <opie.h>], [found=yes; break])
+           AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <opie.h>]])], [found=yes; break])
        done
        if test "$found" = "no" -o -z "$dir"; then
            CPPFLAGS="$O_CPPFLAGS"
@@ -2773,7 +2888,7 @@ if test ${with_ldap-'no'} != "no"; then
        O_CPPFLAGS="$CPPFLAGS"
        for dir in "" "kerberosV" "krb5" "kerberos5" "kerberosv5"; do
            test X"$dir" != X"" && CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
-           AC_PREPROC_IFELSE([#include <gssapi/gssapi.h>], [found="gssapi/gssapi.h"; break], [AC_PREPROC_IFELSE([#include <gssapi.h>], [found="gssapi.h"; break])])
+           AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <gssapi/gssapi.h>]])], [found="gssapi/gssapi.h"; break], [AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <gssapi.h>]])], [found="gssapi.h"; break])])
        done
        if test X"$found" != X"no"; then
            AC_CHECK_HEADERS([$found])
@@ -2808,6 +2923,9 @@ case "$lt_cv_dlopen" in
        AC_LIBOBJ(dlopen)
        ;;
     *)
+       if test X"${ac_cv_func_dlopen}" = X"yes"; then
+           AC_MSG_ERROR(["dlopen present but libtool doesn't appear to support your platform."])
+       fi
        # Preload sudoers module symbols
        SUDO_OBJS="${SUDO_OBJS} preload.o"
        SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la"
@@ -2981,7 +3099,6 @@ AH_TEMPLATE(HAVE_BSM_AUDIT, [Define to 1 to enable BSM audit support.])
 AH_TEMPLATE(HAVE_DCE, [Define to 1 if you use OSF DCE.])
 AH_TEMPLATE(HAVE_DD_FD, [Define to 1 if your `DIR' contains dd_fd.])
 AH_TEMPLATE(HAVE_DIRFD, [Define to 1 if you have the `dirfd' function or macro.])
-AH_TEMPLATE(HAVE_DGETTEXT, [Define to 1 if you have the `dgettext' function.])
 AH_TEMPLATE(HAVE_DISPCRYPT, [Define to 1 if you have the `dispcrypt' function.])
 AH_TEMPLATE(HAVE_DLOPEN, [Define to 1 if you have the `dlopen' function.])
 AH_TEMPLATE(HAVE_EXTENDED_GLOB, [Define to 1 if your glob.h defines the GLOB_BRACE and GLOB_TILDE flags.])
@@ -3006,6 +3123,7 @@ AH_TEMPLATE(HAVE_KRB5_INIT_SECURE_CONTEXT, [Define to 1 if you have the `krb5_in
 AH_TEMPLATE(HAVE_KRB5_VERIFY_USER, [Define to 1 if you have the `krb5_verify_user' function.])
 AH_TEMPLATE(HAVE_LBER_H, [Define to 1 if your LDAP needs <lber.h>. (OpenLDAP does not)])
 AH_TEMPLATE(HAVE_LDAP, [Define to 1 if you use LDAP for sudoers.])
+AH_TEMPLATE(HAVE_LIBINTL_H, [Define to 1 if you have the <libintl.h> header file.])
 AH_TEMPLATE(HAVE_LINUX_AUDIT, [Define to 1 to enable Linux audit support.])
 AH_TEMPLATE(HAVE_OPIE, [Define to 1 if you use NRL OPIE.])
 AH_TEMPLATE(HAVE_PAM, [Define to 1 if you use PAM authentication.])
@@ -3099,7 +3217,7 @@ AH_BOTTOM([/*
 #undef ISSET
 #define ISSET(t, f)     ((t) & (f))
 
-/* New ANSI-style OS defs for HP-UX and ConvexOS. */
+/* ANSI-style OS defs for HP-UX and ConvexOS. */
 #if defined(hpux) && !defined(__hpux)
 # define __hpux                1
 #endif /* hpux */
diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS
new file mode 100644 (file)
index 0000000..4608cfc
--- /dev/null
@@ -0,0 +1,133 @@
+The following list of people, sorted by last name, have contributed
+code or patches to this implementation of sudo since I began
+maintaining it in 1993.  This list is known to be incomplete--if
+you believe you should be listed, please send a note to sudo@sudo.ws.
+
+    Matt Ackeret
+    Nick Andrew
+    Dimitry Andric
+    Danny Barron
+    Tom Bates
+    Ray Bellis
+    Elias Benali
+    Jamie Beverly
+    Spider Boardman
+    Keith Garry Boyce
+    P.J. Bostley
+    Michael Brantley
+    Rob Braun
+    Piete Brooks
+    Jerry Brown
+    Andreas Bussjaeger
+    Gary Calvin
+    Aaron Campbell
+    Chris Coleman
+    Deven T. Corzine
+    Frank Cusack
+    Theo de Raadt
+    David Dill
+    Theo Van Dinter
+    Jeff Earickson
+    Drew Eckhardt
+    Ben Edgington
+    Marc Esipovich
+    Marc Espie
+    Ariel Faigon
+    Brian Farrell
+    Steve Fobes
+    Simon J. Gerraty
+    B. Guillory
+    Randy M. Hayman
+    Joachim Henke
+    YOSHIFUJI Hideaki
+    Dave Hieb
+    Nick Holloway
+    Adam Hoover
+    Michael T. Hunter
+    Eric Irrgang
+    Brian Jackson
+    Richard L. Jackson Jr
+    John R. Jackson
+    Mark Janssen
+    Chris Jepeway
+    Timo Juhani
+    Ayamura KIKUCHI
+    Kevin Kadow
+    Stepan Kasal
+    Mike Kienenberger
+    Dale King
+    Jim Knoble
+    Tim Knox
+    Alek O. Komarnitsky
+    Daniel Kopecek
+    Paul Kranenburg
+    David Krause
+    Case Larsen
+    Dmitry V. Levin
+    Kendall Libby
+    Phillip E. Lobbes
+    David J. MacKenzie
+    Jeff Makey
+    Michael D. Marchionna
+    Paul Markham
+    Emin Martinian
+    Jason McIntyre
+    Tom McLaughlin
+    Michael Meskes
+    Todd C. Miller
+    Loic Minier
+    Jan Thomas Moldung
+    Charles Morris
+    Andreas Mueller
+    Dworkin Muller
+    Jeff Nieusma
+    Peter A. Nikitser
+    Ludwig Nussel
+    Eric Paquet
+    Chantal Paradis
+    Ted Percival
+    Christian S.J. Peron
+    Alexander Peslyak
+    Toby Peterson
+    Diego Elio Petteno
+    Alex Plotnick
+    Gudleik Rasch
+    Matt Richards
+    John P. Rouillard
+    Alain Roy
+    Elan Ruusamae
+    Eygene Ryabinkin
+    Yuichi SATO
+    Wilfredo Sanchez
+    Jean-Francois Saucier
+    Patrick Schoenfeld
+    Dougal Scott
+    Nick Sieger
+    Thor Lancelot Simon
+    Marc Slemko
+    Andy Smith
+    Igor Sobrado
+    Aaron Spangler
+    Cloyce D. Spradling
+    Matthew Stier
+    Tobias Stoeckmann
+    Russell Street
+    Tilo Stritzky
+    Michael Stroucken
+    Robert Tarrall
+    Matthew Thomas
+    Giles Todd
+    Martin Toft
+    Darren Tucker
+    Robert Uhl
+    Petr Uzel
+    Reznic Valery
+    Martynas Venckus
+    Klaus Wagner
+    Dan Walsh
+    John Warburton
+    Kirk Webb
+    Timm Wetzel
+    Marco van Wieringen
+    David Wood
+
index 414d8c070095967da61b2f3484848a6a5e8191a6..eadb05c15bcead6dcce75d0eb53af62a59115863 100644 (file)
@@ -25,7 +25,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 # Tools to use
-NROFF = @NROFFPROG@ -Tascii
+NROFF = @NROFFPROG@
 
 # Our install program supports extra flags...
 INSTALL = $(SHELL) $(top_srcdir)/install-sh -c
@@ -61,11 +61,12 @@ DOCS =      sudo.man visudo.man sudoers.man sudoers.ldap.man sudoers.man \
 @DEV@          $(srcdir)/sudoers.man.in $(srcdir)/sudoers.cat \
 @DEV@          $(srcdir)/sudoreplay.man.in $(srcdir)/sudoreplay.cat \
 @DEV@          $(srcdir)/sudo_plugin.man.in $(srcdir)/sudo_plugin.cat \
-@DEV@          $(srcdir)/HISTORY $(srcdir)/LICENSE
+@DEV@          $(srcdir)/HISTORY $(srcdir)/LICENSE $(srcdir)/CONTRIBUTORS
 
 OTHER_DOCS= $(top_srcdir)/ChangeLog $(top_srcdir)/README \
-           $(top_srcdir)/NEWS $(srcdir)/HISTORY $(srcdir)/LICENSE \
-           $(srcdir)/TROUBLESHOOTING $(srcdir)/UPGRADE $(srcdir)/sample.*
+           $(top_srcdir)/NEWS $(srcdir)/HISTORY $(srcdir)/CONTRIBUTORS \
+           $(srcdir)/LICENSE $(srcdir)/TROUBLESHOOTING $(srcdir)/UPGRADE \
+           $(srcdir)/sample.*
 
 OTHER_DOCS_LDAP= $(top_srcdir)/README.LDAP $(srcdir)/schema.*
 
@@ -136,11 +137,14 @@ sudo_plugin.man: $(srcdir)/sudo_plugin.man.in
 @DEV@$(srcdir)/sudo_plugin.cat: varsub $(srcdir)/sudo_plugin.man.in
 @DEV@  sed -f varsub $(srcdir)/sudo_plugin.man.in | $(NROFF) -man > $@
 
+CONTRIBUTORS: $(srcdir)/contributors.pod
+       pod2text -l -i0 $(srcdir)/contributors.pod | sed '1,3d' > $@
+
 HISTORY: $(srcdir)/history.pod
        pod2text -l -i0 $(srcdir)/history.pod > $@
 
 LICENSE: $(srcdir)/license.pod
-       pod2text -l -i0 $(srcdir)/license.pod | sed '1,2d' > $@
+       pod2text -l -i0 $(srcdir)/license.pod | sed '1,3d' > $@
 
 pre-install:
 
index 35ca9a5e53228c140685e2223a5a2f740e045d3c..9ecab1227de552c856fff1a1adb25e7cb4932e2f 100644 (file)
@@ -1,6 +1,30 @@
 Notes on upgrading from an older release
 ========================================
 
+o Upgrading from a version prior to 1.8.2:
+
+    When matching Unix groups in the sudoers file, sudo will now
+    match based on the name of the group as it appears in sudoers
+    instead of the group ID.  This can substantially reduce the
+    number of group lookups for sudoers files that contain a large
+    nummber of groups.  There are a few side effects of this change.
+
+    1) Unix groups with different names but the same group ID are
+       can no longer be used interchangably.  Sudo will look up all
+       of a user's groups by group ID and use the resulting group
+       names when matching sudoers entries.  If there are multiple
+       groups with the same ID, the group name returned by the
+       system getgrgid() library function is the name that will be
+       used when matching sudoers entries.
+
+    2) Unix group names specified in the sudoers file that are
+       longer than the system maximum will no longer match.  For
+       instance, if there is a Unix group "fireflie" on a system
+       where group names are limited to eight characters, "%fireflies"
+       in sudoers will no longer match "fireflie".  Previously, a
+       lookup by name of the group "fireflies" would have matched
+       the "fireflie" group on most systems.
+
 o Upgrading from a version prior to 1.8.1:
 
     Changes in the sudoers parser could result in parse errors for
diff --git a/doc/contributors.pod b/doc/contributors.pod
new file mode 100644 (file)
index 0000000..0218d4b
--- /dev/null
@@ -0,0 +1,135 @@
+=head1 Sudo Contributors
+
+=head4
+The following list of people, sorted by last name, have contributed
+code or patches to this implementation of sudo since I began
+maintaining it in 1993.  This list is known to be incomplete--if
+you believe you should be listed, please send a note to sudo@sudo.ws.
+
+    Matt Ackeret
+    Nick Andrew
+    Dimitry Andric
+    Danny Barron
+    Tom Bates
+    Ray Bellis
+    Elias Benali
+    Jamie Beverly
+    Spider Boardman
+    Keith Garry Boyce
+    P.J. Bostley
+    Michael Brantley
+    Rob Braun
+    Piete Brooks
+    Jerry Brown
+    Andreas Bussjaeger
+    Gary Calvin
+    Aaron Campbell
+    Chris Coleman
+    Deven T. Corzine
+    Frank Cusack
+    Theo de Raadt
+    David Dill
+    Theo Van Dinter
+    Jeff Earickson
+    Drew Eckhardt
+    Ben Edgington
+    Marc Esipovich
+    Marc Espie
+    Ariel Faigon
+    Brian Farrell
+    Steve Fobes
+    Simon J. Gerraty
+    B. Guillory
+    Randy M. Hayman
+    Joachim Henke
+    YOSHIFUJI Hideaki
+    Dave Hieb
+    Nick Holloway
+    Adam Hoover
+    Michael T. Hunter
+    Eric Irrgang
+    Brian Jackson
+    Richard L. Jackson Jr
+    John R. Jackson
+    Mark Janssen
+    Chris Jepeway
+    Timo Juhani
+    Ayamura KIKUCHI
+    Kevin Kadow
+    Stepan Kasal
+    Mike Kienenberger
+    Dale King
+    Jim Knoble
+    Tim Knox
+    Alek O. Komarnitsky
+    Daniel Kopecek
+    Paul Kranenburg
+    David Krause
+    Case Larsen
+    Dmitry V. Levin
+    Kendall Libby
+    Phillip E. Lobbes
+    David J. MacKenzie
+    Jeff Makey
+    Michael D. Marchionna
+    Paul Markham
+    Emin Martinian
+    Jason McIntyre
+    Tom McLaughlin
+    Michael Meskes
+    Todd C. Miller
+    Loic Minier
+    Jan Thomas Moldung
+    Charles Morris
+    Andreas Mueller
+    Dworkin Muller
+    Jeff Nieusma
+    Peter A. Nikitser
+    Ludwig Nussel
+    Eric Paquet
+    Chantal Paradis
+    Ted Percival
+    Christian S.J. Peron
+    Alexander Peslyak
+    Toby Peterson
+    Diego Elio Petteno
+    Alex Plotnick
+    Gudleik Rasch
+    Matt Richards
+    John P. Rouillard
+    Alain Roy
+    Elan Ruusamae
+    Eygene Ryabinkin
+    Yuichi SATO
+    Wilfredo Sanchez
+    Jean-Francois Saucier
+    Patrick Schoenfeld
+    Dougal Scott
+    Nick Sieger
+    Thor Lancelot Simon
+    Marc Slemko
+    Andy Smith
+    Igor Sobrado
+    Aaron Spangler
+    Cloyce D. Spradling
+    Matthew Stier
+    Tobias Stoeckmann
+    Russell Street
+    Tilo Stritzky
+    Michael Stroucken
+    Robert Tarrall
+    Matthew Thomas
+    Giles Todd
+    Martin Toft
+    Darren Tucker
+    Robert Uhl
+    Petr Uzel
+    Reznic Valery
+    Martynas Venckus
+    Klaus Wagner
+    Dan Walsh
+    John Warburton
+    Kirk Webb
+    Timm Wetzel
+    Marco van Wieringen
+    David Wood
index 5786e385a60b92939d0bf30218b0c2dba6c98b01..c3c23a9769bc71dd7d841cdfd48e7da6899a50e3 100644 (file)
@@ -3,7 +3,7 @@
 =head3
 Sudo is distributed under the following ISC-style license:
 
-   Copyright (c) 1994-1996, 1998-2010
+   Copyright (c) 1994-1996, 1998-2011
        Todd C. Miller <Todd.Miller@courtesan.com>
 
    Permission to use, copy, modify, and distribute this software for any
index 08e1ac8deb9297afa260fd64b42396f64fb64671..30a6aca982c81736d8fcf30b1d74a8c8994e0a4c 100644 (file)
@@ -114,7 +114,7 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
                    _\bl_\be_\bv_\be_\bl may be a value from 1 through 9.
 
        -E          The -\b-E\bE (_\bp_\br_\be_\bs_\be_\br_\bv_\be _\be_\bn_\bv_\bi_\br_\bo_\bn_\bm_\be_\bn_\bt) option indicates to the
-                   security policy that the uses wishes to preserve their
+                   security policy that the user wishes to preserve their
                    existing environment variables.  The security policy may
                    return an error if the -\b-E\bE option is specified and the user
                    does not have permission to preserve the environment.
@@ -177,7 +177,10 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
                    to change to that user's home directory before running the
                    shell.  The security policy shall initialize the
                    environment to a minimal set of variables, similar to what
-                   is present when a user logs in.
+                   is present when a user logs in.  The _\bC_\bo_\bm_\bm_\ba_\bn_\bd _\bE_\bn_\bv_\bi_\br_\bo_\bn_\bm_\be_\bn_\bt
+                   section in the _\bs_\bu_\bd_\bo_\be_\br_\bs(4) manual documents how the -\b-i\bi
+                   option affects the environment in which a command is run
+                   when the _\bs_\bu_\bd_\bo_\be_\br_\bs policy is in use.
 
        -K          The -\b-K\bK (sure _\bk_\bi_\bl_\bl) option is like -\b-k\bk except that it removes
                    the user's cached credentials entirely and may not be used
@@ -544,4 +547,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.8.1p2                          May 16, 2011                         SUDO(1m)
+1.8.2                           August 17, 2011                       SUDO(1m)
index 1d5ca058c275a65d811a820d6482779abb524700..435e305ca8e1d092477c5cc44aa530e3c3b5e3fb 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "SUDO @mansectsu@"
-.TH SUDO @mansectsu@ "May 16, 2011" "1.8.1p2" "MAINTENANCE COMMANDS"
+.TH SUDO @mansectsu@ "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -295,7 +295,7 @@ may be a value from 1 through 9.
 .IP "\-E" 12
 .IX Item "-E"
 The \fB\-E\fR (\fIpreserve\fR \fIenvironment\fR) option indicates to the
-security policy that the uses wishes to preserve their existing
+security policy that the user wishes to preserve their existing
 environment variables.  The security policy may return an error if
 the \fB\-E\fR option is specified and the user does not have permission
 to preserve the environment.
@@ -361,7 +361,10 @@ If no command is specified, an interactive shell is executed.
 \&\fBsudo\fR attempts to change to that user's home directory before
 running the shell.  The security policy shall initialize the
 environment to a minimal set of variables, similar to what is present
-when a user logs in.
+when a user logs in.  The \fICommand Environment\fR section in the
+\&\fIsudoers\fR\|(@mansectform@) manual documents how the \fB\-i\fR option affects the
+environment in which a command is run when the \fIsudoers\fR policy
+is in use.
 .IP "\-K" 12
 .IX Item "-K"
 The \fB\-K\fR (sure \fIkill\fR) option is like \fB\-k\fR except that it removes
index cdc5832a2b1d841a830c14faa3a6d78af3a839b9..092146046983b0fc07c9090067111f7740d363be 100644 (file)
@@ -166,7 +166,7 @@ may be a value from 1 through 9.
 =item -E
 
 The B<-E> (I<preserve> I<environment>) option indicates to the
-security policy that the uses wishes to preserve their existing
+security policy that the user wishes to preserve their existing
 environment variables.  The security policy may return an error if
 the B<-E> option is specified and the user does not have permission
 to preserve the environment.
@@ -243,7 +243,10 @@ If no command is specified, an interactive shell is executed.
 B<sudo> attempts to change to that user's home directory before
 running the shell.  The security policy shall initialize the
 environment to a minimal set of variables, similar to what is present
-when a user logs in.
+when a user logs in.  The I<Command Environment> section in the
+L<sudoers(5)> manual documents how the B<-i> option affects the
+environment in which a command is run when the I<sudoers> policy
+is in use.
 
 =item -K
 
index a486f02c01f0b8107caf5ec13d6f27fcf6dbbd9c..2638092287bdb169fea481fdbe8f725986b58e63 100644 (file)
@@ -1030,4 +1030,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.8.1p2                          May 16, 2011                  SUDO_PLUGIN(1m)
+1.8.2                            May 22, 2011                  SUDO_PLUGIN(1m)
index 9f26bfc87dfb524d28ba4731f207475fb04b1fa7..2fe44c61b0baeb640d93187f0198b7c5a72d44e1 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "SUDO_PLUGIN @mansectsu@"
-.TH SUDO_PLUGIN @mansectsu@ "May 16, 2011" "1.8.1p2" "MAINTENANCE COMMANDS"
+.TH SUDO_PLUGIN @mansectsu@ "May 22, 2011" "1.8.2" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index a30ffc792edac3e4a9f9465d8ddc16ea7f1b10e5..8026596a6e567c6e12356b4ae586a8d0b40afb4a 100644 (file)
@@ -90,7 +90,7 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        before s\bsu\bud\bdo\bo even begins execution and, as such, it is not possible for
        s\bsu\bud\bdo\bo to preserve them.
 
-       As a special case, If s\bsu\bud\bdo\bo's -\b-i\bi option (initial login) is specified,
+       As a special case, if s\bsu\bud\bdo\bo's -\b-i\bi option (initial login) is specified,
        _\bs_\bu_\bd_\bo_\be_\br_\bs will initialize the environment regardless of the value of
        _\be_\bn_\bv_\b__\br_\be_\bs_\be_\bt.  The _\bD_\bI_\bS_\bP_\bL_\bA_\bY, _\bP_\bA_\bT_\bH and _\bT_\bE_\bR_\bM variables remain unchanged;
        _\bH_\bO_\bM_\bE, _\bM_\bA_\bI_\bL, _\bS_\bH_\bE_\bL_\bL, _\bU_\bS_\bE_\bR, and _\bL_\bO_\bG_\bN_\bA_\bM_\bE are set based on the target user.
@@ -768,7 +768,7 @@ S\bSU\bUD\bDO\bOE\bER\bRS\bS O\bOP\bPT\bTI\bIO\bON\bNS\bS
        log_year        If set, the four-digit year will be logged in the (non-
                        syslog) s\bsu\bud\bdo\bo log file.  This flag is _\bo_\bf_\bf by default.
 
-       long_otp_prompt When validating with a One Time Password (OPT) scheme
+       long_otp_prompt When validating with a One Time Password (OTP) scheme
                        such as S\bS/\b/K\bKe\bey\by or O\bOP\bPI\bIE\bE, a two-line prompt is used to
                        make it easier to cut and paste the challenge to a
                        local window.  It's not as pretty as the default but
@@ -1096,8 +1096,8 @@ S\bSU\bUD\bDO\bOE\bER\bRS\bS O\bOP\bPT\bTI\bIO\bON\bNS\bS
                        escape sequences are supported:
 
                        %H  expanded to the local host name including the
-                           domain name (on if the machine's host name is fully
-                           qualified or the _\bf_\bq_\bd_\bn option is set)
+                           domain name (only if the machine's host name is
+                           fully qualified or the _\bf_\bq_\bd_\bn option is set)
 
                        %h  expanded to the local host name without the domain
                            name
@@ -1167,7 +1167,8 @@ S\bSU\bUD\bDO\bOE\bER\bRS\bS O\bOP\bPT\bTI\bIO\bON\bNS\bS
 
        exempt_group
                    Users in this group are exempt from password and PATH
-                   requirements.  This is not set by default.
+                   requirements.  The group name specified should not include
+                   a % prefix.  This is not set by default.
 
        group_plugin
                    A string containing a _\bs_\bu_\bd_\bo_\be_\br_\bs group plugin with optional
@@ -1183,7 +1184,7 @@ S\bSU\bUD\bDO\bOE\bER\bRS\bS O\bOP\bPT\bTI\bIO\bON\bNS\bS
                    For example, given _\b/_\be_\bt_\bc_\b/_\bs_\bu_\bd_\bo_\b-_\bg_\br_\bo_\bu_\bp, a group file in Unix
                    group format, the sample group plugin can be used:
 
-                       Defaults sudo_plugin="sample_group.so /etc/sudo-group"
+                       Defaults group_plugin="sample_group.so /etc/sudo-group"
 
                    For more information see _\bs_\bu_\bd_\bo_\b__\bp_\bl_\bu_\bg_\bi_\bn(4).
 
@@ -1681,4 +1682,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.8.1p2                          May 16, 2011                       SUDOERS(4)
+1.8.2                           August 17, 2011                     SUDOERS(4)
index 19f3294adeca344958365f366241dee86c045371..89e122a0805dead435ce82f66925b863d91d32c1 100644 (file)
@@ -107,22 +107,26 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
            1.7.0 and higher.
 
        s\bsu\bud\bdo\boN\bNo\bot\btB\bBe\bef\bfo\bor\bre\be
-           A timestamp in the form yyyymmddHHMMZ that can be used to provide a
-           start date/time for when the sudoRole will be valid.  If multiple
+           A timestamp in the form yyyymmddHHMMSSZ that can be used to provide
+           start date/time for when the sudoRole will be valid.  If multiple
            sudoNotBefore entries are present, the earliest is used.  Note that
            timestamps must be in Coordinated Universal Time (UTC), not the
-           local timezone.
+           local timezone.  The minute and seconds portions are optional, but
+           some LDAP servers require that they be present (contrary to the
+           RFC).
 
            The sudoNotBefore attribute is only available in s\bsu\bud\bdo\bo versions
            1.7.5 and higher and must be explicitly enabled via the
            S\bSU\bUD\bDO\bOE\bER\bRS\bS_\b_T\bTI\bIM\bME\bED\bD option in _\b/_\be_\bt_\bc_\b/_\bl_\bd_\ba_\bp_\b._\bc_\bo_\bn_\bf.
 
        s\bsu\bud\bdo\boN\bNo\bot\btA\bAf\bft\bte\ber\br
-           A timestamp in the form yyyymmddHHMMZ that indicates an expiration
-           date/time, after which the sudoRole will no longer be valid.  If
-           multiple sudoNotBefore entries are present, the last one is used.
-           Note that timestamps must be in Coordinated Universal Time (UTC),
-           not the local timezone.
+           A timestamp in the form yyyymmddHHMMSSZ that indicates an
+           expiration date/time, after which the sudoRole will no longer be
+           valid.  If multiple sudoNotBefore entries are present, the last one
+           is used.  Note that timestamps must be in Coordinated Universal
+           Time (UTC), not the local timezone.  The minute and seconds
+           portions are optional, but some LDAP servers require that they be
+           present (contrary to the RFC).
 
            The sudoNotAfter attribute is only available in s\bsu\bud\bdo\bo versions 1.7.5
            and higher and must be explicitly enabled via the S\bSU\bUD\bDO\bOE\bER\bRS\bS_\b_T\bTI\bIM\bME\bED\bD
@@ -738,4 +742,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.8.1p2                          May 16, 2011                  SUDOERS.LDAP(4)
+1.8.2                           August 17, 2011                SUDOERS.LDAP(4)
index 4ad1a47770fbdb20c31c8fa264b14c5e8b7765c8..215713dbdd9e3655a9ce1c80567daa25179fdc15 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "SUDOERS.LDAP @mansectform@"
-.TH SUDOERS.LDAP @mansectform@ "May 16, 2011" "1.8.1p2" "MAINTENANCE COMMANDS"
+.TH SUDOERS.LDAP @mansectform@ "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -254,22 +254,24 @@ The \f(CW\*(C`sudoRunAsGroup\*(C'\fR attribute is only available in \fBsudo\fR v
 1.7.0 and higher.
 .IP "\fBsudoNotBefore\fR" 4
 .IX Item "sudoNotBefore"
-A timestamp in the form \f(CW\*(C`yyyymmddHHMMZ\*(C'\fR that can be used to provide
+A timestamp in the form \f(CW\*(C`yyyymmddHHMMSSZ\*(C'\fR that can be used to provide
 a start date/time for when the \f(CW\*(C`sudoRole\*(C'\fR will be valid.  If
 multiple \f(CW\*(C`sudoNotBefore\*(C'\fR entries are present, the earliest is used.
 Note that timestamps must be in Coordinated Universal Time (\s-1UTC\s0),
-not the local timezone.
+not the local timezone.  The minute and seconds portions are optional,
+but some \s-1LDAP\s0 servers require that they be present (contrary to the \s-1RFC\s0).
 .Sp
 The \f(CW\*(C`sudoNotBefore\*(C'\fR attribute is only available in \fBsudo\fR versions
 1.7.5 and higher and must be explicitly enabled via the \fB\s-1SUDOERS_TIMED\s0\fR
 option in \fI@ldap_conf@\fR.
 .IP "\fBsudoNotAfter\fR" 4
 .IX Item "sudoNotAfter"
-A timestamp in the form \f(CW\*(C`yyyymmddHHMMZ\*(C'\fR that indicates an expiration
+A timestamp in the form \f(CW\*(C`yyyymmddHHMMSSZ\*(C'\fR that indicates an expiration
 date/time, after which the \f(CW\*(C`sudoRole\*(C'\fR will no longer be valid.  If
 multiple \f(CW\*(C`sudoNotBefore\*(C'\fR entries are present, the last one is used.
 Note that timestamps must be in Coordinated Universal Time (\s-1UTC\s0),
-not the local timezone.
+not the local timezone.  The minute and seconds portions are optional,
+but some \s-1LDAP\s0 servers require that they be present (contrary to the \s-1RFC\s0).
 .Sp
 The \f(CW\*(C`sudoNotAfter\*(C'\fR attribute is only available in \fBsudo\fR versions
 1.7.5 and higher and must be explicitly enabled via the \fB\s-1SUDOERS_TIMED\s0\fR
index a9816546b348bdcb7e308d0cb4724cb4042ca08d..b12c6e6bb260c45aa7f12c9dcf0745be3da1cb01 100644 (file)
@@ -147,11 +147,12 @@ The C<sudoRunAsGroup> attribute is only available in B<sudo> versions
 
 =item B<sudoNotBefore>
 
-A timestamp in the form C<yyyymmddHHMMZ> that can be used to provide
+A timestamp in the form C<yyyymmddHHMMSSZ> that can be used to provide
 a start date/time for when the C<sudoRole> will be valid.  If
 multiple C<sudoNotBefore> entries are present, the earliest is used.
 Note that timestamps must be in Coordinated Universal Time (UTC),
-not the local timezone.
+not the local timezone.  The minute and seconds portions are optional,
+but some LDAP servers require that they be present (contrary to the RFC).
 
 The C<sudoNotBefore> attribute is only available in B<sudo> versions
 1.7.5 and higher and must be explicitly enabled via the B<SUDOERS_TIMED>
@@ -159,11 +160,12 @@ option in F<@ldap_conf@>.
 
 =item B<sudoNotAfter>
 
-A timestamp in the form C<yyyymmddHHMMZ> that indicates an expiration
+A timestamp in the form C<yyyymmddHHMMSSZ> that indicates an expiration
 date/time, after which the C<sudoRole> will no longer be valid.  If
 multiple C<sudoNotBefore> entries are present, the last one is used.
 Note that timestamps must be in Coordinated Universal Time (UTC),
-not the local timezone.
+not the local timezone.  The minute and seconds portions are optional,
+but some LDAP servers require that they be present (contrary to the RFC).
 
 The C<sudoNotAfter> attribute is only available in B<sudo> versions
 1.7.5 and higher and must be explicitly enabled via the B<SUDOERS_TIMED>
index 90868c8b280c00ca122fc74610caa18b6214296a..faea227c68580f3fb44cdda412bec31d61aef630 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "SUDOERS @mansectform@"
-.TH SUDOERS @mansectform@ "May 16, 2011" "1.8.1p2" "MAINTENANCE COMMANDS"
+.TH SUDOERS @mansectform@ "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -244,7 +244,7 @@ system this may include \f(CW\*(C`_RLD*\*(C'\fR, \f(CW\*(C`DYLD_*\*(C'\fR, \f(CW
 removed from the environment before \fBsudo\fR even begins execution
 and, as such, it is not possible for \fBsudo\fR to preserve them.
 .PP
-As a special case, If \fBsudo\fR's \fB\-i\fR option (initial login) is
+As a special case, if \fBsudo\fR's \fB\-i\fR option (initial login) is
 specified, \fIsudoers\fR will initialize the environment regardless
 of the value of \fIenv_reset\fR.  The \fI\s-1DISPLAY\s0\fR, \fI\s-1PATH\s0\fR and \fI\s-1TERM\s0\fR
 variables remain unchanged; \fI\s-1HOME\s0\fR, \fI\s-1MAIL\s0\fR, \fI\s-1SHELL\s0\fR, \fI\s-1USER\s0\fR,
@@ -1012,7 +1012,7 @@ If set, the four-digit year will be logged in the (non-syslog) \fBsudo\fR log fi
 This flag is \fIoff\fR by default.
 .IP "long_otp_prompt" 16
 .IX Item "long_otp_prompt"
-When validating with a One Time Password (\s-1OPT\s0) scheme such as
+When validating with a One Time Password (\s-1OTP\s0) scheme such as
 \&\fBS/Key\fR or \fB\s-1OPIE\s0\fR, a two-line prompt is used to make it easier
 to cut and paste the challenge to a local window.  It's not as
 pretty as the default but some people find it more convenient.  This
@@ -1350,7 +1350,7 @@ The following percent (`\f(CW\*(C`%\*(C'\fR') escape sequences are supported:
 .el .IP "\f(CW%H\fR" 4
 .IX Item "%H"
 expanded to the local host name including the domain name
-(on if the machine's host name is fully qualified or the \fIfqdn\fR
+(only if the machine's host name is fully qualified or the \fIfqdn\fR
 option is set)
 .ie n .IP "%h" 4
 .el .IP "\f(CW%h\fR" 4
@@ -1439,6 +1439,7 @@ as \fIenv_keep\fR and \fIenv_check\fR.
 .IP "exempt_group" 12
 .IX Item "exempt_group"
 Users in this group are exempt from password and \s-1PATH\s0 requirements.
+The group name specified should not include a \f(CW\*(C`%\*(C'\fR prefix.
 This is not set by default.
 .IP "group_plugin" 12
 .IX Item "group_plugin"
@@ -1455,7 +1456,7 @@ For example, given \fI/etc/sudo\-group\fR, a group file in Unix group
 format, the sample group plugin can be used:
 .Sp
 .Vb 1
-\&    Defaults sudo_plugin="sample_group.so /etc/sudo\-group"
+\&    Defaults group_plugin="sample_group.so /etc/sudo\-group"
 .Ve
 .Sp
 For more information see \fIsudo_plugin\fR\|(@mansectform@).
index 12509cacb8125e0ba12ac65d257956efa1120c30..b2257caa030eb38697b5ebc4eeaceeb7ef1a9dc0 100644 (file)
@@ -115,7 +115,7 @@ C<LIBPATH>, C<SHLIB_PATH>, and others.  These type of variables are
 removed from the environment before B<sudo> even begins execution
 and, as such, it is not possible for B<sudo> to preserve them.
 
-As a special case, If B<sudo>'s B<-i> option (initial login) is
+As a special case, if B<sudo>'s B<-i> option (initial login) is
 specified, I<sudoers> will initialize the environment regardless
 of the value of I<env_reset>.  The I<DISPLAY>, I<PATH> and I<TERM>
 variables remain unchanged; I<HOME>, I<MAIL>, I<SHELL>, I<USER>,
@@ -882,7 +882,7 @@ This flag is I<off> by default.
 
 =item long_otp_prompt
 
-When validating with a One Time Password (OPT) scheme such as
+When validating with a One Time Password (OTP) scheme such as
 B<S/Key> or B<OPIE>, a two-line prompt is used to make it easier
 to cut and paste the challenge to a local window.  It's not as
 pretty as the default but some people find it more convenient.  This
@@ -1271,7 +1271,7 @@ The following percent (`C<%>') escape sequences are supported:
 =item C<%H>
 
 expanded to the local host name including the domain name
-(on if the machine's host name is fully qualified or the I<fqdn>
+(only if the machine's host name is fully qualified or the I<fqdn>
 option is set)
 
 =item C<%h>
@@ -1369,6 +1369,7 @@ as I<env_keep> and I<env_check>.
 =item exempt_group
 
 Users in this group are exempt from password and PATH requirements.
+The group name specified should not include a C<%> prefix.
 This is not set by default.
 
 =item group_plugin
@@ -1385,7 +1386,7 @@ be enclosed in double quotes (C<">).
 For example, given F</etc/sudo-group>, a group file in Unix group
 format, the sample group plugin can be used:
 
-    Defaults sudo_plugin="sample_group.so /etc/sudo-group"
+    Defaults group_plugin="sample_group.so /etc/sudo-group"
 
 For more information see L<sudo_plugin(5)>.
 
index 254544c0f814e0786540a346f655b44dd9dc21a1..f04f5fa803b5a6e593e2b54c8a9a554c60a1aaa3 100644 (file)
@@ -260,4 +260,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.8.1p2                          May 16, 2011                   SUDOREPLAY(1m)
+1.8.2                            May 22, 2011                   SUDOREPLAY(1m)
index 1c7557aa766fd5b0add2dacab14c39665805ea12..f821d76301a3d94d8ce7d75a7c38f16c55bc281f 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "SUDOREPLAY @mansectsu@"
-.TH SUDOREPLAY @mansectsu@ "May 16, 2011" "1.8.1p2" "MAINTENANCE COMMANDS"
+.TH SUDOREPLAY @mansectsu@ "May 22, 2011" "1.8.2" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 5aa5f0f7a2fa8b450ef2347b50b841a9ea137d60..ad117f3cba5993bd7c597becf4ab849cc77a887b 100644 (file)
@@ -109,6 +109,12 @@ D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
            used.  You may wish to comment out or remove the unused alias.  In
            -\b-s\bs (strict) mode this is an error, not a warning.
 
+       Warning: cycle in {User,Runas,Host,Cmnd}_Alias
+           The specified {User,Runas,Host,Cmnd}_Alias includes a reference to
+           itself, either directly or through an alias it includes.  This is
+           only a warning by default as s\bsu\bud\bdo\bo will ignore cycles when parsing
+           the _\bs_\bu_\bd_\bo_\be_\br_\bs file.
+
 S\bSE\bEE\bE A\bAL\bLS\bSO\bO
        _\bv_\bi(1), _\bs_\bu_\bd_\bo_\be_\br_\bs(4), _\bs_\bu_\bd_\bo(1m), _\bv_\bi_\bp_\bw(1m)
 
@@ -143,4 +149,4 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.8.1p2                          May 16, 2011                       VISUDO(1m)
+1.8.2                           August 17, 2011                     VISUDO(1m)
index 9003ea8fc8b92693609974cb1657c745fe569eab..a711ea7fcc5727c38a0a9a8aafbc6ea05f7cc2c9 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "VISUDO @mansectsu@"
-.TH VISUDO @mansectsu@ "May 16, 2011" "1.8.1p2" "MAINTENANCE COMMANDS"
+.TH VISUDO @mansectsu@ "August 17, 2011" "1.8.2" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -271,6 +271,12 @@ complain).  In \fB\-s\fR (strict) mode these are errors, not warnings.
 The specified {User,Runas,Host,Cmnd}_Alias was defined but never
 used.  You may wish to comment out or remove the unused alias.  In
 \&\fB\-s\fR (strict) mode this is an error, not a warning.
+.IP "Warning: cycle in {User,Runas,Host,Cmnd}_Alias" 4
+.IX Item "Warning: cycle in {User,Runas,Host,Cmnd}_Alias"
+The specified {User,Runas,Host,Cmnd}_Alias includes a reference to
+itself, either directly or through an alias it includes.  This is
+only a warning by default as \fBsudo\fR will ignore cycles when parsing
+the \fIsudoers\fR file.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 \&\fIvi\fR\|(1), \fIsudoers\fR\|(@mansectform@), \fIsudo\fR\|(@mansectsu@), \fIvipw\fR\|(@mansectsu@)
index cffb32104eb126800c36a5d1ec113fe247a8c3ff..281210932b0b2b234f26db5c89da5f89547a9284 100644 (file)
@@ -172,6 +172,13 @@ The specified {User,Runas,Host,Cmnd}_Alias was defined but never
 used.  You may wish to comment out or remove the unused alias.  In
 B<-s> (strict) mode this is an error, not a warning.
 
+=item Warning: cycle in {User,Runas,Host,Cmnd}_Alias
+
+The specified {User,Runas,Host,Cmnd}_Alias includes a reference to
+itself, either directly or through an alias it includes.  This is
+only a warning by default as B<sudo> will ignore cycles when parsing
+the I<sudoers> file.
+
 =back
 
 =head1 SEE ALSO
index 190bd260b9e397889293397ef6de13879a62aedb..e64afdfb228969a76f750a07a99139429e7795bb 100644 (file)
@@ -19,9 +19,9 @@
 
 #include <stdarg.h>
 
-void   error(int, const char *, ...) __attribute__((__noreturn__));
-void   errorx(int, const char *, ...) __attribute__((__noreturn__));
-void   warning(const char *, ...);
-void   warningx(const char *, ...);
+void   error(int, const char *, ...)  __printflike(2, 3) __attribute__((__noreturn__));
+void   errorx(int, const char *, ...)  __printflike(2, 3) __attribute__((__noreturn__));
+void   warning(const char *, ...) __printflike(1, 2);
+void   warningx(const char *, ...) __printflike(1, 2);
 
 #endif /* _SUDO_ERROR_H_ */
diff --git a/include/gettext.h b/include/gettext.h
new file mode 100644 (file)
index 0000000..27f0796
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _SUDO_GETTEXT_H
+#define _SUDO_GETTEXT_H
+
+/*
+ * Solaris locale.h includes libintl.h which causes problems when we
+ * redefine the gettext functions.  We include it first to avoid this.
+ */
+#if defined(HAVE_LOCALE_H) && defined(__sun__) && defined(__svr4__)
+# include <locale.h>
+#endif
+
+#ifdef HAVE_LIBINTL_H
+
+# include <libintl.h>
+
+/*
+ * If DEFAULT_TEXT_DOMAIN is defined, use its value as the domain for
+ * gettext() and ngettext() instead of the value set by textdomain().
+ * This is used by the sudoers plugin as well as the convenience libraries.
+ */
+# ifdef DEFAULT_TEXT_DOMAIN
+#  undef gettext
+#  define gettext(String) \
+    dgettext(DEFAULT_TEXT_DOMAIN, String)
+#  undef ngettext
+#  define ngettext(String, String_Plural, N) \
+    dngettext(DEFAULT_TEXT_DOMAIN, String, String_Plural, N)
+# endif
+
+/* Gettext convenience macros */
+# define _(String) gettext(String)
+# define gettext_noop(String) String
+# define N_(String) gettext_noop(String)
+
+#else /* !HAVE_LIBINTL_H */
+
+/*
+ * Internationalization is either unavailable or has been disabled.
+ * Define away the gettext functions used by sudo.
+ */
+# define _(String) String 
+# define N_(String) String
+# define textdomain(Domain)
+# define bindtextdomain(Package, Directory)
+# define ngettext(String, String_Plural, N) \
+    ((N) == 1 ? (String) : (String_Plural))
+
+#endif /* HAVE_LIBINTL_H */
+
+#endif /* _SUDO_GETTEXT_H */
index 501eeafc0267eae43bb44ede6384d613a393cad0..c6d509335f19e6b6830bcf1e4a6c01b94e2f7a0e 100644 (file)
@@ -34,8 +34,8 @@ struct lbuf {
 
 void lbuf_init(struct lbuf *, int (*)(const char *), int, const char *, int);
 void lbuf_destroy(struct lbuf *);
-void lbuf_append(struct lbuf *, ...);
-void lbuf_append_quoted(struct lbuf *, const char *, ...);
+void lbuf_append(struct lbuf *, const char *, ...) __printflike(2, 3);
+void lbuf_append_quoted(struct lbuf *, const char *, const char *, ...) __printflike(3, 4);
 void lbuf_print(struct lbuf *);
 
 #endif /* _SUDO_LBUF_H */
index 68d5879b877849c30be80455f4ab82925b115373..e7eae3ebab5ff4e103ebc189bb5e3aeecfad63d7 100644 (file)
@@ -286,6 +286,9 @@ void closefrom(int);
 #ifndef HAVE_GETCWD
 char *getcwd(char *, size_t size);
 #endif
+#ifndef HAVE_GETGROUPLIST
+int getgrouplist(const char *, gid_t, gid_t *, int *);
+#endif
 #ifndef HAVE_GETLINE
 ssize_t getline(char **, size_t *, FILE *);
 #endif
index 04eaea408c49beabbfbb92001a78f694c1d65522..3061e3c5a2f71da20e6715700280d02e4db3bdea 100755 (executable)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,6 +1,5 @@
-# Generated from ltmain.m4sh.
 
-# libtool (GNU libtool) 2.2.10
+# libtool (GNU libtool) 2.4
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
 #         compiler:            $LTCC
 #         compiler flags:              $LTCFLAGS
 #         linker:              $LD (gnu? $with_gnu_ld)
-#         $progname:   (GNU libtool) 2.2.10
+#         $progname:   (GNU libtool) 2.4
 #         automake:    $automake_version
 #         autoconf:    $autoconf_version
 #
 # Report bugs to <bug-libtool@gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.2.10
+VERSION=2.4
 TIMESTAMP=""
-package_revision=1.3175
+package_revision=1.3293
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -163,6 +164,27 @@ IFS="      $lt_nl"
 dirname="s,/[^/]*$,,"
 basename="s,^.*/,,"
 
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
 # func_dirname_and_basename file append nondir_replacement
 # perform func_basename and func_dirname in a single function
 # call:
@@ -177,17 +199,31 @@ basename="s,^.*/,,"
 # those functions but instead duplicate the functionality here.
 func_dirname_and_basename ()
 {
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-  func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
-}
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname 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).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
 
-# Generated shell functions inserted here.
 
 # These SED scripts presuppose an absolute path with a trailing slash.
 pathcar='s,^/\([^/]*\).*$,\1,'
@@ -370,6 +406,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
 # Same as above, but do not quote variable references.
 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
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
 # Re-`\' parameter expansions in output of double_quote_subst that were
 # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
 # in input to double_quote_subst, that '$' was protected from expansion.
@@ -398,7 +443,7 @@ opt_warning=:
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO "$progname${mode+: }$mode: $*"
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
 }
 
 # func_verbose arg...
@@ -424,14 +469,14 @@ func_echo_all ()
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
 
     # bash bug again:
     :
@@ -650,11 +695,30 @@ func_show_eval_locale ()
     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 ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
+
 
 # func_version
 # Echo version message to standard output and exit.
 func_version ()
 {
+    $opt_debug
+
     $SED -n '/(C)/!b go
        :more
        /\./!{
@@ -676,6 +740,8 @@ func_version ()
 # Echo short help message to standard output and exit.
 func_usage ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/^#  *.*--help/ {
         s/^# //
        s/^# *$//
@@ -692,7 +758,10 @@ func_usage ()
 # unless 'noexit' is passed as argument.
 func_help ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/# Report bugs to/ {
+       :print
         s/^# //
        s/^# *$//
        s*\$progname*'$progname'*
@@ -705,7 +774,11 @@ func_help ()
        s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
        s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
        p
-     }' < "$progpath"
+       d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
     ret=$?
     if test -z "$1"; then
       exit $ret
@@ -717,12 +790,39 @@ func_help ()
 # exit_cmd.
 func_missing_arg ()
 {
+    $opt_debug
+
     func_error "missing argument for $1."
     exit_cmd=exit
 }
 
-exit_cmd=:
 
+# 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.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
 
 
 
@@ -732,25 +832,64 @@ magic="%%%MAGIC variable%%%"
 magic_exe="%%%MAGIC EXE variable%%%"
 
 # Global variables.
-# $mode is unset
 nonopt=
-execute_dlfiles=
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 extracted_archives=
 extracted_serial=0
 
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
 # 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=
 
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
 # func_fatal_configuration arg...
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
@@ -840,129 +979,204 @@ func_enable_tag ()
   esac
 }
 
-# Parse options once, thoroughly.  This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# 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
 
-  # 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
-    ;;
-  esac
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# 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
+  ;;
+esac
 
-  # Parse non-mode specific arguments:
-  while test "$#" -gt 0; do
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
     opt="$1"
     shift
-
     case $opt in
-      --config)                func_config                                     ;;
-
-      --debug)         preserve_args="$preserve_args $opt"
+      --debug|-x)      opt_debug='set -x'
                        func_echo "enabling shell trace mode"
-                       opt_debug='set -x'
                        $opt_debug
                        ;;
-
-      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
-                       execute_dlfiles="$execute_dlfiles $1"
-                       shift
+      --dry-run|--dryrun|-n)
+                       opt_dry_run=:
                        ;;
-
-      --dry-run | -n)  opt_dry_run=:                                   ;;
-      --features)       func_features                                  ;;
-      --finish)                mode="finish"                                   ;;
-
-      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
-                       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 $opt"
-                            exit_cmd=exit
-                            break
-                            ;;
-                       esac
-
-                       mode="$1"
+      --config)
+                       opt_config=:
+func_config
+                       ;;
+      --dlopen|-dlopen)
+                       optarg="$1"
+                       opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
                        shift
                        ;;
-
       --preserve-dup-deps)
-                       opt_duplicate_deps=:                            ;;
-
-      --quiet|--silent)        preserve_args="$preserve_args $opt"
-                       opt_silent=:
-                       opt_verbose=false
+                       opt_preserve_dup_deps=:
                        ;;
-
-      --no-quiet|--no-silent)
-                       preserve_args="$preserve_args $opt"
-                       opt_silent=false
+      --features)
+                       opt_features=:
+func_features
                        ;;
-
-      --verbose| -v)   preserve_args="$preserve_args $opt"
+      --finish)
+                       opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+                       ;;
+      --help)
+                       opt_help=:
+                       ;;
+      --help-all)
+                       opt_help_all=:
+opt_help=': help-all'
+                       ;;
+      --mode)
+                       test $# = 0 && func_missing_arg $opt && break
+                       optarg="$1"
+                       opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+                       shift
+                       ;;
+      --no-silent|--no-quiet)
                        opt_silent=false
-                       opt_verbose=:
+func_append preserve_args " $opt"
                        ;;
-
-      --no-verbose)    preserve_args="$preserve_args $opt"
+      --no-verbose)
                        opt_verbose=false
+func_append preserve_args " $opt"
                        ;;
-
-      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
-                       preserve_args="$preserve_args $opt $1"
-                       func_enable_tag "$1"    # tagname is set here
+      --silent|--quiet)
+                       opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+                       ;;
+      --verbose|-v)
+                       opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+                       ;;
+      --tag)
+                       test $# = 0 && func_missing_arg $opt && break
+                       optarg="$1"
+                       opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
                        shift
                        ;;
 
+      -\?|-h)          func_usage                              ;;
+      --help)          func_help                               ;;
+      --version)       func_version                            ;;
+
       # Separate optargs to long options:
-      -dlopen=*|--mode=*|--tag=*)
-                       func_opt_split "$opt"
-                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+      --*=*)
+                       func_split_long_opt "$opt"
+                       set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
                        shift
                        ;;
 
-      -\?|-h)          func_usage                                      ;;
-      --help)          opt_help=:                                      ;;
-      --help-all)      opt_help=': help-all'                           ;;
-      --version)       func_version                                    ;;
-
-      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
-
-      *)               nonopt="$opt"
-                       break
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+                       func_split_short_opt "$opt"
+                       set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+                       shift
                        ;;
+
+      --)              break                                   ;;
+      -*)              func_fatal_help "unrecognized option \`$opt'" ;;
+      *)               set dummy "$opt" ${1+"$@"};     shift; break  ;;
     esac
   done
 
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
 
   case $host in
     *cygwin* | *mingw* | *pw32* | *cegcc*)
@@ -970,82 +1184,44 @@ func_enable_tag ()
       opt_duplicate_compiler_generated_deps=:
       ;;
     *)
-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
       ;;
   esac
 
-  # Having warned about all mis-specified options, bail out if
-  # anything was wrong.
-  $exit_cmd $EXIT_FAILURE
-}
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
 
-# 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
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
     fi
 
-    exit $EXIT_MISMATCH
-  fi
-}
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
 
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
 
-## ----------- ##
-##    Main.    ##
-## ----------- ##
-
-$opt_help || {
-  # Sanity checks first:
-  func_check_version_match
-
-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-    func_fatal_configuration "not configured to build any kind of library"
-  fi
-
-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
 
 
-  # Darwin sucks
-  eval std_shrext=\"$shrext_cmds\"
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
 
 
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; 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=$mode' for more information."
-}
 
+## ----------- ##
+##    Main.    ##
+## ----------- ##
 
 # func_lalib_p file
 # True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -1110,12 +1286,9 @@ func_ltwrapper_executable_p ()
 # temporary ltwrapper_script.
 func_ltwrapper_scriptname ()
 {
-    func_ltwrapper_scriptname_result=""
-    if func_ltwrapper_executable_p "$1"; then
-       func_dirname_and_basename "$1" "" "."
-       func_stripname '' '.exe' "$func_basename_result"
-       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-    fi
+    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
@@ -1161,6 +1334,37 @@ func_source ()
 }
 
 
+# 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.
@@ -1173,8 +1377,7 @@ func_infer_tag ()
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
-        func_quote_for_eval "$arg"
-       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+       func_append_quoted CC_quoted "$arg"
       done
       CC_expanded=`func_echo_all $CC`
       CC_quoted_expanded=`func_echo_all $CC_quoted`
@@ -1193,8 +1396,7 @@ func_infer_tag ()
            CC_quoted=
            for arg in $CC; do
              # Double-quote args containing other shell metacharacters.
-             func_quote_for_eval "$arg"
-             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+             func_append_quoted CC_quoted "$arg"
            done
            CC_expanded=`func_echo_all $CC`
            CC_quoted_expanded=`func_echo_all $CC_quoted`
@@ -1226,42 +1428,522 @@ func_infer_tag ()
 
 
 
-# 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 ()
+# 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 "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; 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$TIMESTAMP) $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 ()
+{
+  $opt_debug
+  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 "$lt_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 ()
+{
+  $opt_debug
+  # 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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  $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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 ()
 {
-    write_libobj=${1}
-    if test "$build_libtool_libs" = yes; then
-      write_lobj=\'${2}\'
-    else
-      write_lobj=none
-    fi
+  $opt_debug
+  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
 
-    if test "$build_old_libs" = yes; 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$TIMESTAMP) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
+# 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 ()
+{
+  $opt_debug
+  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
 
-# Name of the PIC object.
-pic_object=$write_lobj
 
-# Name of the non-PIC object
-non_pic_object=$write_oldobj
+# 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 ()
+{
+  $opt_debug
+  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
 
-EOF
-      $MV "${write_libobj}T" "${write_libobj}"
-    }
+
+# 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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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_mode_compile arg...
 func_mode_compile ()
@@ -1303,12 +1985,12 @@ func_mode_compile ()
          ;;
 
        -pie | -fpie | -fPIE)
-          pie_flag="$pie_flag $arg"
+          func_append pie_flag " $arg"
          continue
          ;;
 
        -shared | -static | -prefer-pic | -prefer-non-pic)
-         later="$later $arg"
+         func_append later " $arg"
          continue
          ;;
 
@@ -1329,15 +2011,14 @@ func_mode_compile ()
          save_ifs="$IFS"; IFS=','
          for arg in $args; do
            IFS="$save_ifs"
-           func_quote_for_eval "$arg"
-           lastarg="$lastarg $func_quote_for_eval_result"
+           func_append_quoted lastarg "$arg"
          done
          IFS="$save_ifs"
          func_stripname ' ' '' "$lastarg"
          lastarg=$func_stripname_result
 
          # Add the arguments to base_compile.
-         base_compile="$base_compile $lastarg"
+         func_append base_compile " $lastarg"
          continue
          ;;
 
@@ -1353,8 +2034,7 @@ func_mode_compile ()
       esac    #  case $arg_mode
 
       # Aesthetically quote the previous argument.
-      func_quote_for_eval "$lastarg"
-      base_compile="$base_compile $func_quote_for_eval_result"
+      func_append_quoted base_compile "$lastarg"
     done # for arg
 
     case $arg_mode in
@@ -1485,17 +2165,16 @@ compiler."
        $opt_dry_run || $RM $removelist
        exit $EXIT_FAILURE
       fi
-      removelist="$removelist $output_obj"
+      func_append removelist " $output_obj"
       $ECHO "$srcfile" > "$lockfile"
     fi
 
     $opt_dry_run || $RM $removelist
-    removelist="$removelist $lockfile"
+    func_append removelist " $lockfile"
     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
 
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
+    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
 
@@ -1515,7 +2194,7 @@ compiler."
 
       if test -z "$output_obj"; then
        # Place PIC objects in $objdir
-       command="$command -o $lobj"
+       func_append command " -o $lobj"
       fi
 
       func_show_eval_locale "$command" \
@@ -1562,11 +2241,11 @@ compiler."
        command="$base_compile $qsrcfile $pic_flag"
       fi
       if test "$compiler_c_o" = yes; then
-       command="$command -o $obj"
+       func_append command " -o $obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
+      func_append command "$suppress_output"
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
@@ -1611,13 +2290,13 @@ compiler."
 }
 
 $opt_help || {
-  test "$mode" = compile && func_mode_compile ${1+"$@"}
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 {
     # We need to display help for each of the modes.
-    case $mode in
+    case $opt_mode in
       "")
         # Generic help is extracted from the usage comments
         # at the start of this file.
@@ -1793,7 +2472,7 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$mode'"
+        func_fatal_help "invalid operation mode \`$opt_mode'"
         ;;
     esac
 
@@ -1808,13 +2487,13 @@ if $opt_help; then
   else
     {
       func_help noexit
-      for mode in compile link execute install finish uninstall clean; do
+      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 mode in compile link execute install finish uninstall clean; do
+      for opt_mode in compile link execute install finish uninstall clean; do
        echo
        func_mode_help
       done
@@ -1843,13 +2522,16 @@ func_mode_execute ()
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
+    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"
@@ -1871,7 +2553,7 @@ func_mode_execute ()
        dir="$func_dirname_result"
 
        if test -f "$dir/$objdir/$dlname"; then
-         dir="$dir/$objdir"
+         func_append dir "/$objdir"
        else
          if test ! -f "$dir/$dlname"; then
            func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1928,8 +2610,7 @@ func_mode_execute ()
        ;;
       esac
       # Quote arguments (to preserve shell metacharacters).
-      func_quote_for_eval "$file"
-      args="$args $func_quote_for_eval_result"
+      func_append_quoted args "$file"
     done
 
     if test "X$opt_dry_run" = Xfalse; then
@@ -1961,22 +2642,59 @@ func_mode_execute ()
     fi
 }
 
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
     $opt_debug
-    libdirs="$nonopt"
+    libs=
+    libdirs=
     admincmds=
 
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-       libdirs="$libdirs $dir"
-      done
+    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.
@@ -1986,7 +2704,7 @@ func_mode_finish ()
        if test -n "$finish_eval"; then
          # Do the single finish_eval.
          eval cmds=\"$finish_eval\"
-         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+         $opt_dry_run || eval "$cmds" || func_append admincmds "
        $cmds"
        fi
       done
@@ -1995,53 +2713,55 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     $opt_silent && exit $EXIT_SUCCESS
 
-    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\"
+    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 "   - 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 "----------------------------------------------------------------------"
+      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 "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
@@ -2066,7 +2786,7 @@ func_mode_install ()
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     func_quote_for_eval "$arg"
-    install_prog="$install_prog$func_quote_for_eval_result"
+    func_append install_prog "$func_quote_for_eval_result"
     install_shared_prog=$install_prog
     case " $install_prog " in
       *[\\\ /]cp\ *) install_cp=: ;;
@@ -2086,7 +2806,7 @@ func_mode_install ()
     do
       arg2=
       if test -n "$dest"; then
-       files="$files $dest"
+       func_append files " $dest"
        dest=$arg
        continue
       fi
@@ -2124,11 +2844,11 @@ func_mode_install ()
 
       # Aesthetically quote the argument.
       func_quote_for_eval "$arg"
-      install_prog="$install_prog $func_quote_for_eval_result"
+      func_append install_prog " $func_quote_for_eval_result"
       if test -n "$arg2"; then
        func_quote_for_eval "$arg2"
       fi
-      install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -2140,7 +2860,7 @@ func_mode_install ()
     if test -n "$install_override_mode" && $no_mode; then
       if $install_cp; then :; else
        func_quote_for_eval "$install_override_mode"
-       install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
+       func_append install_shared_prog " -m $func_quote_for_eval_result"
       fi
     fi
 
@@ -2198,10 +2918,13 @@ func_mode_install ()
       case $file in
       *.$libext)
        # Do the static libraries later.
-       staticlibs="$staticlibs $file"
+       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"
@@ -2215,19 +2938,19 @@ func_mode_install ()
        if test "X$destdir" = "X$libdir"; then
          case "$current_libdirs " in
          *" $libdir "*) ;;
-         *) current_libdirs="$current_libdirs $libdir" ;;
+         *) func_append current_libdirs " $libdir" ;;
          esac
        else
          # Note the libdir as a future libdir.
          case "$future_libdirs " in
          *" $libdir "*) ;;
-         *) future_libdirs="$future_libdirs $libdir" ;;
+         *) func_append future_libdirs " $libdir" ;;
          esac
        fi
 
        func_dirname "$file" "/" ""
        dir="$func_dirname_result"
-       dir="$dir$objdir"
+       func_append dir "$objdir"
 
        if test -n "$relink_command"; then
          # Determine the prefix the user has applied to our future dir.
@@ -2304,7 +3027,7 @@ func_mode_install ()
        func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
        # Maybe install the static library, too.
-       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       test -n "$old_library" && func_append staticlibs " $dir/$old_library"
        ;;
 
       *.lo)
@@ -2501,7 +3224,7 @@ func_mode_install ()
     fi
 }
 
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -2548,6 +3271,18 @@ extern \"C\" {
 #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 con'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
+
 /* External symbol declarations for the compiler. */\
 "
 
@@ -2559,8 +3294,9 @@ extern \"C\" {
          # Add our own program objects to the symbol list.
          progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
          for progfile in $progfiles; do
-           func_verbose "extracting global C symbols from \`$progfile'"
-           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+           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
@@ -2609,10 +3345,52 @@ extern \"C\" {
          func_verbose "extracting global C symbols from \`$dlprefile'"
          func_basename "$dlprefile"
          name="$func_basename_result"
-         $opt_dry_run || {
-           eval '$ECHO ": $name " >> "$nlist"'
-           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-         }
+          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 || {
@@ -2650,26 +3428,9 @@ typedef struct {
   const char *name;
   void *address;
 } lt_dlsymlist;
-"
-         case $host in
-         *cygwin* | *mingw* | *cegcc* )
-           echo >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs.  */"
-           lt_dlsym_const= ;;
-         *osf5*)
-           echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
-           lt_dlsym_const= ;;
-         *)
-           lt_dlsym_const=const ;;
-         esac
-
-         echo >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 {\
   { \"$my_originator\", (void *) 0 },"
@@ -2725,7 +3486,7 @@ static const void *lt_preloaded_setup() {
        for arg in $LTCFLAGS; do
          case $arg in
          -pie | -fpie | -fPIE) ;;
-         *) symtab_cflags="$symtab_cflags $arg" ;;
+         *) func_append symtab_cflags " $arg" ;;
          esac
        done
 
@@ -2788,7 +3549,8 @@ func_win32_libid ()
     # 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
-      win32_nmres=`eval $NM -f posix -A $1 |
+      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 /{
@@ -2817,6 +3579,131 @@ func_win32_libid ()
   $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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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 which possess that section. Heuristic: eliminate
+    # all those which 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_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 ()
+{
+  $opt_debug
+  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 ()
+{
+  $opt_debug
+  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_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 ()
+{
+  $opt_debug
+  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
@@ -3195,6 +4082,18 @@ func_exec_program ()
 
   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 "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
          $ECHO "\
@@ -3209,14 +4108,6 @@ func_exec_program ()
 "
        fi
 
-       # fixup the dll searchpath if we need to.
-       if test -n "$dllsearchpath"; then
-         $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-       fi
-
        $ECHO "\
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
       # Run the actual program with our arguments.
@@ -3234,166 +4125,6 @@ fi\
 }
 
 
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin.  Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
-  func_to_host_path_result="$1"
-  if test -n "$1"; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        case $build in
-          *mingw* ) # actually, msys
-            # awkward: cmd appends spaces to result
-            func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
-              $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_path_result=`cygpath -w "$1" |
-             $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # 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_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-              func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
-                $SED -e "$lt_sed_naive_backslashify"`
-            else
-              # Allow warning below.
-              func_to_host_path_result=
-            fi
-            ;;
-        esac
-        if test -z "$func_to_host_path_result" ; then
-          func_error "Could not determine host path corresponding to"
-          func_error "  \`$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback:
-          func_to_host_path_result="$1"
-        fi
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_path
-
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-#
-# 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.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
-  func_to_host_pathlist_result="$1"
-  if test -n "$1"; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        # 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_pathlist_tmp1=$func_stripname_result
-        case $build in
-          *mingw* ) # Actually, msys.
-            # Awkward: cmd appends spaces to result.
-            func_to_host_pathlist_result=`
-             ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
-             $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # unfortunately, winepath doesn't convert pathlists
-            func_to_host_pathlist_result=""
-            func_to_host_pathlist_oldIFS=$IFS
-            IFS=:
-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-              IFS=$func_to_host_pathlist_oldIFS
-              if test -n "$func_to_host_pathlist_f" ; then
-                func_to_host_path "$func_to_host_pathlist_f"
-                if test -n "$func_to_host_path_result" ; then
-                  if test -z "$func_to_host_pathlist_result" ; then
-                    func_to_host_pathlist_result="$func_to_host_path_result"
-                  else
-                    func_append func_to_host_pathlist_result ";$func_to_host_path_result"
-                  fi
-                fi
-              fi
-            done
-            IFS=$func_to_host_pathlist_oldIFS
-            ;;
-        esac
-        if test -z "$func_to_host_pathlist_result"; then
-          func_error "Could not determine the host path(s) corresponding to"
-          func_error "  \`$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback. This may break if $1 contains DOS-style drive
-          # specifications. The fix is not to complicate the expression
-          # below, but for the user to provide a working wine installation
-          # with winepath so that path translation in the cross-to-mingw
-          # case works properly.
-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
-        fi
-        # Now, add the leading and trailing path separators back
-        case "$1" in
-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-            ;;
-        esac
-        case "$1" in
-          *: ) func_append func_to_host_pathlist_result ";"
-            ;;
-        esac
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_pathlist
-
 # func_emit_cwrapperexe_src
 # emit the source code for a wrapper executable on stdout
 # Must ONLY be called from within func_mode_link because
@@ -3563,14 +4294,14 @@ void lt_dump_script (FILE *f);
 EOF
 
            cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
            if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_pathlist "$temp_rpath"
+              func_to_host_path "$temp_rpath"
              cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
 EOF
            else
              cat <<"EOF"
@@ -3579,10 +4310,10 @@ EOF
            fi
 
            if test -n "$dllsearchpath"; then
-              func_to_host_pathlist "$dllsearchpath:"
+              func_to_host_path "$dllsearchpath:"
              cat <<EOF
 const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
 EOF
            else
              cat <<"EOF"
@@ -3765,8 +4496,12 @@ EOF
 
   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  /* 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));
@@ -4515,9 +5250,9 @@ func_mode_link ()
            ;;
          *)
            if test "$prev" = dlfiles; then
-             dlfiles="$dlfiles $arg"
+             func_append dlfiles " $arg"
            else
-             dlprefiles="$dlprefiles $arg"
+             func_append dlprefiles " $arg"
            fi
            prev=
            continue
@@ -4541,7 +5276,7 @@ func_mode_link ()
            *-*-darwin*)
              case "$deplibs " in
                *" $qarg.ltframework "*) ;;
-               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+               *) func_append deplibs " $qarg.ltframework" # this is fixed later
                   ;;
              esac
              ;;
@@ -4560,7 +5295,7 @@ func_mode_link ()
            moreargs=
            for fil in `cat "$save_arg"`
            do
-#            moreargs="$moreargs $fil"
+#            func_append moreargs " $fil"
              arg=$fil
              # A libtool-controlled object.
 
@@ -4589,7 +5324,7 @@ func_mode_link ()
 
                  if test "$prev" = dlfiles; then
                    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-                     dlfiles="$dlfiles $pic_object"
+                     func_append dlfiles " $pic_object"
                      prev=
                      continue
                    else
@@ -4601,7 +5336,7 @@ func_mode_link ()
                  # CHECK ME:  I think I busted this.  -Ossama
                  if test "$prev" = dlprefiles; then
                    # Preload the old-style object.
-                   dlprefiles="$dlprefiles $pic_object"
+                   func_append dlprefiles " $pic_object"
                    prev=
                  fi
 
@@ -4671,12 +5406,12 @@ func_mode_link ()
          if test "$prev" = rpath; then
            case "$rpath " in
            *" $arg "*) ;;
-           *) rpath="$rpath $arg" ;;
+           *) func_append rpath " $arg" ;;
            esac
          else
            case "$xrpath " in
            *" $arg "*) ;;
-           *) xrpath="$xrpath $arg" ;;
+           *) func_append xrpath " $arg" ;;
            esac
          fi
          prev=
@@ -4688,28 +5423,28 @@ func_mode_link ()
          continue
          ;;
        weak)
-         weak_libs="$weak_libs $arg"
+         func_append weak_libs " $arg"
          prev=
          continue
          ;;
        xcclinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $qarg"
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $qarg"
          prev=
          func_append compile_command " $qarg"
          func_append finalize_command " $qarg"
          continue
          ;;
        xcompiler)
-         compiler_flags="$compiler_flags $qarg"
+         func_append compiler_flags " $qarg"
          prev=
          func_append compile_command " $qarg"
          func_append finalize_command " $qarg"
          continue
          ;;
        xlinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $wl$qarg"
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $wl$qarg"
          prev=
          func_append compile_command " $wl$qarg"
          func_append finalize_command " $wl$qarg"
@@ -4800,15 +5535,16 @@ func_mode_link ()
        ;;
 
       -L*)
-       func_stripname '-L' '' "$arg"
-       dir=$func_stripname_result
-       if test -z "$dir"; then
+       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]:[\\/]*) ;;
@@ -4820,10 +5556,16 @@ func_mode_link ()
          ;;
        esac
        case "$deplibs " in
-       *" -L$dir "*) ;;
+       *" -L$dir "* | *" $arg "*)
+         # Will only happen for absolute or sysroot arguments
+         ;;
        *)
-         deplibs="$deplibs -L$dir"
-         lib_search_path="$lib_search_path $dir"
+         # 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
@@ -4832,12 +5574,12 @@ func_mode_link ()
          case :$dllsearchpath: in
          *":$dir:"*) ;;
          ::) dllsearchpath=$dir;;
-         *) dllsearchpath="$dllsearchpath:$dir";;
+         *) func_append dllsearchpath ":$dir";;
          esac
          case :$dllsearchpath: in
          *":$testbindir:"*) ;;
          ::) dllsearchpath=$testbindir;;
-         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         *) func_append dllsearchpath ":$testbindir";;
          esac
          ;;
        esac
@@ -4861,7 +5603,7 @@ func_mode_link ()
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C and math libraries are in the System framework
-           deplibs="$deplibs System.ltframework"
+           func_append deplibs " System.ltframework"
            continue
            ;;
          *-*-sco3.2v5* | *-*-sco5v6*)
@@ -4881,7 +5623,7 @@ func_mode_link ()
           ;;
         esac
        fi
-       deplibs="$deplibs $arg"
+       func_append deplibs " $arg"
        continue
        ;;
 
@@ -4893,8 +5635,8 @@ func_mode_link ()
       # 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)
-       compiler_flags="$compiler_flags $arg"
+      -model|-arch|-isysroot|--sysroot)
+       func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        prev=xcompiler
@@ -4902,12 +5644,12 @@ func_mode_link ()
        ;;
 
       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-       compiler_flags="$compiler_flags $arg"
+       func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        case "$new_inherited_linker_flags " in
            *" $arg "*) ;;
-           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+           * ) func_append new_inherited_linker_flags " $arg" ;;
        esac
        continue
        ;;
@@ -4974,13 +5716,17 @@ func_mode_link ()
        # 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 "*) ;;
-       *) xrpath="$xrpath $dir" ;;
+       *) func_append xrpath " $dir" ;;
        esac
        continue
        ;;
@@ -5033,8 +5779,8 @@ func_mode_link ()
        for flag in $args; do
          IFS="$save_ifs"
           func_quote_for_eval "$flag"
-         arg="$arg $func_quote_for_eval_result"
-         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+         func_append arg " $func_quote_for_eval_result"
+         func_append compiler_flags " $func_quote_for_eval_result"
        done
        IFS="$save_ifs"
        func_stripname ' ' '' "$arg"
@@ -5049,9 +5795,9 @@ func_mode_link ()
        for flag in $args; do
          IFS="$save_ifs"
           func_quote_for_eval "$flag"
-         arg="$arg $wl$func_quote_for_eval_result"
-         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-         linker_flags="$linker_flags $func_quote_for_eval_result"
+         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"
@@ -5090,13 +5836,16 @@ func_mode_link ()
       # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
       # @file                GCC response files
       # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
         func_quote_for_eval "$arg"
        arg="$func_quote_for_eval_result"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
-        compiler_flags="$compiler_flags $arg"
+        func_append compiler_flags " $arg"
         continue
         ;;
 
@@ -5108,7 +5857,7 @@ func_mode_link ()
 
       *.$objext)
        # A standard object.
-       objs="$objs $arg"
+       func_append objs " $arg"
        ;;
 
       *.lo)
@@ -5139,7 +5888,7 @@ func_mode_link ()
 
            if test "$prev" = dlfiles; then
              if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-               dlfiles="$dlfiles $pic_object"
+               func_append dlfiles " $pic_object"
                prev=
                continue
              else
@@ -5151,7 +5900,7 @@ func_mode_link ()
            # CHECK ME:  I think I busted this.  -Ossama
            if test "$prev" = dlprefiles; then
              # Preload the old-style object.
-             dlprefiles="$dlprefiles $pic_object"
+             func_append dlprefiles " $pic_object"
              prev=
            fi
 
@@ -5196,24 +5945,25 @@ func_mode_link ()
 
       *.$libext)
        # An archive.
-       deplibs="$deplibs $arg"
-       old_deplibs="$old_deplibs $arg"
+       func_append deplibs " $arg"
+       func_append old_deplibs " $arg"
        continue
        ;;
 
       *.la)
        # A libtool-controlled library.
 
+       func_resolve_sysroot "$arg"
        if test "$prev" = dlfiles; then
          # This library was specified with -dlopen.
-         dlfiles="$dlfiles $arg"
+         func_append dlfiles " $func_resolve_sysroot_result"
          prev=
        elif test "$prev" = dlprefiles; then
          # The library was specified with -dlpreopen.
-         dlprefiles="$dlprefiles $arg"
+         func_append dlprefiles " $func_resolve_sysroot_result"
          prev=
        else
-         deplibs="$deplibs $arg"
+         func_append deplibs " $func_resolve_sysroot_result"
        fi
        continue
        ;;
@@ -5260,6 +6010,8 @@ func_mode_link ()
 
     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"
 
@@ -5280,12 +6032,12 @@ func_mode_link ()
     # 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_duplicate_deps ; then
+      if $opt_preserve_dup_deps ; then
        case "$libs " in
-       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       *" $deplib "*) func_append specialdeplibs " $deplib" ;;
        esac
       fi
-      libs="$libs $deplib"
+      func_append libs " $deplib"
     done
 
     if test "$linkmode" = lib; then
@@ -5298,9 +6050,9 @@ func_mode_link ()
       if $opt_duplicate_compiler_generated_deps; then
        for pre_post_dep in $predeps $postdeps; do
          case "$pre_post_deps " in
-         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
          esac
-         pre_post_deps="$pre_post_deps $pre_post_dep"
+         func_append pre_post_deps " $pre_post_dep"
        done
       fi
       pre_post_deps=
@@ -5367,8 +6119,9 @@ func_mode_link ()
        for lib in $dlprefiles; do
          # Ignore non-libtool-libs
          dependency_libs=
+         func_resolve_sysroot "$lib"
          case $lib in
-         *.la) func_source "$lib" ;;
+         *.la) func_source "$func_resolve_sysroot_result" ;;
          esac
 
          # Collect preopened libtool deplibs, except any this library
@@ -5378,7 +6131,7 @@ func_mode_link ()
             deplib_base=$func_basename_result
            case " $weak_libs " in
            *" $deplib_base "*) ;;
-           *) deplibs="$deplibs $deplib" ;;
+           *) func_append deplibs " $deplib" ;;
            esac
          done
        done
@@ -5399,11 +6152,11 @@ func_mode_link ()
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
-           compiler_flags="$compiler_flags $deplib"
+           func_append compiler_flags " $deplib"
            if test "$linkmode" = lib ; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
-                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
                esac
            fi
          fi
@@ -5488,7 +6241,7 @@ func_mode_link ()
            if test "$linkmode" = lib ; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
-                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
                esac
            fi
          fi
@@ -5501,7 +6254,8 @@ func_mode_link ()
            test "$pass" = conv && continue
            newdependency_libs="$deplib $newdependency_libs"
            func_stripname '-L' '' "$deplib"
-           newlib_search_path="$newlib_search_path $func_stripname_result"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          prog)
            if test "$pass" = conv; then
@@ -5515,7 +6269,8 @@ func_mode_link ()
              finalize_deplibs="$deplib $finalize_deplibs"
            fi
            func_stripname '-L' '' "$deplib"
-           newlib_search_path="$newlib_search_path $func_stripname_result"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          *)
            func_warning "\`-L' is ignored for archives/objects"
@@ -5526,17 +6281,21 @@ func_mode_link ()
        -R*)
          if test "$pass" = link; then
            func_stripname '-R' '' "$deplib"
-           dir=$func_stripname_result
+           func_resolve_sysroot "$func_stripname_result"
+           dir=$func_resolve_sysroot_result
            # Make sure the xrpath contains only unique directories.
            case "$xrpath " in
            *" $dir "*) ;;
-           *) xrpath="$xrpath $dir" ;;
+           *) func_append xrpath " $dir" ;;
            esac
          fi
          deplibs="$deplib $deplibs"
          continue
          ;;
-       *.la) lib="$deplib" ;;
+       *.la)
+         func_resolve_sysroot "$deplib"
+         lib=$func_resolve_sysroot_result
+         ;;
        *.$libext)
          if test "$pass" = conv; then
            deplibs="$deplib $deplibs"
@@ -5599,11 +6358,11 @@ func_mode_link ()
            if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
              # If there is no dlopen support or we're linking statically,
              # we need to preload.
-             newdlprefiles="$newdlprefiles $deplib"
+             func_append newdlprefiles " $deplib"
              compile_deplibs="$deplib $compile_deplibs"
              finalize_deplibs="$deplib $finalize_deplibs"
            else
-             newdlfiles="$newdlfiles $deplib"
+             func_append newdlfiles " $deplib"
            fi
          fi
          continue
@@ -5649,7 +6408,7 @@ func_mode_link ()
          for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
            case " $new_inherited_linker_flags " in
              *" $tmp_inherited_linker_flag "*) ;;
-             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+             *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
            esac
          done
        fi
@@ -5657,8 +6416,8 @@ func_mode_link ()
        if test "$linkmode,$pass" = "lib,link" ||
           test "$linkmode,$pass" = "prog,scan" ||
           { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+         test -n "$dlopen" && func_append dlfiles " $dlopen"
+         test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
        fi
 
        if test "$pass" = conv; then
@@ -5669,20 +6428,20 @@ func_mode_link ()
              func_fatal_error "cannot find name of link library for \`$lib'"
            fi
            # It is a libtool convenience library, so add in its objects.
-           convenience="$convenience $ladir/$objdir/$old_library"
-           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+           func_append convenience " $ladir/$objdir/$old_library"
+           func_append old_convenience " $ladir/$objdir/$old_library"
          elif test "$linkmode" != prog && test "$linkmode" != lib; then
            func_fatal_error "\`$lib' is not a convenience library"
          fi
          tmp_libs=
          for deplib in $dependency_libs; do
            deplibs="$deplib $deplibs"
-           if $opt_duplicate_deps ; then
+           if $opt_preserve_dup_deps ; then
              case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
            fi
-           tmp_libs="$tmp_libs $deplib"
+           func_append tmp_libs " $deplib"
          done
          continue
        fi # $pass = conv
@@ -5690,9 +6449,15 @@ func_mode_link ()
 
        # Get the name of the library we link against.
        linklib=
-       for l in $old_library $library_names; do
-         linklib="$l"
-       done
+       if test -n "$old_library" &&
+          { test "$prefer_static_libs" = yes ||
+            test "$prefer_static_libs,$installed" = "built,no"; }; 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
@@ -5709,9 +6474,9 @@ func_mode_link ()
            # 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.
-           dlprefiles="$dlprefiles $lib $dependency_libs"
+           func_append dlprefiles " $lib $dependency_libs"
          else
-           newdlfiles="$newdlfiles $lib"
+           func_append newdlfiles " $lib"
          fi
          continue
        fi # $pass = dlopen
@@ -5733,14 +6498,14 @@ func_mode_link ()
 
        # Find the relevant object directory and library name.
        if test "X$installed" = Xyes; then
-         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; 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="$libdir"
-           absdir="$libdir"
+           dir="$lt_sysroot$libdir"
+           absdir="$lt_sysroot$libdir"
          fi
          test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
        else
@@ -5748,12 +6513,12 @@ func_mode_link ()
            dir="$ladir"
            absdir="$abs_ladir"
            # Remove this search path later
-           notinst_path="$notinst_path $abs_ladir"
+           func_append notinst_path " $abs_ladir"
          else
            dir="$ladir/$objdir"
            absdir="$abs_ladir/$objdir"
            # Remove this search path later
-           notinst_path="$notinst_path $abs_ladir"
+           func_append notinst_path " $abs_ladir"
          fi
        fi # $installed = yes
        func_stripname 'lib' '.la' "$laname"
@@ -5764,20 +6529,46 @@ func_mode_link ()
          if test -z "$libdir" && test "$linkmode" = prog; then
            func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
          fi
-         # Prefer using a static library (so that no silly _DYNAMIC symbols
-         # are required to link).
-         if test -n "$old_library"; then
-           newdlprefiles="$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" && \
-               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-         # Otherwise, use the dlname, so that lt_dlopen finds it.
-         elif test -n "$dlname"; then
-           newdlprefiles="$newdlprefiles $dir/$dlname"
-         else
-           newdlprefiles="$newdlprefiles $dir/$linklib"
-         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
@@ -5795,7 +6586,7 @@ func_mode_link ()
 
 
        if test "$linkmode" = prog && test "$pass" != link; then
-         newlib_search_path="$newlib_search_path $ladir"
+         func_append newlib_search_path " $ladir"
          deplibs="$lib $deplibs"
 
          linkalldeplibs=no
@@ -5808,7 +6599,8 @@ func_mode_link ()
          for deplib in $dependency_libs; do
            case $deplib in
            -L*) func_stripname '-L' '' "$deplib"
-                newlib_search_path="$newlib_search_path $func_stripname_result"
+                func_resolve_sysroot "$func_stripname_result"
+                func_append newlib_search_path " $func_resolve_sysroot_result"
                 ;;
            esac
            # Need to link against all dependency_libs?
@@ -5819,12 +6611,12 @@ func_mode_link ()
              # or/and link against static libraries
              newdependency_libs="$deplib $newdependency_libs"
            fi
-           if $opt_duplicate_deps ; then
+           if $opt_preserve_dup_deps ; then
              case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
            fi
-           tmp_libs="$tmp_libs $deplib"
+           func_append tmp_libs " $deplib"
          done # for deplib
          continue
        fi # $linkmode = prog...
@@ -5839,7 +6631,7 @@ func_mode_link ()
              # Make sure the rpath contains only unique directories.
              case "$temp_rpath:" in
              *"$absdir:"*) ;;
-             *) temp_rpath="$temp_rpath$absdir:" ;;
+             *) func_append temp_rpath "$absdir:" ;;
              esac
            fi
 
@@ -5851,7 +6643,7 @@ func_mode_link ()
            *)
              case "$compile_rpath " in
              *" $absdir "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
+             *) func_append compile_rpath " $absdir" ;;
              esac
              ;;
            esac
@@ -5860,7 +6652,7 @@ func_mode_link ()
            *)
              case "$finalize_rpath " in
              *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
+             *) func_append finalize_rpath " $libdir" ;;
              esac
              ;;
            esac
@@ -5885,12 +6677,12 @@ func_mode_link ()
          case $host in
          *cygwin* | *mingw* | *cegcc*)
              # No point in relinking DLLs because paths are not encoded
-             notinst_deplibs="$notinst_deplibs $lib"
+             func_append notinst_deplibs " $lib"
              need_relink=no
            ;;
          *)
            if test "$installed" = no; then
-             notinst_deplibs="$notinst_deplibs $lib"
+             func_append notinst_deplibs " $lib"
              need_relink=yes
            fi
            ;;
@@ -5925,7 +6717,7 @@ func_mode_link ()
            *)
              case "$compile_rpath " in
              *" $absdir "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
+             *) func_append compile_rpath " $absdir" ;;
              esac
              ;;
            esac
@@ -5934,7 +6726,7 @@ func_mode_link ()
            *)
              case "$finalize_rpath " in
              *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
+             *) func_append finalize_rpath " $libdir" ;;
              esac
              ;;
            esac
@@ -5988,7 +6780,7 @@ func_mode_link ()
            linklib=$newlib
          fi # test -n "$old_archive_from_expsyms_cmds"
 
-         if test "$linkmode" = prog || test "$mode" != relink; then
+         if test "$linkmode" = prog || test "$opt_mode" != relink; then
            add_shlibpath=
            add_dir=
            add=
@@ -6044,7 +6836,7 @@ func_mode_link ()
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
                    [\\/]*)
-                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     func_append add_dir " -L$inst_prefix_dir$libdir"
                      ;;
                  esac
                fi
@@ -6066,7 +6858,7 @@ func_mode_link ()
            if test -n "$add_shlibpath"; then
              case :$compile_shlibpath: in
              *":$add_shlibpath:"*) ;;
-             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             *) func_append compile_shlibpath "$add_shlibpath:" ;;
              esac
            fi
            if test "$linkmode" = prog; then
@@ -6080,13 +6872,13 @@ func_mode_link ()
                 test "$hardcode_shlibpath_var" = yes; then
                case :$finalize_shlibpath: in
                *":$libdir:"*) ;;
-               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               *) func_append finalize_shlibpath "$libdir:" ;;
                esac
              fi
            fi
          fi
 
-         if test "$linkmode" = prog || test "$mode" = relink; then
+         if test "$linkmode" = prog || test "$opt_mode" = relink; then
            add_shlibpath=
            add_dir=
            add=
@@ -6100,7 +6892,7 @@ func_mode_link ()
            elif test "$hardcode_shlibpath_var" = yes; then
              case :$finalize_shlibpath: in
              *":$libdir:"*) ;;
-             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             *) func_append finalize_shlibpath "$libdir:" ;;
              esac
              add="-l$name"
            elif test "$hardcode_automatic" = yes; then
@@ -6117,7 +6909,7 @@ func_mode_link ()
              if test -n "$inst_prefix_dir"; then
                case $libdir in
                  [\\/]*)
-                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   func_append add_dir " -L$inst_prefix_dir$libdir"
                    ;;
                esac
              fi
@@ -6194,27 +6986,33 @@ func_mode_link ()
                   temp_xrpath=$func_stripname_result
                   case " $xrpath " in
                   *" $temp_xrpath "*) ;;
-                  *) xrpath="$xrpath $temp_xrpath";;
+                  *) func_append xrpath " $temp_xrpath";;
                   esac;;
-             *) temp_deplibs="$temp_deplibs $libdir";;
+             *) func_append temp_deplibs " $libdir";;
              esac
            done
            dependency_libs="$temp_deplibs"
          fi
 
-         newlib_search_path="$newlib_search_path $absdir"
+         func_append newlib_search_path " $absdir"
          # Link against this library
          test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
          # ... and its dependency_libs
          tmp_libs=
          for deplib in $dependency_libs; do
            newdependency_libs="$deplib $newdependency_libs"
-           if $opt_duplicate_deps ; then
+           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
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
              esac
            fi
-           tmp_libs="$tmp_libs $deplib"
+           func_append tmp_libs " $func_resolve_sysroot_result"
          done
 
          if test "$link_all_deplibs" != no; then
@@ -6224,8 +7022,10 @@ func_mode_link ()
              case $deplib in
              -L*) path="$deplib" ;;
              *.la)
+               func_resolve_sysroot "$deplib"
+               deplib=$func_resolve_sysroot_result
                func_dirname "$deplib" "" "."
-               dir="$func_dirname_result"
+               dir=$func_dirname_result
                # We need an absolute path.
                case $dir in
                [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -6252,8 +7052,8 @@ func_mode_link ()
                       if test -z "$darwin_install_name"; then
                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     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
@@ -6303,7 +7103,7 @@ func_mode_link ()
          for dir in $newlib_search_path; do
            case "$lib_search_path " in
            *" $dir "*) ;;
-           *) lib_search_path="$lib_search_path $dir" ;;
+           *) func_append lib_search_path " $dir" ;;
            esac
          done
          newlib_search_path=
@@ -6361,10 +7161,10 @@ func_mode_link ()
            -L*)
              case " $tmp_libs " in
              *" $deplib "*) ;;
-             *) tmp_libs="$tmp_libs $deplib" ;;
+             *) func_append tmp_libs " $deplib" ;;
              esac
              ;;
-           *) tmp_libs="$tmp_libs $deplib" ;;
+           *) func_append tmp_libs " $deplib" ;;
            esac
          done
          eval $var=\"$tmp_libs\"
@@ -6380,7 +7180,7 @@ func_mode_link ()
          ;;
        esac
        if test -n "$i" ; then
-         tmp_libs="$tmp_libs $i"
+         func_append tmp_libs " $i"
        fi
       done
       dependency_libs=$tmp_libs
@@ -6421,7 +7221,7 @@ func_mode_link ()
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
-      objs="$objs$old_deplibs"
+      func_append objs "$old_deplibs"
       ;;
 
     lib)
@@ -6457,7 +7257,7 @@ func_mode_link ()
          echo
          $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
          $ECHO "*** objects $objs is not portable!"
-         libobjs="$libobjs $objs"
+         func_append libobjs " $objs"
        fi
       fi
 
@@ -6655,7 +7455,7 @@ func_mode_link ()
          done
 
          # Make executables depend on our current version.
-         verstring="$verstring:${current}.0"
+         func_append verstring ":${current}.0"
          ;;
 
        qnx)
@@ -6723,10 +7523,10 @@ func_mode_link ()
       fi
 
       func_generate_dlsyms "$libname" "$libname" "yes"
-      libobjs="$libobjs $symfileobj"
+      func_append libobjs " $symfileobj"
       test "X$libobjs" = "X " && libobjs=
 
-      if test "$mode" != relink; then
+      if test "$opt_mode" != relink; then
        # Remove our outputs, but don't remove object files since they
        # may have been created when compiling PIC objects.
        removelist=
@@ -6742,7 +7542,7 @@ func_mode_link ()
                   continue
                 fi
               fi
-              removelist="$removelist $p"
+              func_append removelist " $p"
               ;;
            *) ;;
          esac
@@ -6753,7 +7553,7 @@ func_mode_link ()
 
       # Now set the variables for building old libraries.
       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+       func_append oldlibs " $output_objdir/$libname.$libext"
 
        # Transform .lo files to .o files.
        oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
@@ -6770,10 +7570,11 @@ func_mode_link ()
        # If the user specified any rpath flags, then add them.
        temp_xrpath=
        for libdir in $xrpath; do
-         temp_xrpath="$temp_xrpath -R$libdir"
+         func_replace_sysroot "$libdir"
+         func_append temp_xrpath " -R$func_replace_sysroot_result"
          case "$finalize_rpath " in
          *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         *) func_append finalize_rpath " $libdir" ;;
          esac
        done
        if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6787,7 +7588,7 @@ func_mode_link ()
       for lib in $old_dlfiles; do
        case " $dlprefiles $dlfiles " in
        *" $lib "*) ;;
-       *) dlfiles="$dlfiles $lib" ;;
+       *) func_append dlfiles " $lib" ;;
        esac
       done
 
@@ -6797,7 +7598,7 @@ func_mode_link ()
       for lib in $old_dlprefiles; do
        case "$dlprefiles " in
        *" $lib "*) ;;
-       *) dlprefiles="$dlprefiles $lib" ;;
+       *) func_append dlprefiles " $lib" ;;
        esac
       done
 
@@ -6809,7 +7610,7 @@ func_mode_link ()
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C library is in the System framework
-           deplibs="$deplibs System.ltframework"
+           func_append deplibs " System.ltframework"
            ;;
          *-*-netbsd*)
            # Don't link with libc until the a.out ld.so is fixed.
@@ -6826,7 +7627,7 @@ func_mode_link ()
          *)
            # Add libc to deplibs on all other systems if necessary.
            if test "$build_libtool_need_lc" = "yes"; then
-             deplibs="$deplibs -lc"
+             func_append deplibs " -lc"
            fi
            ;;
          esac
@@ -6875,7 +7676,7 @@ EOF
                if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                  case " $predeps $postdeps " in
                  *" $i "*)
-                   newdeplibs="$newdeplibs $i"
+                   func_append newdeplibs " $i"
                    i=""
                    ;;
                  esac
@@ -6886,7 +7687,7 @@ EOF
                  set dummy $deplib_matches; shift
                  deplib_match=$1
                  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                   newdeplibs="$newdeplibs $i"
+                   func_append newdeplibs " $i"
                  else
                    droppeddeps=yes
                    echo
@@ -6900,7 +7701,7 @@ EOF
                fi
                ;;
              *)
-               newdeplibs="$newdeplibs $i"
+               func_append newdeplibs " $i"
                ;;
              esac
            done
@@ -6918,7 +7719,7 @@ EOF
                  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                    case " $predeps $postdeps " in
                    *" $i "*)
-                     newdeplibs="$newdeplibs $i"
+                     func_append newdeplibs " $i"
                      i=""
                      ;;
                    esac
@@ -6929,7 +7730,7 @@ EOF
                    set dummy $deplib_matches; shift
                    deplib_match=$1
                    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                     newdeplibs="$newdeplibs $i"
+                     func_append newdeplibs " $i"
                    else
                      droppeddeps=yes
                      echo
@@ -6951,7 +7752,7 @@ EOF
                fi
                ;;
              *)
-               newdeplibs="$newdeplibs $i"
+               func_append newdeplibs " $i"
                ;;
              esac
            done
@@ -6968,15 +7769,27 @@ EOF
              if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
-                 newdeplibs="$newdeplibs $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 "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 if test "$want_nocaseglob" = yes; 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 |
@@ -6999,7 +7812,7 @@ EOF
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
                         $SED -e 10q |
                         $EGREP "$file_magic_regex" > /dev/null; then
-                       newdeplibs="$newdeplibs $a_deplib"
+                       func_append newdeplibs " $a_deplib"
                        a_deplib=""
                        break 2
                      fi
@@ -7024,7 +7837,7 @@ EOF
              ;;
            *)
              # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
+             func_append newdeplibs " $a_deplib"
              ;;
            esac
          done # Gone through all deplibs.
@@ -7040,7 +7853,7 @@ EOF
              if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
-                 newdeplibs="$newdeplibs $a_deplib"
+                 func_append newdeplibs " $a_deplib"
                  a_deplib=""
                  ;;
                esac
@@ -7053,7 +7866,7 @@ EOF
                    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
-                     newdeplibs="$newdeplibs $a_deplib"
+                     func_append newdeplibs " $a_deplib"
                      a_deplib=""
                      break 2
                    fi
@@ -7078,7 +7891,7 @@ EOF
              ;;
            *)
              # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
+             func_append newdeplibs " $a_deplib"
              ;;
            esac
          done # Gone through all deplibs.
@@ -7182,7 +7995,7 @@ EOF
        *)
          case " $deplibs " in
          *" -L$path/$objdir "*)
-           new_libs="$new_libs -L$path/$objdir" ;;
+           func_append new_libs " -L$path/$objdir" ;;
          esac
          ;;
        esac
@@ -7192,10 +8005,10 @@ EOF
        -L*)
          case " $new_libs " in
          *" $deplib "*) ;;
-         *) new_libs="$new_libs $deplib" ;;
+         *) func_append new_libs " $deplib" ;;
          esac
          ;;
-       *) new_libs="$new_libs $deplib" ;;
+       *) func_append new_libs " $deplib" ;;
        esac
       done
       deplibs="$new_libs"
@@ -7212,10 +8025,12 @@ EOF
          hardcode_libdirs=
          dep_rpath=
          rpath="$finalize_rpath"
-         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         test "$opt_mode" != relink && 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
@@ -7224,18 +8039,18 @@ EOF
                  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
                    ;;
                  *)
-                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
                    ;;
                  esac
                fi
              else
                eval flag=\"$hardcode_libdir_flag_spec\"
-               dep_rpath="$dep_rpath $flag"
+               func_append dep_rpath " $flag"
              fi
            elif test -n "$runpath_var"; then
              case "$perm_rpath " in
              *" $libdir "*) ;;
-             *) perm_rpath="$perm_rpath $libdir" ;;
+             *) func_apped perm_rpath " $libdir" ;;
              esac
            fi
          done
@@ -7253,7 +8068,7 @@ EOF
            # We should set the runpath_var.
            rpath=
            for dir in $perm_rpath; do
-             rpath="$rpath$dir:"
+             func_append rpath "$dir:"
            done
            eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
          fi
@@ -7261,7 +8076,7 @@ EOF
        fi
 
        shlibpath="$finalize_shlibpath"
-       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
        if test -n "$shlibpath"; then
          eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
        fi
@@ -7287,7 +8102,7 @@ EOF
        linknames=
        for link
        do
-         linknames="$linknames $link"
+         func_append linknames " $link"
        done
 
        # Use standard objects if they are pic
@@ -7298,7 +8113,7 @@ EOF
        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"
-         delfiles="$delfiles $export_symbols"
+         func_append delfiles " $export_symbols"
        fi
 
        orig_export_symbols=
@@ -7329,13 +8144,45 @@ EOF
            $opt_dry_run || $RM $export_symbols
            cmds=$export_symbols_cmds
            save_ifs="$IFS"; IFS='~'
-           for cmd in $cmds; do
+           for cmd1 in $cmds; do
              IFS="$save_ifs"
-             eval cmd=\"$cmd\"
-             func_len " $cmd"
-             len=$func_len_result
-             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+             # 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 "$try_normal_branch" = yes \
+                && { 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.
@@ -7369,7 +8216,7 @@ EOF
          # 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
-         delfiles="$delfiles $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
@@ -7379,7 +8226,7 @@ EOF
          case " $convenience " in
          *" $test_deplib "*) ;;
          *)
-           tmp_deplibs="$tmp_deplibs $test_deplib"
+           func_append tmp_deplibs " $test_deplib"
            ;;
          esac
        done
@@ -7399,21 +8246,21 @@ EOF
            test "X$libobjs" = "X " && libobjs=
          else
            gentop="$output_objdir/${outputname}x"
-           generated="$generated $gentop"
+           func_append generated " $gentop"
 
            func_extract_archives $gentop $convenience
-           libobjs="$libobjs $func_extract_archives_result"
+           func_append libobjs " $func_extract_archives_result"
            test "X$libobjs" = "X " && libobjs=
          fi
        fi
 
        if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
          eval flag=\"$thread_safe_flag_spec\"
-         linker_flags="$linker_flags $flag"
+         func_append linker_flags " $flag"
        fi
 
        # Make a backup of the uninstalled library when relinking
-       if test "$mode" = relink; then
+       if test "$opt_mode" = relink; then
          $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
        fi
 
@@ -7475,10 +8322,13 @@ EOF
            echo 'INPUT (' > $output
            for obj in $save_libobjs
            do
-             $ECHO "$obj" >> $output
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
            done
            echo ')' >> $output
-           delfiles="$delfiles $output"
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$func_to_tool_file_result
          elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
            output=${output_objdir}/${output_la}.lnk
            func_verbose "creating linker input file list: $output"
@@ -7492,10 +8342,12 @@ EOF
            fi
            for obj
            do
-             $ECHO "$obj" >> $output
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
            done
-           delfiles="$delfiles $output"
-           output=$firstobj\"$file_list_spec$output\"
+           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..."
@@ -7546,7 +8398,7 @@ EOF
              if test -n "$last_robj"; then
                eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
              fi
-             delfiles="$delfiles $output"
+             func_append delfiles " $output"
 
            else
              output=
@@ -7580,7 +8432,7 @@ EOF
                lt_exit=$?
 
                # Restore the uninstalled library and exit
-               if test "$mode" = relink; then
+               if test "$opt_mode" = relink; then
                  ( cd "$output_objdir" && \
                    $RM "${realname}T" && \
                    $MV "${realname}U" "$realname" )
@@ -7613,7 +8465,7 @@ EOF
              # 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
-             delfiles="$delfiles $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
@@ -7654,10 +8506,10 @@ EOF
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
          gentop="$output_objdir/${outputname}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
-         libobjs="$libobjs $func_extract_archives_result"
+         func_append libobjs " $func_extract_archives_result"
          test "X$libobjs" = "X " && libobjs=
        fi
 
@@ -7673,7 +8525,7 @@ EOF
            lt_exit=$?
 
            # Restore the uninstalled library and exit
-           if test "$mode" = relink; then
+           if test "$opt_mode" = relink; then
              ( cd "$output_objdir" && \
                $RM "${realname}T" && \
                $MV "${realname}U" "$realname" )
@@ -7685,7 +8537,7 @@ EOF
        IFS="$save_ifs"
 
        # Restore the uninstalled library and exit
-       if test "$mode" = relink; then
+       if test "$opt_mode" = relink; 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
@@ -7769,13 +8621,16 @@ EOF
          reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
        else
          gentop="$output_objdir/${obj}x"
-         generated="$generated $gentop"
+         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 "$build_libtool_libs" != yes && 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" ### testsuite: skip nested quoting test
 
@@ -7849,8 +8704,8 @@ EOF
        if test "$tagname" = CXX ; then
          case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
            10.[0123])
-             compile_command="$compile_command ${wl}-bind_at_load"
-             finalize_command="$finalize_command ${wl}-bind_at_load"
+             func_append compile_command " ${wl}-bind_at_load"
+             func_append finalize_command " ${wl}-bind_at_load"
            ;;
          esac
        fi
@@ -7870,7 +8725,7 @@ EOF
        *)
          case " $compile_deplibs " in
          *" -L$path/$objdir "*)
-           new_libs="$new_libs -L$path/$objdir" ;;
+           func_append new_libs " -L$path/$objdir" ;;
          esac
          ;;
        esac
@@ -7880,17 +8735,17 @@ EOF
        -L*)
          case " $new_libs " in
          *" $deplib "*) ;;
-         *) new_libs="$new_libs $deplib" ;;
+         *) func_append new_libs " $deplib" ;;
          esac
          ;;
-       *) new_libs="$new_libs $deplib" ;;
+       *) func_append new_libs " $deplib" ;;
        esac
       done
       compile_deplibs="$new_libs"
 
 
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
+      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.
@@ -7898,7 +8753,7 @@ EOF
          # This is the magic to use -rpath.
          case "$finalize_rpath " in
          *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         *) func_append finalize_rpath " $libdir" ;;
          esac
        done
       fi
@@ -7917,18 +8772,18 @@ EOF
              *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
                ;;
              *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
                ;;
              esac
            fi
          else
            eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
+           func_append rpath " $flag"
          fi
        elif test -n "$runpath_var"; then
          case "$perm_rpath " in
          *" $libdir "*) ;;
-         *) perm_rpath="$perm_rpath $libdir" ;;
+         *) func_append perm_rpath " $libdir" ;;
          esac
        fi
        case $host in
@@ -7937,12 +8792,12 @@ EOF
          case :$dllsearchpath: in
          *":$libdir:"*) ;;
          ::) dllsearchpath=$libdir;;
-         *) dllsearchpath="$dllsearchpath:$libdir";;
+         *) func_append dllsearchpath ":$libdir";;
          esac
          case :$dllsearchpath: in
          *":$testbindir:"*) ;;
          ::) dllsearchpath=$testbindir;;
-         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         *) func_append dllsearchpath ":$testbindir";;
          esac
          ;;
        esac
@@ -7968,18 +8823,18 @@ EOF
              *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
                ;;
              *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
                ;;
              esac
            fi
          else
            eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
+           func_append rpath " $flag"
          fi
        elif test -n "$runpath_var"; then
          case "$finalize_perm_rpath " in
          *" $libdir "*) ;;
-         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         *) func_append finalize_perm_rpath " $libdir" ;;
          esac
        fi
       done
@@ -8030,6 +8885,12 @@ EOF
        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}"'
@@ -8052,7 +8913,7 @@ EOF
          # We should set the runpath_var.
          rpath=
          for dir in $perm_rpath; do
-           rpath="$rpath$dir:"
+           func_append rpath "$dir:"
          done
          compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
        fi
@@ -8060,7 +8921,7 @@ EOF
          # We should set the runpath_var.
          rpath=
          for dir in $finalize_perm_rpath; do
-           rpath="$rpath$dir:"
+           func_append rpath "$dir:"
          done
          finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
        fi
@@ -8075,6 +8936,13 @@ EOF
        $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
 
@@ -8108,6 +8976,12 @@ EOF
 
       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"
 
@@ -8205,7 +9079,7 @@ EOF
        else
          oldobjs="$old_deplibs $non_pic_objects"
          if test "$preload" = yes && test -f "$symfileobj"; then
-           oldobjs="$oldobjs $symfileobj"
+           func_append oldobjs " $symfileobj"
          fi
        fi
        addlibs="$old_convenience"
@@ -8213,10 +9087,10 @@ EOF
 
       if test -n "$addlibs"; then
        gentop="$output_objdir/${outputname}x"
-       generated="$generated $gentop"
+       func_append generated " $gentop"
 
        func_extract_archives $gentop $addlibs
-       oldobjs="$oldobjs $func_extract_archives_result"
+       func_append oldobjs " $func_extract_archives_result"
       fi
 
       # Do each command in the archive commands.
@@ -8227,10 +9101,10 @@ EOF
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
          gentop="$output_objdir/${outputname}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
-         oldobjs="$oldobjs $func_extract_archives_result"
+         func_append oldobjs " $func_extract_archives_result"
        fi
 
        # POSIX demands no paths to be encoded in archives.  We have
@@ -8248,7 +9122,7 @@ EOF
        else
          echo "copying selected object files to avoid basename conflicts..."
          gentop="$output_objdir/${outputname}x"
-         generated="$generated $gentop"
+         func_append generated " $gentop"
          func_mkdir_p "$gentop"
          save_oldobjs=$oldobjs
          oldobjs=
@@ -8272,9 +9146,9 @@ EOF
                esac
              done
              func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-             oldobjs="$oldobjs $gentop/$newobj"
+             func_append oldobjs " $gentop/$newobj"
              ;;
-           *) oldobjs="$oldobjs $obj" ;;
+           *) func_append oldobjs " $obj" ;;
            esac
          done
        fi
@@ -8284,6 +9158,16 @@ EOF
        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..."
@@ -8380,9 +9264,19 @@ EOF
                eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
                test -z "$libdir" && \
                  func_fatal_error "\`$deplib' is not a valid libtool archive"
-               newdependency_libs="$newdependency_libs $libdir/$name"
+               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"
                ;;
-             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             *) func_append newdependency_libs " $deplib" ;;
              esac
            done
            dependency_libs="$newdependency_libs"
@@ -8396,9 +9290,9 @@ EOF
                eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
                test -z "$libdir" && \
                  func_fatal_error "\`$lib' is not a valid libtool archive"
-               newdlfiles="$newdlfiles $libdir/$name"
+               func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
-             *) newdlfiles="$newdlfiles $lib" ;;
+             *) func_append newdlfiles " $lib" ;;
              esac
            done
            dlfiles="$newdlfiles"
@@ -8415,7 +9309,7 @@ EOF
                eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
                test -z "$libdir" && \
                  func_fatal_error "\`$lib' is not a valid libtool archive"
-               newdlprefiles="$newdlprefiles $libdir/$name"
+               func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              esac
            done
@@ -8427,7 +9321,7 @@ EOF
                [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
                *) abs=`pwd`"/$lib" ;;
              esac
-             newdlfiles="$newdlfiles $abs"
+             func_append newdlfiles " $abs"
            done
            dlfiles="$newdlfiles"
            newdlprefiles=
@@ -8436,7 +9330,7 @@ EOF
                [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
                *) abs=`pwd`"/$lib" ;;
              esac
-             newdlprefiles="$newdlprefiles $abs"
+             func_append newdlprefiles " $abs"
            done
            dlprefiles="$newdlprefiles"
          fi
@@ -8521,7 +9415,7 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
     func_mode_link ${1+"$@"}
 
 
@@ -8541,9 +9435,9 @@ func_mode_uninstall ()
     for arg
     do
       case $arg in
-      -f) RM="$RM $arg"; rmforce=yes ;;
-      -*) RM="$RM $arg" ;;
-      *) files="$files $arg" ;;
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
       esac
     done
 
@@ -8552,24 +9446,23 @@ func_mode_uninstall ()
 
     rmdirs=
 
-    origobjdir="$objdir"
     for file in $files; do
       func_dirname "$file" "" "."
       dir="$func_dirname_result"
       if test "X$dir" = X.; then
-       objdir="$origobjdir"
+       odir="$objdir"
       else
-       objdir="$dir/$origobjdir"
+       odir="$dir/$objdir"
       fi
       func_basename "$file"
       name="$func_basename_result"
-      test "$mode" = uninstall && objdir="$dir"
+      test "$opt_mode" = uninstall && odir="$dir"
 
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
        case " $rmdirs " in
-         *" $objdir "*) ;;
-         *) rmdirs="$rmdirs $objdir" ;;
+         *" $odir "*) ;;
+         *) func_append rmdirs " $odir" ;;
        esac
       fi
 
@@ -8595,18 +9488,17 @@ func_mode_uninstall ()
 
          # Delete the libtool libraries and symlinks.
          for n in $library_names; do
-           rmfiles="$rmfiles $objdir/$n"
+           func_append rmfiles " $odir/$n"
          done
-         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+         test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-         case "$mode" in
+         case "$opt_mode" in
          clean)
-           case "  $library_names " in
-           # "  " in the beginning catches empty $dlname
+           case " $library_names " in
            *" $dlname "*) ;;
-           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
            esac
-           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
            ;;
          uninstall)
            if test -n "$library_names"; then
@@ -8634,19 +9526,19 @@ func_mode_uninstall ()
          # Add PIC object to the list of files to remove.
          if test -n "$pic_object" &&
             test "$pic_object" != none; then
-           rmfiles="$rmfiles $dir/$pic_object"
+           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 "$non_pic_object" != none; then
-           rmfiles="$rmfiles $dir/$non_pic_object"
+           func_append rmfiles " $dir/$non_pic_object"
          fi
        fi
        ;;
 
       *)
-       if test "$mode" = clean ; then
+       if test "$opt_mode" = clean ; then
          noexename=$name
          case $file in
          *.exe)
@@ -8656,7 +9548,7 @@ func_mode_uninstall ()
            noexename=$func_stripname_result
            # $file with .exe has already been added to rmfiles,
            # add $file without .exe
-           rmfiles="$rmfiles $file"
+           func_append rmfiles " $file"
            ;;
          esac
          # Do a test to see if this is a libtool program.
@@ -8665,7 +9557,7 @@ func_mode_uninstall ()
              func_ltwrapper_scriptname "$file"
              relink_command=
              func_source $func_ltwrapper_scriptname_result
-             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+             func_append rmfiles " $func_ltwrapper_scriptname_result"
            else
              relink_command=
              func_source $dir/$noexename
@@ -8673,12 +9565,12 @@ func_mode_uninstall ()
 
            # note $name still contains .exe if it was in $file originally
            # as does the version of $file that was added into $rmfiles
-           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
            if test "$fast_install" = yes && test -n "$relink_command"; then
-             rmfiles="$rmfiles $objdir/lt-$name"
+             func_append rmfiles " $odir/lt-$name"
            fi
            if test "X$noexename" != "X$name" ; then
-             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+             func_append rmfiles " $odir/lt-${noexename}.c"
            fi
          fi
        fi
@@ -8686,7 +9578,6 @@ func_mode_uninstall ()
       esac
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
-    objdir="$origobjdir"
 
     # Try to remove the ${objdir}s in the directories where we deleted files
     for dir in $rmdirs; do
@@ -8698,16 +9589,16 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
     func_mode_uninstall ${1+"$@"}
 
-test -z "$mode" && {
+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 \`$mode'"
+  func_fatal_help "invalid operation mode \`$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
index 22924a86f47d92afd9dd5344b7a5b61a4346f2dc..d8125842f0a8a5e3a7d2d30a08f8909befa9aeca 100644 (file)
@@ -168,10 +168,13 @@ _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
 
 _LT_CONFIG_LIBTOOL_INIT([
 # See if we are running on zsh, and set the options which allow our
@@ -748,15 +751,12 @@ _LT_EOF
   # 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
 
-  _LT_PROG_XSI_SHELLFNS
+  _LT_PROG_REPLACE_SHELLFNS
 
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 ],
@@ -1073,30 +1073,41 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   fi
 ])
 
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _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
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+if test "${lt_cv_aix_libpath+set}" = 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
 
 
@@ -1121,7 +1132,7 @@ 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 && \
+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
@@ -1165,6 +1176,39 @@ _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],
+[  --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 "$GCC" = yes; 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 in which our libraries should be installed.])])
+
 # _LT_ENABLE_LOCK
 # ---------------
 m4_defun([_LT_ENABLE_LOCK],
@@ -1311,14 +1355,47 @@ 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 "$ac_status" -eq 0; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       AC_TRY_EVAL([lt_ar_try])
+       if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; 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],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
+[_LT_PROG_AR
 
 AC_CHECK_TOOL(STRIP, strip, :)
 test -z "$STRIP" && STRIP=:
@@ -1658,10 +1735,10 @@ else
 /* When -fvisbility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
 #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-void fnord () __attribute__((visibility("default")));
+int fnord () __attribute__((visibility("default")));
 #endif
 
-void fnord () { int i=42; }
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -2201,8 +2278,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  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}`~
@@ -2235,13 +2313,71 @@ m4_if([$1], [],[
       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
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -2945,6 +3081,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -3163,6 +3304,21 @@ tpf*)
   ;;
 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
@@ -3170,7 +3326,11 @@ 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"])
+    [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
 
 
@@ -3273,6 +3433,67 @@ 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 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 "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
 
 # LT_LIB_M
 # --------
@@ -3399,8 +3620,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$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 -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3436,6 +3657,7 @@ for ac_symprfx in "" "_"; do
   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
@@ -3469,6 +3691,18 @@ _LT_EOF
       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 con'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
@@ -3480,7 +3714,7 @@ _LT_EOF
          cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT@&t@_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -3506,15 +3740,15 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
          # Now try linking the two files.
          mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
+         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_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
        else
          echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
        fi
@@ -3547,6 +3781,13 @@ 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],
@@ -3557,6 +3798,8 @@ _LT_DECL([global_symbol_to_c_name_address],
 _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_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
 
 
@@ -3568,7 +3811,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
 _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
-AC_MSG_CHECKING([for $compiler option to produce PIC])
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -3673,6 +3915,12 @@ m4_if([$1], [CXX], [
          ;;
        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++*)
@@ -4047,6 +4295,12 @@ m4_if([$1], [CXX], [
        _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'
+       ;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
@@ -4166,9 +4420,11 @@ case $host_os in
     _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_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-       [How to pass a linker flag through the compiler])
+
+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.
@@ -4187,6 +4443,8 @@ 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.
 #
@@ -4207,6 +4465,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
 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
@@ -4215,6 +4474,7 @@ 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.
@@ -4229,15 +4489,20 @@ m4_if([$1], [CXX], [
     ;;
   pw32*)
     _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    case $cc_basename in
+    cl*) ;;
+    *)
+      _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
+    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
 ], [
   runpath_var=
   _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -4405,7 +4670,8 @@ _LT_EOF
       _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/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+      _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'
@@ -4453,7 +4719,7 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
         && test "$tmp_diet" = no
       then
-       tmp_addflag=
+       tmp_addflag=' $pic_flag'
        tmp_sharedflag='-shared'
        case $cc_basename,$host_cpu in
         pgcc*)                         # Portland Group C compiler
@@ -4523,8 +4789,8 @@ _LT_EOF
        _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       _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'
+       _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
       ;;
 
@@ -4542,8 +4808,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _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'
+       _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
@@ -4589,8 +4855,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _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'
+       _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
@@ -4720,7 +4986,7 @@ _LT_EOF
        _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
@@ -4731,7 +4997,7 @@ _LT_EOF
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _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.
@@ -4775,20 +5041,63 @@ _LT_EOF
       # Microsoft Visual C++.
       # 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
-      # 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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      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~linknames='
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+         else
+           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $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(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*)
@@ -4826,7 +5135,7 @@ _LT_EOF
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _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
@@ -4834,7 +5143,7 @@ _LT_EOF
 
     hpux9*)
       if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+       _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 $output_objdir/$soname = $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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -4850,7 +5159,7 @@ _LT_EOF
 
     hpux10*)
       if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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'
       else
        _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -4874,10 +5183,10 @@ _LT_EOF
          _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 -fPIC ${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}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -4924,16 +5233,31 @@ _LT_EOF
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $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'
+       _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.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $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'
-        )
-        LDFLAGS="$save_LDFLAGS"
+       # 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 "$lt_cv_irix_exported_symbol" = yes; 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
       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'
@@ -5018,7 +5342,7 @@ _LT_EOF
     osf4* | osf5*)     # as osf3* with the addition of -msym flag
       if test "$GCC" = yes; 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}-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(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 \*'
@@ -5037,9 +5361,9 @@ _LT_EOF
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
       if test "$GCC" = yes; then
        wlarc='${wl}'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*)
@@ -5311,8 +5635,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
     to runtime path list])
 _LT_TAGDECL([], [link_all_deplibs], [0],
     [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
 _LT_TAGDECL([], [always_export_symbols], [0],
     [Set to "yes" if exported symbols are required])
 _LT_TAGDECL([], [export_symbols_cmds], [2],
@@ -5323,6 +5645,8 @@ _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
@@ -5424,6 +5748,7 @@ CC="$lt_save_CC"
 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 "X$CXX" != "Xno" &&
     ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
     (test "X$CXX" != "Xg++"))) ; then
@@ -5485,6 +5810,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
   # 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
@@ -5502,6 +5828,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -5523,8 +5850,8 @@ if test "$_lt_caught_CXX_error" != yes; then
       # 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 "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -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(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'
@@ -5665,7 +5992,7 @@ if test "$_lt_caught_CXX_error" != yes; then
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          _LT_SYS_MODULE_PATH_AIX
+          _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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
@@ -5677,7 +6004,7 @@ if test "$_lt_caught_CXX_error" != yes; then
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
-           _LT_SYS_MODULE_PATH_AIX
+           _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.
@@ -5719,29 +6046,75 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       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
-
-        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 (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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
-        ;;
+       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~linknames='
+         _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+             $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+           else
+             $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $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 (1st line
+           # is EXPORTS), use it as is; otherwise, prepend...
+           _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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)
        ;;
@@ -5816,7 +6189,7 @@ if test "$_lt_caught_CXX_error" != yes; then
             ;;
           *)
             if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              _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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5887,10 +6260,10 @@ if test "$_lt_caught_CXX_error" != yes; then
                    _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 -fPIC ${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}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  *)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -5931,9 +6304,9 @@ if test "$_lt_caught_CXX_error" != yes; then
           *)
            if test "$GXX" = yes; then
              if test "$with_gnu_ld" = no; then
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -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'
+               _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 -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'
+               _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
@@ -6211,7 +6584,7 @@ if test "$_lt_caught_CXX_error" != yes; then
                  _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 -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'
+                 _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
 
@@ -6298,9 +6671,9 @@ if test "$_lt_caught_CXX_error" != yes; then
            if test "$GXX" = yes && test "$with_gnu_ld" = no; 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 -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $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 -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                 $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -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
@@ -6429,6 +6802,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -6443,6 +6817,29 @@ 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 ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -6451,6 +6848,7 @@ AC_LANG_POP
 # 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)=
@@ -6501,6 +6899,13 @@ public class foo {
 };
 _LT_EOF
 ])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
 dnl Parse the compiler output and extract the necessary
 dnl objects, libraries and library flags.
 if AC_TRY_EVAL(ac_compile); then
@@ -6512,7 +6917,7 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -6521,13 +6926,22 @@ if AC_TRY_EVAL(ac_compile); then
           test $p = "-R"; then
         prev=$p
         continue
-       else
-        prev=
        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 "$pre_test_object_deps_done" = no; then
-        case $p in
-        -L* | -R*)
+        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.
@@ -6547,8 +6961,10 @@ if AC_TRY_EVAL(ac_compile); then
           _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.
@@ -6584,6 +7000,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 m4_if([$1], [CXX],
@@ -6733,7 +7150,9 @@ if test "$_lt_disable_F77" != yes; then
   # 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])
@@ -6787,6 +7206,7 @@ if test "$_lt_disable_F77" != yes; then
 
   GCC=$lt_save_GCC
   CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
 fi # test "$_lt_disable_F77" != yes
 
 AC_LANG_POP
@@ -6863,7 +7283,9 @@ if test "$_lt_disable_FC" != yes; then
   # 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
 
@@ -6919,7 +7341,8 @@ if test "$_lt_disable_FC" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
 fi # test "$_lt_disable_FC" != yes
 
 AC_LANG_POP
@@ -6956,10 +7379,12 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+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"
@@ -6990,7 +7415,8 @@ fi
 AC_LANG_RESTORE
 
 GCC=$lt_save_GCC
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
@@ -7025,9 +7451,11 @@ _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])
@@ -7040,7 +7468,8 @@ fi
 
 GCC=$lt_save_GCC
 AC_LANG_RESTORE
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_RC_CONFIG
 
 
@@ -7099,6 +7528,15 @@ _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
 # ------------
@@ -7192,8 +7630,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -7232,206 +7670,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# 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"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname 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).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([    ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
 
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
 
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
 
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
 
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
 
-# func_stripname 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).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-  esac
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
 
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
 
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
 
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
 
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
 
-_LT_EOF
-esac
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
 
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
 
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which 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
     ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
+  *-*-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
     ;;
-  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
index 93fc77124f7297f0486f533e857e981aaccc40c5..9c7b5d4118584728f6ebb2d6f461378be0e872f2 100644 (file)
@@ -7,17 +7,17 @@
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# Generated from ltversion.in.
+# @configure_input@
 
-# serial 3175 ltversion.m4
+# serial 3293 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.10])
-m4_define([LT_PACKAGE_REVISION], [1.3175])
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.10'
-macro_revision='1.3175'
+[macro_version='2.4'
+macro_revision='1.3293'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/mkdep.pl b/mkdep.pl
new file mode 100755 (executable)
index 0000000..cc228c2
--- /dev/null
+++ b/mkdep.pl
@@ -0,0 +1,211 @@
+#!/usr/bin/env perl
+
+use File::Temp qw/ :mktemp  /;
+use Fcntl;
+use warnings;
+
+die "usage: $0 Makefile ...\n" unless $#ARGV >= 0;
+
+my @incpaths;
+my %dir_vars;
+my %implicit;
+
+# Read in MANIFEST fail if present
+my %manifest;
+if (open(MANIFEST, "<MANIFEST")) {
+    while (<MANIFEST>) {
+       chomp;
+       next unless /([^\/]+\.[cly])$/;
+       $manifest{$1} = $_;
+    }
+}
+
+foreach (@ARGV) {
+    mkdep($_);
+}
+
+sub mkdep {
+    my $file = $_[0];
+    $file =~ s:^\./+::;                # strip off leading ./
+
+    my $makefile;
+    if (open(MF, "<$file")) {
+       local $/;               # enable "slurp" mode
+       $makefile = <MF>;
+    } else {
+       warn "$0: $file: $!\n";
+       return undef;
+    }
+    close(MF);
+
+    # New makefile, minus the autogenerated dependencies
+    my $separator = "# Autogenerated dependencies, do not modify";
+    my $new_makefile = $makefile;
+    $new_makefile =~ s/${separator}.*$//s;
+    $new_makefile .= "$separator\n";
+
+    # Old makefile, join lines with continuation characters
+    $makefile =~ s/\\\n//mg;
+
+    # Expand some configure bits
+    $makefile =~ s:\@COMMON_OBJS\@:aix.lo:;
+    $makefile =~ s:\@SUDO_OBJS\@:preload.o selinux.o sesh.o sudo_noexec.lo:;
+    $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo plugin_error.lo:;
+    # XXX - fill in AUTH_OBJS from contents of the auth dir instead
+    $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo kerb4.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid.lo securid5.lo sia.lo:;
+    $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo dlopen.lo fnmatch.lo getcwd.lo getgrouplist.lo getline.lo getprogname.lo glob.lo isblank.lo memrchr.lo mksiglist.lo mktemp.lo nanosleep.lo setenv.lo siglist.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo unsetenv.lo utimes.lo globtest.o fnm_test.o:;
+
+    # Parse OBJS lines
+    my %objs;
+    while ($makefile =~ /^[A-Z0-9_]*OBJS\s*=\s*(.*)/mg) {
+       foreach (split/\s+/, $1) {
+           next if /^\$[\(\{].*[\)\}]$/; # skip included vars for now
+           $objs{$_} = 1;
+       }
+    }
+
+    # Find include paths
+    @incpaths = ();
+    while ($makefile =~ /-I(\S+)/mg) {
+       push(@incpaths, $1) unless $1 eq ".";
+    }
+
+    # Values of srcdir, top_srcdir, top_builddir, incdir
+    %dir_vars = ();
+    $file =~ m:^(.*)/+[^/]+:;
+    $dir_vars{'srcdir'} = $1 || '.';
+    $dir_vars{'devdir'} = $dir_vars{'srcdir'};
+    $dir_vars{'authdir'} = $dir_vars{'srcdir'} . "/auth";
+    $dir_vars{'top_srcdir'} = '.';
+    #$dir_vars{'top_builddir'} = '.';
+    $dir_vars{'incdir'} = 'include';
+
+    # Find implicit rules for generate .o and .lo files
+    %implicit = ();
+    while ($makefile =~ /^\.c\.(l?o):\s*\n\t+(.*)$/mg) {
+       $implicit{$1} = $2;
+    }
+
+    # Find existing .o and .lo dependencies
+    my %old_deps;
+    while ($makefile =~ /^(\w+\.l?o):\s*(\S+\.c)/mg) {
+       $old_deps{$1} = $2;
+    }
+
+    # Sort files so we do .lo files first
+    foreach my $obj (sort keys %objs) {
+       next unless $obj =~ /(\S+)\.(l?o)$/;
+       if ($2 eq "o" && exists($objs{"$1.lo"})) {
+           # If we have both .lo and .o files, make the .o depend on the .lo
+           $new_makefile .= sprintf("%s: %s.lo\n", $obj, $1);
+       } else {
+           # Use old depenencies when mapping objects to their source.
+           # If no old depenency, use the MANIFEST file to find the source.
+           my $src = $1 . '.c';
+           my $ext = $2;
+           if (exists $old_deps{$obj}) {
+               $src = $old_deps{$obj};
+           } elsif (exists $manifest{$src}) {
+               $src = $manifest{$src};
+               foreach (sort { length($b) <=> length($a) } keys %dir_vars) {
+                   last if $src =~ s:^\Q$dir_vars{$_}/\E:\$\($_\)/:;
+               }
+           } else {
+               warn "$file: unable to find source for $obj\n";
+           }
+           my $imp = $implicit{$ext};
+           $imp =~ s/\$</$src/g;
+
+           my $deps = sprintf("%s: %s %s", $obj, $src,
+               join(' ', find_depends($src)));
+           if (length($deps) > 80) {
+               my $off = 0;
+               my $indent = length($obj) + 2;
+               while (length($deps) - $off > 80 - $indent) {
+                   my $pos;
+                   if ($off != 0) {
+                       $new_makefile .= ' ' x $indent;
+                       $pos = rindex($deps, ' ', $off + 80 - $indent - 2);
+                   } else {
+                       $pos = rindex($deps, ' ', $off + 78);
+                   }
+                   $new_makefile .= substr($deps, $off, $pos - $off) . " \\\n";
+                   $off = $pos + 1;
+               }
+               $new_makefile .= ' ' x $indent;
+               $new_makefile .= substr($deps, $off) . "\n";
+           } else {
+               $new_makefile .= "$deps\n";
+           }
+           $new_makefile .= "\t$imp\n";
+       }
+    }
+
+    rename($file, $file . ".old");
+    if (!open(MF, ">$file")) {
+       warn("cannot open $file: $!\n");
+       rename($file . ".old", $file);
+    } else {
+       print MF $new_makefile || warn("cannot write $file: $!\n");
+       close(MF);
+    }
+}
+
+exit(0);
+
+sub find_depends {
+    my $src = $_[0];
+    my ($deps, $code, @headers);
+
+    if ($src !~ /\//) {
+       # XXX - want build dir not src dir
+       $src = "$dir_vars{'srcdir'}/$src";
+    }
+
+    # resolve $(srcdir) etc.
+    foreach (keys %dir_vars) {
+       $src =~ s/\$[\(\{]$_[\)\}]/$dir_vars{$_}/g;
+    }
+
+    # find open source file and find headers used by it
+    if (!open(FILE, "<$src")) {
+       warn "unable to open $src\n";
+       return "";
+    }
+    local $/;          # enable "slurp" mode
+    $code = <FILE>;
+    close(FILE);
+
+    # find all headers
+    while ($code =~ /^#\s*include\s+["<](\S+)[">]/mg) {
+       my ($hdr, $hdr_path) = find_header($1);
+       if (defined($hdr)) {
+           push(@headers, $hdr);
+           # Look for other includes in the .h file
+           push(@headers, find_depends($hdr_path));
+       }
+    }
+
+    @headers;
+}
+
+# find the path to a header file
+# returns path or undef if not found
+sub find_header {
+    my $hdr = $_[0];
+
+    # Look for .h.in files in top_builddir and build dir
+    return ("\$(top_builddir\)/$hdr", "./${hdr}.in") if -r "./${hdr}.in";
+    return ("./$hdr", "$dir_vars{'srcdir'}/${hdr}.in") if -r "$dir_vars{'srcdir'}/${hdr}.in";
+
+    foreach my $inc (@incpaths) {
+       my $hdr_path = "$inc/$hdr";
+       # resolve variables in include path
+       foreach (keys %dir_vars) {
+           $hdr_path =~ s/\$[\(\{]$_[\)\}]/$dir_vars{$_}/g;
+       }
+       return ("$inc/$hdr", $hdr_path) if -r $hdr_path;
+    }
+
+    undef;
+}
diff --git a/mkpkg b/mkpkg
index 12c1d849c443ae1452e54362fcf2bc4d0b6bce23..d2aec97fa122870187d29ce3fc01387387180bc4 100755 (executable)
--- a/mkpkg
+++ b/mkpkg
@@ -122,18 +122,18 @@ case "$osversion" in
     centos*|rhel*)
        prefix=/usr
        if [ $osrelease -ge 50 ]; then
-           # RHEL 5 and up build pies and have audit support
-           export CFLAGS="-O2 $F_PIE" LDFLAGS="-pie"
+           # RHEL 5 and up build pies, have audit support and use a
+           # separate PAM config file for "sudo -i".
+           export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
            configure_opts="${configure_opts}${configure_opts+$tab}--with-linux-audit"
+           configure_opts="${configure_opts}${configure_opts+$tab}--with-pam-login"
            PPVARS="${PPVARS}${PPVARS+$space}linux_audit=1.4.0"
        fi
        # Note, must indent with tabs, not spaces due to IFS trickery
-       configure_opts="$configure_opts
-               --prefix=$prefix
+       configure_opts="--prefix=$prefix
                --with-logging=syslog
                --with-logfac=authpriv
                --with-pam
-               --with-pam-login
                --enable-zlib=system
                --with-editor=/bin/vi
                --with-env-editor
@@ -141,27 +141,28 @@ case "$osversion" in
                --with-tty-tickets
                --with-ldap
                --with-selinux
-               --with-passprompt=[sudo] password for %p: "
+               --with-passprompt=[sudo] password for %p: 
+               $configure_opts"
        ;;
     sles*)
        prefix=/usr
        if [ $osrelease -ge 10 ]; then
            # SLES 10 and higher build pies
-           export CFLAGS="-O2 $F_PIE" LDFLAGS="-pie"
+           export CFLAGS="-O2 -g $F_PIE" LDFLAGS="-pie"
            if [ $osrelease -ge 11 ]; then
                # SLES 11 and higher has SELinux
                configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux"
            fi
        fi
        # SuSE doesn't have /usr/libexec
+       libexec=lib
        case "$osversion" in
-           *64*)       libexec=lib64;;
-           *)          libexec=lib;;
+           *64*)       gcc -v 2>&1 | grep "with-cpu=[^ ]*32" >/dev/null || libexec=lib64
+                       ;;
        esac
        # Note, must indent with tabs, not spaces due to IFS trickery
        # XXX - SuSE uses secure path but only for env_reset
-       configure_opts="$configure_opts
-               --prefix=$prefix
+       configure_opts="--prefix=$prefix
                --libexecdir=$prefix/$libexec/sudo
                --with-logging=syslog
                --with-logfac=auth
@@ -174,7 +175,8 @@ case "$osversion" in
                --enable-zlib=system
                --with-ldap
                --with-env-editor
-               --with-passprompt=%p\'s password: "
+               --with-passprompt=%p\'s password: 
+               $configure_opts"
 
        make_opts='docdir=$(datarootdir)/doc/packages/$(PACKAGE_TARNAME)'
        ;;
@@ -191,8 +193,7 @@ case "$osversion" in
            configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap
                --with-ldap-conf-file=/etc/sudo-ldap.conf"
        fi
-       configure_opts="$configure_opts
-               --prefix=/usr
+       configure_opts="--prefix=/usr
                --with-all-insults
                --with-exempt=sudo
                --with-pam
@@ -211,26 +212,27 @@ case "$osversion" in
                --with-sendmail=/usr/sbin/sendmail
                --mandir=/usr/share/man
                --libexecdir=/usr/lib/sudo
-               --with-secure-path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin"
+               --with-secure-path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
+               $configure_opts"
        ;;
     *)
        # For Solaris, add project support and use let configure choose zlib.
-       # For all others, use the builtin zlib.
+       # For all others, use the builtin zlib and disable NLS support.
        case "$osversion" in
            sol*) configure_opts="${configure_opts}${configure_opts+$tab}--with-project";;
-           *) configure_opts="${configure_opts}${configure_opts+$tab}--enable-zlib=builtin";;
+           *) configure_opts="${configure_opts}${configure_opts+$tab}--enable-zlib=builtin${tab}--disable-nls";;
        esac
        if test "$flavor" = "ldap"; then
            configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap"
        fi
        # Note, must indent with tabs, not spaces due to IFS trickery
-       configure_opts="$configure_opts
-               --prefix=$prefix
+       configure_opts="--prefix=$prefix
                --with-insults=disabled
                --with-logging=syslog
                --with-logfac=auth
                --with-editor=/usr/bin/vim:/usr/bin/vi:/bin/vi
-               --with-env-editor"
+               --with-env-editor
+               $configure_opts"
        ;;
 esac
 
index 180dee3a3ae99b1078f198604f1415985ac79044..12d77d48e0aa8e26876adef67eac77480ad2af84 100644 (file)
@@ -80,9 +80,6 @@ Makefile: $(srcdir)/Makefile.in
 .c.lo:
        $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $<
 
-sample_plugin.lo: $(srcdir)/sample_plugin.c
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sample_plugin.c
-
 sample_plugin.la: $(OBJS)
        $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(LTLDFLAGS) -o $@ $(OBJS) $(LIBS) -module -export-symbols $(srcdir)/sample_plugin.sym -avoid-version -rpath $(plugindir)
 
@@ -121,3 +118,9 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+sample_plugin.lo: $(srcdir)/sample_plugin.c $(top_builddir)/config.h \
+                  $(top_builddir)/pathnames.h $(incdir)/sudo_plugin.h \
+                  $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sample_plugin.c
index eda9f1f452c0205ec6f211d29c6da71f648636f6..9c4207ad72f570eb8a602558072530f93757ebb9 100644 (file)
@@ -80,12 +80,6 @@ Makefile: $(srcdir)/Makefile.in
 .c.lo:
        $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $<
 
-getgrent.lo: $(srcdir)/getgrent.c
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getgrent.c
-
-sample_group.lo: $(srcdir)/sample_group.c
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sample_group.c
-
 sample_group.la: $(OBJS)
        $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(LTLDFLAGS) -o $@ $(OBJS) $(LIBS) -module -export-symbols $(srcdir)/sample_group.sym -avoid-version -rpath $(plugindir)
 
@@ -124,3 +118,10 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+getgrent.lo: $(srcdir)/getgrent.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getgrent.c
+sample_group.lo: $(srcdir)/sample_group.c $(top_builddir)/config.h \
+                 $(incdir)/sudo_plugin.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sample_group.c
index d8c298bd2e7cfc28639eb00ae0df476c5f76975c..e22abfaeaa273d095c4bb709fe650c91cd2ffa18 100644 (file)
@@ -43,7 +43,8 @@ YACC = @YACC@
 INSTALL = $(SHELL) $(top_srcdir)/install-sh -c
 
 # Libraries
-LIBS = $(top_builddir)/common/libcommon.la $(top_builddir)/@ac_config_libobj_dir@/libreplace.la
+LT_LIBS = $(top_builddir)/common/libcommon.la $(LIBOBJDIR)libreplace.la
+LIBS = $(LT_LIBS) @LIBINTL@
 NET_LIBS = @NET_LIBS@
 SUDOERS_LIBS = @SUDOERS_LIBS@ @AFS_LIBS@ @GETGROUPS_LIB@ $(LIBS) $(NET_LIBS) @ZLIB@
 REPLAY_LIBS = @REPLAY_LIBS@ @ZLIB@
@@ -67,6 +68,7 @@ sbindir = @sbindir@
 sysconfdir = @sysconfdir@
 libexecdir = @libexecdir@
 datarootdir = @datarootdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 
 # File extension for shared objects
@@ -94,7 +96,9 @@ sudoers_gid = @SUDOERS_GID@
 sudoers_mode = @SUDOERS_MODE@
 
 # Pass in paths and uid/gid + OS dependent defines
-DEFS = @OSDEFS@ -D_PATH_SUDOERS=\"$(sudoersdir)/sudoers\" -DSUDOERS_UID=$(sudoers_uid) -DSUDOERS_GID=$(sudoers_gid) -DSUDOERS_MODE=$(sudoers_mode)
+DEFS = @OSDEFS@ -D_PATH_SUDOERS=\"$(sudoersdir)/sudoers\" \
+       -DSUDOERS_UID=$(sudoers_uid) -DSUDOERS_GID=$(sudoers_gid) \
+       -DSUDOERS_MODE=$(sudoers_mode) -DLOCALEDIR=\"$(localedir)\"
 
 #### End of system configuration section. ####
 
@@ -102,17 +106,17 @@ SHELL = @SHELL@
 
 PROGS = sudoers.la visudo sudoreplay testsudoers
 
-TEST_PROGS = check_iolog_path check_fill
+TEST_PROGS = check_iolog_path check_fill check_wrap
 
 AUTH_OBJS = sudo_auth.lo @AUTH_OBJS@
 
-LIBSUDOERS_OBJS = alias.lo audit.lo defaults.lo gram.lo match.lo pwutil.lo \
-                 timestr.lo toke.lo toke_util.lo redblack.lo
+LIBPARSESUDOERS_OBJS = alias.lo audit.lo defaults.lo gram.lo match.lo \
+                      pwutil.lo timestr.lo toke.lo toke_util.lo redblack.lo
 
 SUDOERS_OBJS = $(AUTH_OBJS) boottime.lo check.lo env.lo goodpath.lo \
               group_plugin.lo find_path.lo interfaces.lo logging.lo \
-              parse.lo set_perms.lo sudoers.lo sudo_nss.lo iolog.lo \
-              iolog_path.lo @SUDOERS_OBJS@
+              logwrap.lo parse.lo set_perms.lo sudoers.lo sudo_nss.lo \
+              iolog.lo iolog_path.lo @SUDOERS_OBJS@
 
 VISUDO_OBJS = visudo.o goodpath.o find_path.o error.o
 
@@ -121,21 +125,17 @@ REPLAY_OBJS = getdate.o sudoreplay.o error.o
 TEST_OBJS = interfaces.o testsudoers.o tsgetgrpw.o error.o group_plugin.o \
            net_ifs.o
 
-CHECK_IOLOG_PATH_OBJS = check_iolog_path.o error.o iolog_path.lo pwutil.lo \
-                       redblack.lo
+CHECK_IOLOG_PATH_OBJS = check_iolog_path.o error.o iolog_path.o pwutil.o \
+                       redblack.o
 
-VERSION = @PACKAGE_VERSION@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
+CHECK_FILL_OBJS = check_fill.o toke_util.o error.o
 
-SUDODEP = $(srcdir)/sudoers.h $(srcdir)/defaults.h $(incdir)/error.h \
-         $(incdir)/list.h $(srcdir)/logging.h $(incdir)/missing.h \
-         $(srcdir)/sudo_nss.h $(devdir)/def_data.h \
-         $(top_builddir)/pathnames.h $(top_builddir)/config.h
+CHECK_WRAP_OBJS = check_wrap.o logwrap.o error.o
 
-AUTHDEP = $(SUDODEP) $(authdir)/sudo_auth.h
+LIBOBJDIR = $(top_builddir)/@ac_config_libobj_dir@/
 
-INSDEP = $(srcdir)/ins_2001.h $(srcdir)/ins_classic.h $(srcdir)/ins_csops.h \
-        $(srcdir)/ins_goons.h $(srcdir)/insults.h
+VERSION = @PACKAGE_VERSION@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
 
 all: $(PROGS)
 
@@ -155,26 +155,29 @@ all: $(PROGS)
 Makefile: $(srcdir)/Makefile.in
        (cd $(top_builddir) && ./config.status --file plugins/sudoers/Makefile)
 
-libsudoers.la: $(LIBSUDOERS_OBJS)
-       $(LIBTOOL) --mode=link $(CC) -o $@ $(LIBSUDOERS_OBJS) -no-install
+libparsesudoers.la: $(LIBPARSESUDOERS_OBJS)
+       $(LIBTOOL) --mode=link $(CC) -o $@ $(LIBPARSESUDOERS_OBJS) -no-install
 
-sudoers.la: $(SUDOERS_OBJS) libsudoers.la
-       $(LIBTOOL) @LT_STATIC@ --mode=link $(CC) $(SUDOERS_LDFLAGS) $(LTLDFLAGS) -o $@ $(SUDOERS_OBJS) libsudoers.la $(SUDOERS_LIBS) -module -export-symbols $(srcdir)/sudoers.sym -avoid-version -rpath $(plugindir)
+sudoers.la: $(SUDOERS_OBJS) $(LT_LIBS) libparsesudoers.la
+       $(LIBTOOL) @LT_STATIC@ --mode=link $(CC) $(SUDOERS_LDFLAGS) $(LTLDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module -export-symbols $(srcdir)/sudoers.sym -avoid-version -rpath $(plugindir)
 
-visudo: libsudoers.la $(VISUDO_OBJS) $(LIBS)
-       $(LIBTOOL) --mode=link $(CC) -o $@ $(VISUDO_OBJS) $(LDFLAGS) libsudoers.la $(LIBS) $(NET_LIBS)
+visudo: libparsesudoers.la $(VISUDO_OBJS) $(LT_LIBS)
+       $(LIBTOOL) --mode=link $(CC) -o $@ $(VISUDO_OBJS) $(LDFLAGS) libparsesudoers.la $(LIBS) $(NET_LIBS)
 
-sudoreplay: $(REPLAY_OBJS) $(LIBS)
+sudoreplay: $(REPLAY_OBJS) $(LT_LIBS)
        $(LIBTOOL) --mode=link $(CC) -o $@ $(REPLAY_OBJS) $(LDFLAGS) timestr.lo $(REPLAY_LIBS) $(LIBS)
 
-testsudoers: libsudoers.la $(TEST_OBJS) $(LIBS)
-       $(LIBTOOL) --mode=link $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS) libsudoers.la $(LIBS) $(NET_LIBS) @LIBDL@
+testsudoers: libparsesudoers.la $(TEST_OBJS) $(LT_LIBS)
+       $(LIBTOOL) --mode=link $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS) libparsesudoers.la $(LIBS) $(NET_LIBS) @LIBDL@
 
-check_iolog_path: $(CHECK_IOLOG_PATH_OBJS) $(LIBS)
+check_iolog_path: $(CHECK_IOLOG_PATH_OBJS) $(LT_LIBS)
        $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_IOLOG_PATH_OBJS) $(LDFLAGS) $(LIBS)
 
-check_fill: check_fill.o toke_util.lo error.o $(LIBS)
-       $(LIBTOOL) --mode=link $(CC) -o $@ check_fill.o toke_util.lo error.o $(LDFLAGS) $(LIBS)
+check_fill: $(CHECK_FILL_OBJS) $(LT_LIBS)
+       $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(LIBS)
+
+check_wrap: $(CHECK_WRAP_OBJS) $(LT_LIBS)
+       $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_WRAP_OBJS) $(LDFLAGS) $(LIBS)
 
 # Uncomment the following if you want "make distclean" to clean the parser
 @DEV@GENERATED = gram.h gram.c toke.c def_data.c def_data.h getdate.c
@@ -212,123 +215,6 @@ $(devdir)/getdate.c: $(srcdir)/getdate.y
 sudoers: $(srcdir)/sudoers.in
        (cd $(top_builddir) && $(SHELL) config.status --file=plugins/sudoers/$@)
 
-# Sudoers dependencies
-alias.lo: $(srcdir)/alias.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/redblack.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/alias.c
-audit.lo: $(srcdir)/audit.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/audit.c
-bsm_audit.lo: $(srcdir)/bsm_audit.c $(SUDODEP) $(srcdir)/bsm_audit.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/bsm_audit.c
-boottime.lo: $(srcdir)/boottime.c $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/boottime.c
-check.lo: $(srcdir)/check.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/check.c
-defaults.lo: $(srcdir)/defaults.c $(SUDODEP) $(devdir)/def_data.c $(authdir)/sudo_auth.h $(devdir)/gram.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/defaults.c
-env.lo: $(srcdir)/env.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/env.c
-find_path.lo: $(srcdir)/find_path.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/find_path.c
-getspwuid.lo: $(srcdir)/getspwuid.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/getspwuid.c
-goodpath.lo: $(srcdir)/goodpath.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/goodpath.c
-gram.lo: $(devdir)/gram.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h $(devdir)/gram.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(devdir)/gram.c
-group_plugin.lo: $(srcdir)/group_plugin.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/group_plugin.c
-interfaces.lo: $(srcdir)/interfaces.c $(SUDODEP) $(srcdir)/interfaces.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/interfaces.c
-iolog.lo: $(srcdir)/iolog.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/iolog.c
-iolog_path.lo: $(srcdir)/iolog_path.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/iolog_path.c
-ldap.lo: $(srcdir)/ldap.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/ldap.c
-linux_audit.lo: $(srcdir)/linux_audit.c $(SUDODEP) $(srcdir)/linux_audit.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/linux_audit.c
-logging.lo: $(srcdir)/logging.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/logging.c
-match.lo: $(srcdir)/match.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/interfaces.h $(devdir)/gram.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/match.c
-parse.lo: $(srcdir)/parse.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h $(devdir)/gram.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/parse.c
-pwutil.lo: $(srcdir)/pwutil.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/pwutil.c
-redblack.lo: $(srcdir)/redblack.c $(SUDODEP) $(srcdir)/redblack.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/redblack.c
-set_perms.lo: $(srcdir)/set_perms.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/set_perms.c
-sudo_nss.lo: $(srcdir)/sudo_nss.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo_nss.c
-sudoers.lo: $(srcdir)/sudoers.c $(SUDODEP) $(srcdir)/interfaces.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudoers.c
-timestr.lo: $(srcdir)/timestr.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/timestr.c
-toke.lo: $(devdir)/toke.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/toke.h $(devdir)/gram.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(devdir)/toke.c
-toke_util.lo: $(srcdir)/toke_util.c $(SUDODEP) $(srcdir)/parse.h $(srcdir)/toke.h $(devdir)/gram.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/toke_util.c
-tsgetgrpw.lo: $(srcdir)/tsgetgrpw.c $(SUDODEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/tsgetgrpw.c
-plugin_error.lo: $(srcdir)/plugin_error.c $(incdir)/error.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/plugin_error.c
-
-# Auth dependencies
-sudo_auth.lo: $(authdir)/sudo_auth.c $(AUTHDEP) $(INSDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/sudo_auth.c
-afs.lo: $(authdir)/afs.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/afs.c
-aix_auth.lo: $(authdir)/aix_auth.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/aix_auth.c
-bsdauth.lo: $(authdir)/bsdauth.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/bsdauth.c
-dce.lo: $(authdir)/dce.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/dce.c
-fwtk.lo: $(authdir)/fwtk.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/fwtk.c
-kerb4.lo: $(authdir)/kerb4.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/kerb4.c
-kerb5.lo: $(authdir)/kerb5.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/kerb5.c
-pam.lo: $(authdir)/pam.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/pam.c
-passwd.lo: $(authdir)/passwd.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/passwd.c
-rfc1938.lo: $(authdir)/rfc1938.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/rfc1938.c
-secureware.lo: $(authdir)/secureware.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/secureware.c
-securid.lo: $(authdir)/securid.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/securid.c
-securid5.lo: $(authdir)/securid5.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/securid5.c
-sia.lo: $(authdir)/sia.c $(AUTHDEP)
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/sia.c
-
-# Command dependencies (sudoreplay, testsudoers, visudo)
-check_iolog_path.o: $(srcdir)/regress/iolog_path/check_iolog_path.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/iolog_path/check_iolog_path.c
-error.o: $(top_srcdir)/src/error.c $(incdir)/error.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(top_srcdir)/src/error.c
-find_path.o: find_path.lo
-getdate.o: $(devdir)/getdate.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(devdir)/getdate.c
-goodpath.o: goodpath.lo
-interfaces.o: interfaces.lo
-net_ifs.o: $(top_srcdir)/src/net_ifs.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(top_srcdir)/src/net_ifs.c
-sudoreplay.o: $(srcdir)/sudoreplay.c $(incdir)/alloc.h $(incdir)/missing.h $(incdir)/error.h $(incdir)/missing.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudoreplay.c
-check_fill.o: $(srcdir)/regress/parser/check_fill.c
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_fill.c
-testsudoers.o: $(srcdir)/testsudoers.c $(SUDODEP) $(srcdir)/parse.h $(incdir)/list.h $(srcdir)/interfaces.h $(devdir)/gram.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/testsudoers.c
-tsgetgrpw.o: $(srcdir)/tsgetgrpw.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/tsgetgrpw.c
-visudo.o: $(srcdir)/visudo.c $(SUDODEP) $(devdir)/gram.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/visudo.c
-
 pre-install:
        @if test -r $(DESTDIR)$(sudoersdir)/sudoers; then \
            echo "Checking existing sudoers file for syntax errors."; \
@@ -375,6 +261,9 @@ check: $(TEST_PROGS) visudo testsudoers
        rval=`expr $$rval + $$?`; \
        ./check_fill; \
        rval=`expr $$rval + $$?`; \
+       ./check_wrap $(srcdir)/regress/logging/check_wrap.in > check_wrap.out; \
+       diff check_wrap.out $(srcdir)/regress/logging/check_wrap.out.ok; \
+       rval=`expr $$rval + $$?`; \
        passed=0; failed=0; total=0; \
            for t in $(srcdir)/regress/sudoers/*.in; do \
                dir=`dirname $$t`; \
@@ -438,7 +327,7 @@ check: $(TEST_PROGS) visudo testsudoers
            rval=`expr $$rval + $$failed`; exit $$rval
 
 clean:
-       -$(LIBTOOL) --mode=clean rm -f $(PROGS) *.lo *.o *.la *.a stamp-* core *.core core.* *.out
+       -$(LIBTOOL) --mode=clean rm -f $(PROGS) $(TEST_PROGS) *.lo *.o *.la *.a stamp-* core *.core core.* *.out *.toke *.err
 
 mostlyclean: clean
 
@@ -451,3 +340,341 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+afs.lo: $(authdir)/afs.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+        $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+        $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+        $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/afs.c
+aix_auth.lo: $(authdir)/aix_auth.c $(top_builddir)/config.h \
+             $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+             $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+             $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+             $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+             $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/aix_auth.c
+alias.lo: $(srcdir)/alias.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+          $(srcdir)/parse.h $(srcdir)/redblack.h $(srcdir)/gram.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/alias.c
+audit.lo: $(srcdir)/audit.c $(top_builddir)/config.h $(incdir)/missing.h \
+          $(srcdir)/logging.h $(srcdir)/bsm_audit.h $(srcdir)/linux_audit.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/audit.c
+boottime.lo: $(srcdir)/boottime.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/boottime.c
+bsdauth.lo: $(authdir)/bsdauth.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+            $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+            $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+            $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/bsdauth.c
+bsm_audit.lo: $(srcdir)/bsm_audit.c $(top_builddir)/config.h \
+              $(srcdir)/bsm_audit.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/bsm_audit.c
+check.lo: $(srcdir)/check.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/check.c
+check_fill.o: $(srcdir)/regress/parser/check_fill.c $(top_builddir)/config.h \
+              $(incdir)/list.h $(srcdir)/parse.h $(srcdir)/toke.h \
+              $(srcdir)/gram.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_fill.c
+check_iolog_path.o: $(srcdir)/regress/iolog_path/check_iolog_path.c \
+                    $(top_builddir)/config.h $(srcdir)/sudoers.h \
+                    $(top_builddir)/pathnames.h $(incdir)/missing.h \
+                    $(incdir)/error.h $(incdir)/alloc.h $(incdir)/list.h \
+                    $(incdir)/fileops.h $(srcdir)/defaults.h \
+                    $(srcdir)/def_data.h $(srcdir)/logging.h \
+                    $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
+                    $(incdir)/gettext.h $(srcdir)/def_data.c
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/iolog_path/check_iolog_path.c
+check_wrap.o: $(srcdir)/regress/logging/check_wrap.c $(top_builddir)/config.h \
+              $(incdir)/missing.h $(incdir)/error.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/regress/logging/check_wrap.c
+dce.lo: $(authdir)/dce.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+        $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+        $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+        $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/dce.c
+defaults.lo: $(srcdir)/defaults.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+             $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+             $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+             $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+             $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+             $(srcdir)/parse.h $(srcdir)/gram.h $(srcdir)/def_data.c
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/defaults.c
+env.lo: $(srcdir)/env.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+        $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+        $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+        $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/env.c
+error.o: $(top_srcdir)/src/error.c $(top_builddir)/config.h \
+         $(incdir)/missing.h $(incdir)/error.h $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(top_srcdir)/src/error.c
+find_path.lo: $(srcdir)/find_path.c $(top_builddir)/config.h \
+              $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+              $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+              $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+              $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+              $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/find_path.c
+find_path.o: find_path.lo
+fwtk.lo: $(authdir)/fwtk.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+         $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+         $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+         $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+         $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/fwtk.c
+getdate.o: $(devdir)/getdate.c $(top_builddir)/config.h \
+           $(top_builddir)/config.h $(incdir)/missing.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(devdir)/getdate.c
+goodpath.lo: $(srcdir)/goodpath.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+             $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+             $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+             $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+             $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/goodpath.c
+goodpath.o: goodpath.lo
+gram.lo: $(devdir)/gram.c $(top_builddir)/config.h $(top_builddir)/config.h \
+         $(srcdir)/sudoers.h $(top_builddir)/pathnames.h $(incdir)/missing.h \
+         $(incdir)/error.h $(incdir)/alloc.h $(incdir)/list.h \
+         $(incdir)/fileops.h $(srcdir)/defaults.h $(srcdir)/def_data.h \
+         $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
+         $(incdir)/gettext.h $(srcdir)/parse.h $(srcdir)/toke.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(devdir)/gram.c
+group_plugin.lo: $(srcdir)/group_plugin.c $(top_builddir)/config.h \
+                 $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudoers.h \
+                 $(top_builddir)/pathnames.h $(incdir)/missing.h \
+                 $(incdir)/error.h $(incdir)/alloc.h $(incdir)/list.h \
+                 $(incdir)/fileops.h $(srcdir)/defaults.h $(srcdir)/def_data.h \
+                 $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+                 $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/group_plugin.c
+group_plugin.o: group_plugin.lo
+interfaces.lo: $(srcdir)/interfaces.c $(top_builddir)/config.h \
+               $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+               $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+               $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+               $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+               $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+               $(srcdir)/interfaces.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/interfaces.c
+interfaces.o: interfaces.lo
+iolog.lo: $(srcdir)/iolog.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/iolog.c
+iolog_path.lo: $(srcdir)/iolog_path.c $(top_builddir)/config.h \
+               $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+               $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+               $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+               $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+               $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/iolog_path.c
+iolog_path.o: iolog_path.lo
+kerb4.lo: $(authdir)/kerb4.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/kerb4.c
+kerb5.lo: $(authdir)/kerb5.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/kerb5.c
+ldap.lo: $(srcdir)/ldap.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+         $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+         $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+         $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+         $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+         $(srcdir)/parse.h $(incdir)/lbuf.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/ldap.c
+linux_audit.lo: $(srcdir)/linux_audit.c $(top_builddir)/config.h \
+                $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+                $(incdir)/gettext.h $(srcdir)/linux_audit.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/linux_audit.c
+logging.lo: $(srcdir)/logging.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+            $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+            $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+            $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/logging.c
+logwrap.lo: $(srcdir)/logwrap.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+            $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+            $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+            $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/logwrap.c
+logwrap.o: logwrap.lo
+match.lo: $(srcdir)/match.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+          $(srcdir)/interfaces.h $(srcdir)/parse.h $(srcdir)/gram.h \
+          $(top_srcdir)/compat/fnmatch.h $(top_srcdir)/compat/glob.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/match.c
+net_ifs.o: $(top_srcdir)/src/net_ifs.c $(top_builddir)/config.h \
+           $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
+           $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(top_srcdir)/src/net_ifs.c
+pam.lo: $(authdir)/pam.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+        $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+        $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+        $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/pam.c
+parse.lo: $(srcdir)/parse.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+          $(srcdir)/parse.h $(incdir)/lbuf.h $(srcdir)/gram.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/parse.c
+passwd.lo: $(authdir)/passwd.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+           $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+           $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+           $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+           $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/passwd.c
+plugin_error.lo: $(srcdir)/plugin_error.c $(top_builddir)/config.h \
+                 $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
+                 $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/plugin_error.c
+pwutil.lo: $(srcdir)/pwutil.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+           $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+           $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+           $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+           $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+           $(srcdir)/redblack.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/pwutil.c
+pwutil.o: pwutil.lo
+redblack.lo: $(srcdir)/redblack.c $(top_builddir)/config.h $(incdir)/missing.h \
+             $(incdir)/alloc.h $(srcdir)/redblack.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/redblack.c
+redblack.o: redblack.lo
+rfc1938.lo: $(authdir)/rfc1938.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+            $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+            $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+            $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/rfc1938.c
+secureware.lo: $(authdir)/secureware.c $(top_builddir)/config.h \
+               $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+               $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+               $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+               $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+               $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/secureware.c
+securid.lo: $(authdir)/securid.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+            $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+            $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+            $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/securid.c
+securid5.lo: $(authdir)/securid5.c $(top_builddir)/config.h \
+             $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+             $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+             $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+             $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+             $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/securid5.c
+set_perms.lo: $(srcdir)/set_perms.c $(top_builddir)/config.h \
+              $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+              $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+              $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+              $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+              $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/set_perms.c
+sia.lo: $(authdir)/sia.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+        $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+        $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+        $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/sia.c
+sudo_auth.lo: $(authdir)/sudo_auth.c $(top_builddir)/config.h \
+              $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+              $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+              $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+              $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+              $(incdir)/sudo_plugin.h $(incdir)/gettext.h $(srcdir)/insults.h \
+              $(srcdir)/ins_2001.h $(srcdir)/ins_goons.h \
+              $(srcdir)/ins_classic.h $(srcdir)/ins_csops.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(authdir)/sudo_auth.c
+sudo_nss.lo: $(srcdir)/sudo_nss.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+             $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+             $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+             $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+             $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+             $(incdir)/lbuf.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo_nss.c
+sudoers.lo: $(srcdir)/sudoers.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+            $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+            $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+            $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+            $(incdir)/lbuf.h $(srcdir)/interfaces.h \
+            $(srcdir)/sudoers_version.h $(srcdir)/auth/sudo_auth.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudoers.c
+sudoreplay.o: $(srcdir)/sudoreplay.c $(top_builddir)/config.h \
+              $(top_srcdir)/compat/timespec.h $(top_builddir)/pathnames.h \
+              $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
+              $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudoreplay.c
+testsudoers.o: $(srcdir)/testsudoers.c $(top_builddir)/config.h \
+               $(srcdir)/tsgetgrpw.h $(top_builddir)/config.h \
+               $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+               $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+               $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+               $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+               $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+               $(srcdir)/interfaces.h $(srcdir)/parse.h $(srcdir)/gram.h \
+               $(top_srcdir)/compat/fnmatch.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/testsudoers.c
+timestr.lo: $(srcdir)/timestr.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/timestr.c
+toke.lo: $(devdir)/toke.c $(top_builddir)/config.h $(top_builddir)/config.h \
+         $(srcdir)/sudoers.h $(top_builddir)/pathnames.h $(incdir)/missing.h \
+         $(incdir)/error.h $(incdir)/alloc.h $(incdir)/list.h \
+         $(incdir)/fileops.h $(srcdir)/defaults.h $(srcdir)/def_data.h \
+         $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h \
+         $(incdir)/gettext.h $(srcdir)/parse.h $(srcdir)/toke.h $(srcdir)/gram.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(devdir)/toke.c
+toke_util.lo: $(srcdir)/toke_util.c $(top_builddir)/config.h \
+              $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+              $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+              $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+              $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+              $(incdir)/sudo_plugin.h $(incdir)/gettext.h $(srcdir)/parse.h \
+              $(srcdir)/toke.h $(srcdir)/gram.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/toke_util.c
+toke_util.o: toke_util.lo
+tsgetgrpw.o: $(srcdir)/tsgetgrpw.c $(top_builddir)/config.h \
+             $(srcdir)/tsgetgrpw.h $(top_builddir)/config.h \
+             $(srcdir)/sudoers.h $(top_builddir)/pathnames.h \
+             $(incdir)/missing.h $(incdir)/error.h $(incdir)/alloc.h \
+             $(incdir)/list.h $(incdir)/fileops.h $(srcdir)/defaults.h \
+             $(srcdir)/def_data.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \
+             $(incdir)/sudo_plugin.h $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/tsgetgrpw.c
+visudo.o: $(srcdir)/visudo.c $(top_builddir)/config.h $(srcdir)/sudoers.h \
+          $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/error.h \
+          $(incdir)/alloc.h $(incdir)/list.h $(incdir)/fileops.h \
+          $(srcdir)/defaults.h $(srcdir)/def_data.h $(srcdir)/logging.h \
+          $(srcdir)/sudo_nss.h $(incdir)/sudo_plugin.h $(incdir)/gettext.h \
+          $(srcdir)/interfaces.h $(srcdir)/parse.h $(srcdir)/redblack.h \
+          $(incdir)/gettext.h $(srcdir)/sudoers_version.h $(srcdir)/gram.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/visudo.c
index 274b446e1a19efe0d086042ff09ddc1fe32abc46..0b2ad0e064a52a8dbb65ef8c800d081dc35d13e0 100644 (file)
@@ -44,6 +44,7 @@
 #include "parse.h"
 #include "redblack.h"
 #include <gram.h>
+#include <errno.h>
 
 /*
  * Globals
@@ -85,15 +86,19 @@ alias_find(char *name, int type)
     key.name = name;
     key.type = type;
     if ((node = rbfind(aliases, &key)) != NULL) {
-           /*
-            * Compare the global sequence number with the one stored
-            * in the alias.  If they match then we've seen this alias
-            * before and found a loop.
-            */
-           a = node->data;
-           if (a->seqno == alias_seqno)
-               return NULL;
-           a->seqno = alias_seqno;
+       /*
+        * Compare the global sequence number with the one stored
+        * in the alias.  If they match then we've seen this alias
+        * before and found a loop.
+        */
+       a = node->data;
+       if (a->seqno == alias_seqno) {
+           errno = ELOOP;
+           return NULL;
+       }
+       a->seqno = alias_seqno;
+    } else {
+       errno = ENOENT;
     }
     return a;
 }
@@ -114,7 +119,7 @@ alias_add(char *name, int type, struct member *members)
     a->seqno = 0;
     list2tq(&a->members, members);
     if (rbinsert(aliases, a)) {
-       snprintf(errbuf, sizeof(errbuf), "Alias `%s' already defined", name);
+       snprintf(errbuf, sizeof(errbuf), _("Alias `%s' already defined"), name);
        alias_free(a);
        return errbuf;
     }
@@ -175,8 +180,10 @@ alias_remove(char *name, int type)
 
     key.name = name;
     key.type = type;
-    if ((node = rbfind(aliases, &key)) == NULL)
+    if ((node = rbfind(aliases, &key)) == NULL) {
+       errno = ENOENT;
        return NULL;
+    }
     return rbdelete(aliases, node);
 }
 
index 2cb113083e28eb8accf142ae90b4e31276bbe1b0..c3d35a27946df8c05427dd32a9554fd5a1315cf2 100644 (file)
@@ -41,6 +41,9 @@
 void
 audit_success(char *exec_args[])
 {
+    if (exec_args == NULL)
+       return;
+
 #ifdef HAVE_BSM_AUDIT
     bsm_audit_success(exec_args);
 #endif
@@ -50,10 +53,13 @@ audit_success(char *exec_args[])
 }
 
 void
-audit_failure(char **exec_args, char const *const fmt, ...)
+audit_failure(char *exec_args[], char const *const fmt, ...)
 {
     va_list ap;
 
+    if (exec_args == NULL)
+       return;
+
     va_start(ap, fmt);
 #ifdef HAVE_BSM_AUDIT
     bsm_audit_failure(exec_args, fmt, ap);
index 9f54f9108d77228b1f87313a998d22b22ffcc053..6abc48cc12ce85b213779b401a1b84fe3f9625fd 100644 (file)
@@ -41,6 +41,7 @@
 # include <unistd.h>
 #endif /* HAVE_UNISTD_H */
 #include <pwd.h>
+#include <usersec.h>
 
 #include "sudoers.h"
 #include "sudo_auth.h"
 int
 aixauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth)
 {
-    char *pass;
-    char *message = NULL;
-    int reenter = 1;
-    int rval = AUTH_FAILURE;
+    char *pass, *message = NULL;
+    int result = 1, reenter = 0;
+    int rval = AUTH_SUCCESS;
 
-    pass = auth_getpass(prompt, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF);
-    if (pass) {
-       /* XXX - should probably print message on failure. */
-       if (authenticate(pw->pw_name, pass, &reenter, &message) == 0)
-           rval = AUTH_SUCCESS;
-       free(message);
+    do {
+       pass = auth_getpass(prompt, def_passwd_timeout * 60,
+           SUDO_CONV_PROMPT_ECHO_OFF);
+       if (pass == NULL)
+           break;
+       efree(message);
+       message = NULL;
+       result = authenticate(pw->pw_name, pass, &reenter, &message);
        zero_bytes(pass, strlen(pass));
+       prompt = message;
+    } while (reenter);
+
+    if (result != 0) {
+       /* Display error message, if any. */
+       if (message != NULL) {
+           struct sudo_conv_message msg;
+           struct sudo_conv_reply repl;
+
+           memset(&msg, 0, sizeof(msg));
+           msg.msg_type = SUDO_CONV_ERROR_MSG;
+           msg.msg = message;
+           memset(&repl, 0, sizeof(repl));
+           sudo_conv(1, &msg, &repl);
+       }
+       rval = pass ? AUTH_FAILURE : AUTH_INTR;
     }
+    efree(message);
     return rval;
 }
 
index f70e4248aaaec38b819a5d0e2312076050867da1..ac32a1e6ad6878d48e8128d512cf23e478fa74eb 100644 (file)
@@ -61,14 +61,14 @@ bsdauth_init(struct passwd *pw, char **promptp, sudo_auth *auth)
 
     if ((as = auth_open()) == NULL) {
        log_error(USE_ERRNO|NO_EXIT|NO_MAIL,
-           "unable to begin bsd authentication");
+           _("unable to begin bsd authentication"));
        return AUTH_FATAL;
     }
 
     /* XXX - maybe sanity check the auth style earlier? */
     login_style = login_getstyle(lc, login_style, "auth-sudo");
     if (login_style == NULL) {
-       log_error(NO_EXIT|NO_MAIL, "invalid authentication type");
+       log_error(NO_EXIT|NO_MAIL, _("invalid authentication type"));
        auth_close(as);
        return AUTH_FATAL;
     }
@@ -76,7 +76,7 @@ bsdauth_init(struct passwd *pw, char **promptp, sudo_auth *auth)
      if (auth_setitem(as, AUTHV_STYLE, login_style) < 0 ||
        auth_setitem(as, AUTHV_NAME, pw->pw_name) < 0 ||
        auth_setitem(as, AUTHV_CLASS, login_class) < 0) {
-       log_error(NO_EXIT|NO_MAIL, "unable to setup authentication");
+       log_error(NO_EXIT|NO_MAIL, _("unable to setup authentication"));
        auth_close(as);
        return AUTH_FATAL;
     }
index a3a5cffbb0b79fb6077f0d44e96a24c2646b59a1..a6e45b25333c1d0d4c8f55310b96ef5e988ef679 100644 (file)
@@ -56,22 +56,22 @@ fwtk_init(struct passwd *pw, char **promptp, sudo_auth *auth)
     char resp[128];                    /* Response from the server */
 
     if ((confp = cfg_read("sudo")) == (Cfg *)-1) {
-       warningx("cannot read fwtk config");
+       warningx(_("unable to read fwtk config"));
        return AUTH_FATAL;
     }
 
     if (auth_open(confp)) {
-       warningx("cannot connect to authentication server");
+       warningx(_("unable to connect to authentication server"));
        return AUTH_FATAL;
     }
 
     /* Get welcome message from auth server */
     if (auth_recv(resp, sizeof(resp))) {
-       warningx("lost connection to authentication server");
+       warningx(_("lost connection to authentication server"));
        return AUTH_FATAL;
     }
     if (strncmp(resp, "Authsrv ready", 13) != 0) {
-       warningx("authentication server error:\n%s", resp);
+       warningx(_("authentication server error:\n%s"), resp);
        return AUTH_FATAL;
     }
 
@@ -90,7 +90,7 @@ fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth)
     (void) snprintf(buf, sizeof(buf), "authorize %s 'sudo'", pw->pw_name);
 restart:
     if (auth_send(buf) || auth_recv(resp, sizeof(resp))) {
-       warningx("lost connection to authentication server");
+       warningx(_("lost connection to authentication server"));
        return AUTH_FATAL;
     }
 
@@ -123,7 +123,7 @@ restart:
     /* Send the user's response to the server */
     (void) snprintf(buf, sizeof(buf), "response '%s'", pass);
     if (auth_send(buf) || auth_recv(resp, sizeof(resp))) {
-       warningx("lost connection to authentication server");
+       warningx(_("lost connection to authentication server"));
        error = AUTH_FATAL;
        goto done;
     }
index 38d84cb190440b7fda4fa9a1da6f95b1a54a1212..d12e11ff0816b66eb481fa9d865f9e0c2359cd1d 100644 (file)
@@ -111,7 +111,7 @@ kerb5_init(struct passwd *pw, char **promptp, sudo_auth *auth)
     if ((error = krb5_parse_name(sudo_context, pw->pw_name,
        &(sudo_krb5_data.princ)))) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to parse '%s': %s", auth->name, pw->pw_name,
+                 _("%s: unable to parse '%s': %s"), auth->name, pw->pw_name,
                  error_message(error));
        return AUTH_FAILURE;
     }
@@ -124,7 +124,7 @@ kerb5_init(struct passwd *pw, char **promptp, sudo_auth *auth)
 #if 1
     if ((error = krb5_unparse_name(sudo_context, princ, &pname))) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to unparse princ ('%s'): %s", auth->name,
+                 _("%s: unable to unparse princ ('%s'): %s"), auth->name,
                  pw->pw_name, error_message(error));
        return AUTH_FAILURE;
     }
@@ -141,7 +141,7 @@ kerb5_init(struct passwd *pw, char **promptp, sudo_auth *auth)
     if ((error = krb5_cc_resolve(sudo_context, cache_name,
        &(sudo_krb5_data.ccache)))) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to resolve ccache: %s", auth->name,
+                 _("%s: unable to resolve ccache: %s"), auth->name,
                  error_message(error));
        return AUTH_FAILURE;
     }
@@ -185,7 +185,7 @@ kerb5_verify(struct passwd *pw, char *pass, sudo_auth *auth)
     error = krb5_get_init_creds_opt_alloc(sudo_context, &opts);
     if (error) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to allocate options: %s", auth->name,
+                 _("%s: unable to allocate options: %s"), auth->name,
                  error_message(error));
        goto done;
     }
@@ -201,7 +201,7 @@ kerb5_verify(struct passwd *pw, char *pass, sudo_auth *auth)
        /* Don't print error if just a bad password */
        if (error != KRB5KRB_AP_ERR_BAD_INTEGRITY)
            log_error(NO_EXIT|NO_MAIL,
-                     "%s: unable to get credentials: %s", auth->name,
+                     _("%s: unable to get credentials: %s"), auth->name,
                      error_message(error));
        goto done;
     }
@@ -214,11 +214,11 @@ kerb5_verify(struct passwd *pw, char *pass, sudo_auth *auth)
     /* Store cred in cred cache. */
     if ((error = krb5_cc_initialize(sudo_context, ccache, princ))) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to initialize ccache: %s", auth->name,
+                 _("%s: unable to initialize ccache: %s"), auth->name,
                  error_message(error));
     } else if ((error = krb5_cc_store_cred(sudo_context, ccache, creds))) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to store cred in ccache: %s", auth->name,
+                 _("%s: unable to store cred in ccache: %s"), auth->name,
                  error_message(error));
     }
 
@@ -281,7 +281,7 @@ verify_krb_v5_tgt(krb5_context sudo_context, krb5_creds *cred, char *auth_name)
     if ((error = krb5_sname_to_principal(sudo_context, NULL, NULL,
                                        KRB5_NT_SRV_HST, &server))) {
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: unable to get host principal: %s", auth_name,
+                 _("%s: unable to get host principal: %s"), auth_name,
                  error_message(error));
        return -1;
     }
@@ -296,8 +296,8 @@ verify_krb_v5_tgt(krb5_context sudo_context, krb5_creds *cred, char *auth_name)
     krb5_free_principal(sudo_context, server);
     if (error)
        log_error(NO_EXIT|NO_MAIL,
-                 "%s: Cannot verify TGT! Possible attack!: %s", auth_name,
-                 error_message(error));
+                 _("%s: Cannot verify TGT! Possible attack!: %s"),
+                 auth_name, error_message(error));
     return error;
 }
 #endif
index 4ff4eed2592a59229e166c5f7e85bf5712a20e6a..d66e30285c8a2bebb87d109bb09cf03dc4592f0a 100644 (file)
@@ -49,8 +49,7 @@
 # include <security/pam_appl.h>
 #endif
 
-#ifdef HAVE_DGETTEXT
-# include <libintl.h>
+#ifdef HAVE_LIBINTL_H
 # if defined(__LINUX_PAM__)
 #  define PAM_TEXT_DOMAIN      "Linux-PAM"
 # elif defined(__sun__)
@@ -97,7 +96,7 @@ pam_init(struct passwd *pw, char **promptp, sudo_auth *auth)
 #endif
        pam_status = pam_start("sudo", pw->pw_name, &pam_conv, &pamh);
     if (pam_status != PAM_SUCCESS) {
-       log_error(USE_ERRNO|NO_EXIT|NO_MAIL, "unable to initialize PAM");
+       log_error(USE_ERRNO|NO_EXIT|NO_MAIL, _("unable to initialize PAM"));
        return AUTH_FATAL;
     }
 
@@ -140,28 +139,27 @@ pam_verify(struct passwd *pw, char *prompt, sudo_auth *auth)
                case PAM_SUCCESS:
                    return AUTH_SUCCESS;
                case PAM_AUTH_ERR:
-                   log_error(NO_EXIT|NO_MAIL,
-                       "account validation failure, is your account locked?");
+                   log_error(NO_EXIT|NO_MAIL, _("account validation failure, "
+                       "is your account locked?"));
                    return AUTH_FATAL;
                case PAM_NEW_AUTHTOK_REQD:
-                   log_error(NO_EXIT|NO_MAIL, "%s, %s",
-                       "Account or password is expired",
-                       "reset your password and try again");
+                   log_error(NO_EXIT|NO_MAIL, _("Account or password is "
+                       "expired, reset your password and try again"));
                    *pam_status = pam_chauthtok(pamh,
                        PAM_CHANGE_EXPIRED_AUTHTOK);
                    if (*pam_status == PAM_SUCCESS)
                        return AUTH_SUCCESS;
                    if ((s = pam_strerror(pamh, *pam_status)))
-                       log_error(NO_EXIT|NO_MAIL, "pam_chauthtok: %s", s);
+                       log_error(NO_EXIT|NO_MAIL, _("pam_chauthtok: %s"), s);
                    return AUTH_FAILURE;
                case PAM_AUTHTOK_EXPIRED:
                    log_error(NO_EXIT|NO_MAIL,
-                       "Password expired, contact your system administrator");
+                       _("Password expired, contact your system administrator"));
                    return AUTH_FATAL;
                case PAM_ACCT_EXPIRED:
-                   log_error(NO_EXIT|NO_MAIL, "%s %s",
-                       "Account expired or PAM config lacks an \"account\"",
-                       "section for sudo, contact your system administrator");
+                   log_error(NO_EXIT|NO_MAIL,
+                       _("Account expired or PAM config lacks an \"account\" "
+                       "section for sudo, contact your system administrator"));
                    return AUTH_FATAL;
            }
            /* FALLTHROUGH */
@@ -175,7 +173,7 @@ pam_verify(struct passwd *pw, char *prompt, sudo_auth *auth)
            return AUTH_FAILURE;
        default:
            if ((s = pam_strerror(pamh, *pam_status)))
-               log_error(NO_EXIT|NO_MAIL, "pam_authenticate: %s", s);
+               log_error(NO_EXIT|NO_MAIL, _("pam_authenticate: %s"), s);
            return AUTH_FATAL;
     }
 }
@@ -293,7 +291,7 @@ converse(int num_msg, PAM_CONST struct pam_message **msg,
                    (def_prompt[9] == ' ' && def_prompt[10] == '\0'));
 
                /* Only override PAM prompt if it matches /^Password: ?/ */
-#if defined(PAM_TEXT_DOMAIN) && defined(HAVE_DGETTEXT)
+#if defined(PAM_TEXT_DOMAIN) && defined(HAVE_LIBINTL_H)
                if (!def_passprompt_override && (std_prompt ||
                    (strcmp(pm->msg, dgettext(PAM_TEXT_DOMAIN, "Password: ")) &&
                    strcmp(pm->msg, dgettext(PAM_TEXT_DOMAIN, "Password:")))))
index 846b7b23bff3db627ff4f993bd6a0e0e2a5a2826..fe5b28f372c4dd8223eb5180b445c065235eac3b 100644 (file)
@@ -100,7 +100,7 @@ rfc1938_setup(struct passwd *pw, char **promptp, sudo_auth *auth)
      */
     if (rfc1938challenge(&rfc1938, pw->pw_name, challenge, sizeof(challenge))) {
        if (IS_ONEANDONLY(auth)) {
-           warningx("you do not exist in the %s database", auth->name);
+           warningx(_("you do not exist in the %s database"), auth->name);
            return AUTH_FATAL;
        } else {
            return AUTH_FAILURE;
index bcea4e97d27af31018f620b2a4d03505af12637c..0f53511032b05e85cd955fc95a4f90c1be20670d 100644 (file)
@@ -79,7 +79,7 @@ securid_setup(struct passwd *pw, char **promptp, sudo_auth *auth)
        strlcpy(sd->username, pw->pw_name, 32);
        return AUTH_SUCCESS;
     } else {
-       warningx("unable to contact the SecurID server");
+       warningx(_("unable to contact the SecurID server"));
        return AUTH_FATAL;
     }
 }
index 9d0ed4f4f2e4f50cb5697ec27ef1b8a0f155f5ef..45513c9a92ed27e19fc84dbd2898b2604c0dd985 100644 (file)
@@ -78,7 +78,7 @@ securid_init(struct passwd *pw, char **promptp, sudo_auth *auth)
     if (AceInitialize() != SD_FALSE)
        return AUTH_SUCCESS;
 
-    warningx("failed to initialise the ACE API library");
+    warningx(_("failed to initialise the ACE API library"));
     return AUTH_FATAL;
 }
 
@@ -103,7 +103,7 @@ securid_setup(struct passwd *pw, char **promptp, sudo_auth *auth)
 
     /* Re-initialize SecurID every time. */
     if (SD_Init(sd) != ACM_OK) {
-       warningx("unable to contact the SecurID server");
+       warningx(_("unable to contact the SecurID server"));
        return AUTH_FATAL;
     }
 
@@ -112,23 +112,23 @@ securid_setup(struct passwd *pw, char **promptp, sudo_auth *auth)
 
     switch (retval) {
        case ACM_OK:
-               warningx("User ID locked for SecurID Authentication");
+               warningx(_("User ID locked for SecurID Authentication"));
                return AUTH_SUCCESS;
 
         case ACE_UNDEFINED_USERNAME:
-               warningx("invalid username length for SecurID");
+               warningx(_("invalid username length for SecurID"));
                return AUTH_FATAL;
 
        case ACE_ERR_INVALID_HANDLE:
-               warningx("invalid Authentication Handle for SecurID");
+               warningx(_("invalid Authentication Handle for SecurID"));
                return AUTH_FATAL;
 
        case ACM_ACCESS_DENIED:
-               warningx("SecurID communication failed");
+               warningx(_("SecurID communication failed"));
                return AUTH_FATAL;
 
        default:
-               warningx("unknown SecurID error");
+               warningx(_("unknown SecurID error"));
                return AUTH_FATAL;
        }
 }
@@ -161,17 +161,17 @@ securid_verify(struct passwd *pw, char *pass, sudo_auth *auth)
                break;
 
        case ACE_UNDEFINED_PASSCODE:
-               warningx("invalid passcode length for SecurID");
+               warningx(_("invalid passcode length for SecurID"));
                rval = AUTH_FATAL;
                break;
 
        case ACE_UNDEFINED_USERNAME:
-               warningx("invalid username length for SecurID");
+               warningx(_("invalid username length for SecurID"));
                rval = AUTH_FATAL;
                break;
 
        case ACE_ERR_INVALID_HANDLE:
-               warningx("invalid Authentication Handle for SecurID");
+               warningx(_("invalid Authentication Handle for SecurID"));
                rval = AUTH_FATAL;
                break;
 
@@ -210,7 +210,7 @@ then enter the new token code.\n", \
                break;
 
        default:
-               warningx("unknown SecurID error");
+               warningx(_("unknown SecurID error"));
                rval = AUTH_FATAL;
                break;
     }
index 65c6653784179068422df51f94cb90e91dc72cc8..20d0c14aa70008f245fe5e9ca63003ec5bde5706 100644 (file)
@@ -103,7 +103,7 @@ sia_setup(struct passwd *pw, char **promptp, sudo_auth *auth)
     if (sia_ses_init(&siah, sudo_argc, sudo_argv, NULL, pw->pw_name, user_ttypath, 1, NULL) != SIASUCCESS) {
 
        log_error(USE_ERRNO|NO_EXIT|NO_MAIL,
-           "unable to initialize SIA session");
+           _("unable to initialize SIA session"));
        return AUTH_FATAL;
     }
 
index fc697165c72b01d94ce231a7dc17a3bea0bf08d8..f82b5cb7fd76726f2bb7d49d846610b99a99caa4 100644 (file)
@@ -120,10 +120,10 @@ verify_user(struct passwd *pw, char *prompt)
     /* Make sure we have at least one auth method. */
     if (auth_switch[0].name == NULL) {
        audit_failure(NewArgv, "no authentication methods");
-       log_error(0, "%s  %s %s",
-           "There are no authentication methods compiled into sudo!",
-           "If you want to turn off authentication, use the",
-           "--disable-authentication configure option.");
+       log_error(0,
+           _("There are no authentication methods compiled into sudo!  "
+           "If you want to turn off authentication, use the "
+           "--disable-authentication configure option."));
        return -1;
     }
 
@@ -131,8 +131,8 @@ verify_user(struct passwd *pw, char *prompt)
     standalone = IS_STANDALONE(&auth_switch[0]);
     if (standalone && auth_switch[1].name != NULL) {
        audit_failure(NewArgv, "invalid authentication methods");
-       log_error(0, "Invalid authentication methods compiled into sudo!  "
-           "You cannot mix standalone and non-standalone authentication.");
+       log_error(0, _("Invalid authentication methods compiled into sudo!  "
+           "You may mix standalone and non-standalone authentication."));
        return -1;
     }
 
@@ -240,9 +240,9 @@ cleanup:
                    flags = 0;
                else
                    flags = NO_MAIL;
-               log_error(flags, "%d incorrect password attempt%s",
-                   def_passwd_tries - counter,
-                   (def_passwd_tries - counter == 1) ? "" : "s");
+               log_error(flags, ngettext("%d incorrect password attempt",
+                   "%d incorrect password attempts",
+                   def_passwd_tries - counter), def_passwd_tries - counter);
            }
            audit_failure(NewArgv, "authentication failure");
            rval = FALSE;
@@ -332,7 +332,7 @@ dump_auth_methods(void)
 {
     sudo_auth *auth;
 
-    sudo_printf(SUDO_CONV_INFO_MSG, "Authentication methods:");
+    sudo_printf(SUDO_CONV_INFO_MSG, _("Authentication methods:"));
     for (auth = auth_switch; auth->name; auth++)
        sudo_printf(SUDO_CONV_INFO_MSG, " '%s'", auth->name);
     sudo_printf(SUDO_CONV_INFO_MSG, "\n");
index 8354fe302fa720e07d09c73d3281461d6c05a006..df53ea0c791844862e46fb3fbfa2ad6b85a87004 100644 (file)
@@ -55,10 +55,10 @@ audit_sudo_selected(int sf)
        if (getaudit_addr(&ainfo_addr, sizeof(ainfo_addr)) < 0) {
                if (errno == ENOSYS) {
                        if (getaudit(&ainfo) < 0)
-                               log_error(0, "getaudit: failed");
+                               log_error(0, _("getaudit: failed"));
                        mask = &ainfo.ai_mask;
                } else
-                       log_error(0, "getaudit: failed");
+                       log_error(0, _("getaudit: failed"));
         } else
                mask = &ainfo_addr.ai_mask;
        sorf = (sf == 0) ? AU_PRS_SUCCESS : AU_PRS_FAILURE;
@@ -84,7 +84,7 @@ bsm_audit_success(char **exec_args)
        if (auditon(A_GETCOND, (caddr_t)&au_cond, sizeof(long)) < 0) {
                if (errno == AUDIT_NOT_CONFIGURED)
                        return;
-               log_error(0, "Could not determine audit condition");
+               log_error(0, _("Could not determine audit condition"));
        }
        if (au_cond == AUC_NOAUDIT)
                return;
@@ -95,9 +95,9 @@ bsm_audit_success(char **exec_args)
        if (!audit_sudo_selected(0))
                return;
        if (getauid(&auid) < 0)
-               log_error(0, "getauid failed");
+               log_error(0, _("getauid failed"));
        if ((aufd = au_open()) == -1)
-               log_error(0, "au_open: failed");
+               log_error(0, _("au_open: failed"));
        if (getaudit_addr(&ainfo_addr, sizeof(ainfo_addr)) == 0) {
                tok = au_to_subject_ex(auid, geteuid(), getegid(), getuid(),
                    getuid(), pid, pid, &ainfo_addr.ai_termid);
@@ -106,24 +106,24 @@ bsm_audit_success(char **exec_args)
                 * NB: We should probably watch out for ERANGE here.
                 */
                if (getaudit(&ainfo) < 0)
-                       log_error(0, "getaudit: failed");
+                       log_error(0, _("getaudit: failed"));
                tok = au_to_subject(auid, geteuid(), getegid(), getuid(),
                    getuid(), pid, pid, &ainfo.ai_termid);
        } else
-               log_error(0, "getaudit: failed");
+               log_error(0, _("getaudit: failed"));
        if (tok == NULL)
-               log_error(0, "au_to_subject: failed");
+               log_error(0, _("au_to_subject: failed"));
        au_write(aufd, tok);
        tok = au_to_exec_args(exec_args);
        if (tok == NULL)
-               log_error(0, "au_to_exec_args: failed");
+               log_error(0, _("au_to_exec_args: failed"));
        au_write(aufd, tok);
        tok = au_to_return32(0, 0);
        if (tok == NULL)
-               log_error(0, "au_to_return32: failed");
+               log_error(0, _("au_to_return32: failed"));
        au_write(aufd, tok);
        if (au_close(aufd, 1, AUE_sudo) == -1)
-               log_error(0, "unable to commit audit record");
+               log_error(0, _("unable to commit audit record"));
 }
 
 void
@@ -145,42 +145,42 @@ bsm_audit_failure(char **exec_args, char const *const fmt, va_list ap)
        if (auditon(A_GETCOND, &au_cond, sizeof(long)) < 0) {
                if (errno == AUDIT_NOT_CONFIGURED)
                        return;
-               log_error(0, "Could not determine audit condition");
+               log_error(0, _("Could not determine audit condition"));
        }
        if (au_cond == AUC_NOAUDIT)
                return;
        if (!audit_sudo_selected(1))
                return;
        if (getauid(&auid) < 0)
-               log_error(0, "getauid: failed");
+               log_error(0, _("getauid: failed"));
        if ((aufd = au_open()) == -1)
-               log_error(0, "au_open: failed");
+               log_error(0, _("au_open: failed"));
        if (getaudit_addr(&ainfo_addr, sizeof(ainfo_addr)) == 0) { 
                tok = au_to_subject_ex(auid, geteuid(), getegid(), getuid(),
                    getuid(), pid, pid, &ainfo_addr.ai_termid);
        } else if (errno == ENOSYS) {
                if (getaudit(&ainfo) < 0) 
-                       log_error(0, "getaudit: failed");
+                       log_error(0, _("getaudit: failed"));
                tok = au_to_subject(auid, geteuid(), getegid(), getuid(),
                    getuid(), pid, pid, &ainfo.ai_termid);
        } else
-               log_error(0, "getaudit: failed");
+               log_error(0, _("getaudit: failed"));
        if (tok == NULL)
-               log_error(0, "au_to_subject: failed");
+               log_error(0, _("au_to_subject: failed"));
        au_write(aufd, tok);
        tok = au_to_exec_args(exec_args);
        if (tok == NULL)
-               log_error(0, "au_to_exec_args: failed");
+               log_error(0, _("au_to_exec_args: failed"));
        au_write(aufd, tok);
        (void) vsnprintf(text, sizeof(text), fmt, ap);
        tok = au_to_text(text);
        if (tok == NULL)
-               log_error(0, "au_to_text: failed");
+               log_error(0, _("au_to_text: failed"));
        au_write(aufd, tok);
        tok = au_to_return32(EPERM, 1);
        if (tok == NULL)
-               log_error(0, "au_to_return32: failed");
+               log_error(0, _("au_to_return32: failed"));
        au_write(aufd, tok);
        if (au_close(aufd, 1, AUE_sudo) == -1)
-               log_error(0, "unable to commit audit record");
+               log_error(0, _("unable to commit audit record"));
 }
index af2412f3fbc8e267db2844259db6a83b80eaf0d8..6a361054d7522baa04f9689a256e5d5a61953316 100644 (file)
@@ -138,11 +138,11 @@ check_user(int validated, int mode)
 
        /* Bail out if we are non-interactive and a password is required */
        if (ISSET(mode, MODE_NONINTERACTIVE)) {
-           warningx("sorry, a password is required to run %s", getprogname());
+           warningx(_("sorry, a password is required to run %s"), getprogname());
            return -1;
        }
 
-       /* XXX - should not lecture if askpass help is being used. */
+       /* XXX - should not lecture if askpass helper is being used. */
        lecture(status);
 
        /* Expand any escapes in the prompt. */
@@ -163,12 +163,12 @@ check_user(int validated, int mode)
     return rval;
 }
 
-static const char lecture_text[] = "\n"
-"We trust you have received the usual lecture from the local System\n"
-"Administrator. It usually boils down to these three things:\n\n"
-"    #1) Respect the privacy of others.\n"
-"    #2) Think before you type.\n"
-"    #3) With great power comes great responsibility.\n\n";
+#define DEFAULT_LECTURE "\n" \
+    "We trust you have received the usual lecture from the local System\n" \
+    "Administrator. It usually boils down to these three things:\n\n" \
+    "    #1) Respect the privacy of others.\n" \
+    "    #2) Think before you type.\n" \
+    "    #3) With great power comes great responsibility.\n\n"
 
 /*
  * Standard sudo lecture.
@@ -199,7 +199,7 @@ lecture(int status)
        fclose(fp);
     } else {
        msg.msg_type = SUDO_CONV_ERROR_MSG;
-       msg.msg = lecture_text;
+       msg.msg = _(DEFAULT_LECTURE);
        sudo_conv(1, &msg, &repl);
     }
 }
@@ -222,17 +222,21 @@ update_timestamp(char *timestampdir, char *timestampfile)
         */
        int fd = open(timestampfile, O_WRONLY|O_CREAT, 0600);
        if (fd == -1)
-           log_error(NO_EXIT|USE_ERRNO, "Can't open %s", timestampfile);
+           log_error(NO_EXIT|USE_ERRNO, _("unable to open %s"), timestampfile);
        else {
            lock_file(fd, SUDO_LOCK);
-           if (write(fd, &tty_info, sizeof(tty_info)) != sizeof(tty_info))
-               log_error(NO_EXIT|USE_ERRNO, "Can't write %s", timestampfile);
+           if (write(fd, &tty_info, sizeof(tty_info)) != sizeof(tty_info)) {
+               log_error(NO_EXIT|USE_ERRNO, _("unable to write to %s"),
+                   timestampfile);
+           }
            close(fd);
        }
     } else {
        if (touch(-1, timestampdir, NULL) == -1) {
-           if (mkdir(timestampdir, 0700) == -1)
-               log_error(NO_EXIT|USE_ERRNO, "Can't mkdir %s", timestampdir);
+           if (mkdir(timestampdir, 0700) == -1) {
+               log_error(NO_EXIT|USE_ERRNO, _("unable to mkdir %s"),
+                   timestampdir);
+           }
        }
     }
     if (timestamp_uid != 0)
@@ -363,7 +367,7 @@ expand_prompt(char *old_prompt, char *user, char *host)
 
 oflow:
     /* We pre-allocate enough space, so this should never happen. */
-    errorx(1, "internal error, expand_prompt() overflow");
+    errorx(1, _("internal error, expand_prompt() overflow"));
 }
 
 /*
@@ -388,10 +392,8 @@ build_timestamp(char **timestampdir, char **timestampfile)
 
     dirparent = def_timestampdir;
     len = easprintf(timestampdir, "%s/%s", dirparent, user_name);
-    if (len >= PATH_MAX) {
-       log_error(0, "timestamp path too long: %s", *timestampdir);
-       return -1;
-    }
+    if (len >= PATH_MAX)
+       goto bad;
 
     /*
      * Timestamp file may be a file in the directory or NUL to use
@@ -409,21 +411,20 @@ build_timestamp(char **timestampdir, char **timestampfile)
                p, runas_pw->pw_name);
        else
            len = easprintf(timestampfile, "%s/%s/%s", dirparent, user_name, p);
-       if (len >= PATH_MAX) {
-           log_error(0, "timestamp path too long: %s", *timestampfile);
-           return -1;
-       }
+       if (len >= PATH_MAX)
+           goto bad;
     } else if (def_targetpw) {
        len = easprintf(timestampfile, "%s/%s/%s", dirparent, user_name,
            runas_pw->pw_name);
-       if (len >= PATH_MAX) {
-           log_error(0, "timestamp path too long: %s", *timestampfile);
-           return -1;
-       }
+       if (len >= PATH_MAX)
+           goto bad;
     } else
        *timestampfile = NULL;
 
     return len;
+bad:
+    log_error(0, _("timestamp path too long: %s"), *timestampfile);
+    return -1;
 }
 
 /*
@@ -450,15 +451,15 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
      */
     if (lstat(dirparent, &sb) == 0) {
        if (!S_ISDIR(sb.st_mode))
-           log_error(NO_EXIT, "%s exists but is not a directory (0%o)",
+           log_error(NO_EXIT, _("%s exists but is not a directory (0%o)"),
                dirparent, (unsigned int) sb.st_mode);
        else if (sb.st_uid != timestamp_uid)
-           log_error(NO_EXIT, "%s owned by uid %u, should be uid %u",
+           log_error(NO_EXIT, _("%s owned by uid %u, should be uid %u"),
                dirparent, (unsigned int) sb.st_uid,
                (unsigned int) timestamp_uid);
        else if ((sb.st_mode & 0000022))
            log_error(NO_EXIT,
-               "%s writable by non-owner (0%o), should be mode 0700",
+               _("%s writable by non-owner (0%o), should be mode 0700"),
                dirparent, (unsigned int) sb.st_mode);
        else {
            if ((sb.st_mode & 0000777) != 0700)
@@ -466,12 +467,12 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
            status = TS_MISSING;
        }
     } else if (errno != ENOENT) {
-       log_error(NO_EXIT|USE_ERRNO, "can't stat %s", dirparent);
+       log_error(NO_EXIT|USE_ERRNO, _("unable to stat %s"), dirparent);
     } else {
        /* No dirparent, try to make one. */
        if (ISSET(flags, TS_MAKE_DIRS)) {
            if (mkdir(dirparent, S_IRWXU))
-               log_error(NO_EXIT|USE_ERRNO, "can't mkdir %s",
+               log_error(NO_EXIT|USE_ERRNO, _("unable to mkdir %s"),
                    dirparent);
            else
                status = TS_MISSING;
@@ -494,15 +495,15 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
                if (unlink(timestampdir) == 0)
                    status = TS_MISSING;
            } else
-               log_error(NO_EXIT, "%s exists but is not a directory (0%o)",
+               log_error(NO_EXIT, _("%s exists but is not a directory (0%o)"),
                    timestampdir, (unsigned int) sb.st_mode);
        } else if (sb.st_uid != timestamp_uid)
-           log_error(NO_EXIT, "%s owned by uid %u, should be uid %u",
+           log_error(NO_EXIT, _("%s owned by uid %u, should be uid %u"),
                timestampdir, (unsigned int) sb.st_uid,
                (unsigned int) timestamp_uid);
        else if ((sb.st_mode & 0000022))
            log_error(NO_EXIT,
-               "%s writable by non-owner (0%o), should be mode 0700",
+               _("%s writable by non-owner (0%o), should be mode 0700"),
                timestampdir, (unsigned int) sb.st_mode);
        else {
            if ((sb.st_mode & 0000777) != 0700)
@@ -510,7 +511,7 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
            status = TS_OLD;            /* do date check later */
        }
     } else if (errno != ENOENT) {
-       log_error(NO_EXIT|USE_ERRNO, "can't stat %s", timestampdir);
+       log_error(NO_EXIT|USE_ERRNO, _("unable to stat %s"), timestampdir);
     } else
        status = TS_MISSING;
 
@@ -521,7 +522,7 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
     if (status == TS_MISSING && timestampfile && ISSET(flags, TS_MAKE_DIRS)) {
        if (mkdir(timestampdir, S_IRWXU) == -1) {
            status = TS_ERROR;
-           log_error(NO_EXIT|USE_ERRNO, "can't mkdir %s", timestampdir);
+           log_error(NO_EXIT|USE_ERRNO, _("unable to mkdir %s"), timestampdir);
        }
     }
 
@@ -536,19 +537,19 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
        if (lstat(timestampfile, &sb) == 0) {
            if (!S_ISREG(sb.st_mode)) {
                status = TS_ERROR;
-               log_error(NO_EXIT, "%s exists but is not a regular file (0%o)",
+               log_error(NO_EXIT, _("%s exists but is not a regular file (0%o)"),
                    timestampfile, (unsigned int) sb.st_mode);
            } else {
                /* If bad uid or file mode, complain and kill the bogus file. */
                if (sb.st_uid != timestamp_uid) {
                    log_error(NO_EXIT,
-                       "%s owned by uid %u, should be uid %u",
+                       _("%s owned by uid %u, should be uid %u"),
                        timestampfile, (unsigned int) sb.st_uid,
                        (unsigned int) timestamp_uid);
                    (void) unlink(timestampfile);
                } else if ((sb.st_mode & 0000022)) {
                    log_error(NO_EXIT,
-                       "%s writable by non-owner (0%o), should be mode 0600",
+                       _("%s writable by non-owner (0%o), should be mode 0600"),
                        timestampfile, (unsigned int) sb.st_mode);
                    (void) unlink(timestampfile);
                } else {
@@ -578,7 +579,7 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
                }
            }
        } else if (errno != ENOENT) {
-           log_error(NO_EXIT|USE_ERRNO, "can't stat %s", timestampfile);
+           log_error(NO_EXIT|USE_ERRNO, _("unable to stat %s"), timestampfile);
            status = TS_ERROR;
        }
     }
@@ -602,7 +603,7 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
                if (mtime.tv_sec > now + 60 * def_timestamp_timeout * 2) {
                    time_t tv_sec = (time_t)mtime.tv_sec;
                    log_error(NO_EXIT,
-                       "timestamp too far in the future: %20.20s",
+                       _("timestamp too far in the future: %20.20s"),
                        4 + ctime(&tv_sec));
                    if (timestampfile)
                        (void) unlink(timestampfile);
@@ -647,14 +648,16 @@ remove_timestamp(int remove)
            else
                status = rmdir(timestampdir);
            if (status == -1 && errno != ENOENT) {
-               log_error(NO_EXIT, "can't remove %s (%s), will reset to Epoch",
+               log_error(NO_EXIT,
+                   _("unable to remove %s (%s), will reset to the epoch"),
                    path, strerror(errno));
                remove = FALSE;
            }
-       } else {
+       }
+       if (!remove) {
            timevalclear(&tv);
            if (touch(-1, path, &tv) == -1 && errno != ENOENT)
-               error(1, "can't reset %s to Epoch", path);
+               error(1, _("unable to reset %s to the epoch"), path);
        }
     }
 
@@ -707,14 +710,14 @@ get_authpw(void)
     struct passwd *pw;
 
     if (def_rootpw) {
-       if ((pw = sudo_getpwuid(0)) == NULL)
-           log_error(0, "unknown uid: 0");
+       if ((pw = sudo_getpwuid(ROOT_UID)) == NULL)
+           log_error(0, _("unknown uid: %u"), ROOT_UID);
     } else if (def_runaspw) {
        if ((pw = sudo_getpwnam(def_runas_default)) == NULL)
-           log_error(0, "unknown user: %s", def_runas_default);
+           log_error(0, _("unknown user: %s"), def_runas_default);
     } else if (def_targetpw) {
        if (runas_pw->pw_name == NULL)
-           log_error(NO_MAIL|MSG_ONLY, "unknown uid: %u",
+           log_error(NO_MAIL|MSG_ONLY, _("unknown uid: %u"),
                (unsigned int) runas_pw->pw_uid);
        pw_addref(runas_pw);
        pw = runas_pw;
index ca02cedd66ccfc25b2eed5a2239cd530b4c62728..200d76a654cce7064d4c4b928eadd395548f6b88 100644 (file)
@@ -24,327 +24,327 @@ static struct def_values def_data_verifypw[] = {
 struct sudo_defs_types sudo_defs_table[] = {
     {
        "syslog", T_LOGFAC|T_BOOL,
-       "Syslog facility if syslog is being used for logging: %s",
+       N_("Syslog facility if syslog is being used for logging: %s"),
        NULL,
     }, {
        "syslog_goodpri", T_LOGPRI,
-       "Syslog priority to use when user authenticates successfully: %s",
+       N_("Syslog priority to use when user authenticates successfully: %s"),
        NULL,
     }, {
        "syslog_badpri", T_LOGPRI,
-       "Syslog priority to use when user authenticates unsuccessfully: %s",
+       N_("Syslog priority to use when user authenticates unsuccessfully: %s"),
        NULL,
     }, {
        "long_otp_prompt", T_FLAG,
-       "Put OTP prompt on its own line",
+       N_("Put OTP prompt on its own line"),
        NULL,
     }, {
        "ignore_dot", T_FLAG,
-       "Ignore '.' in $PATH",
+       N_("Ignore '.' in $PATH"),
        NULL,
     }, {
        "mail_always", T_FLAG,
-       "Always send mail when sudo is run",
+       N_("Always send mail when sudo is run"),
        NULL,
     }, {
        "mail_badpass", T_FLAG,
-       "Send mail if user authentication fails",
+       N_("Send mail if user authentication fails"),
        NULL,
     }, {
        "mail_no_user", T_FLAG,
-       "Send mail if the user is not in sudoers",
+       N_("Send mail if the user is not in sudoers"),
        NULL,
     }, {
        "mail_no_host", T_FLAG,
-       "Send mail if the user is not in sudoers for this host",
+       N_("Send mail if the user is not in sudoers for this host"),
        NULL,
     }, {
        "mail_no_perms", T_FLAG,
-       "Send mail if the user is not allowed to run a command",
+       N_("Send mail if the user is not allowed to run a command"),
        NULL,
     }, {
        "tty_tickets", T_FLAG,
-       "Use a separate timestamp for each user/tty combo",
+       N_("Use a separate timestamp for each user/tty combo"),
        NULL,
     }, {
        "lecture", T_TUPLE|T_BOOL,
-       "Lecture user the first time they run sudo",
+       N_("Lecture user the first time they run sudo"),
        def_data_lecture,
     }, {
        "lecture_file", T_STR|T_PATH|T_BOOL,
-       "File containing the sudo lecture: %s",
+       N_("File containing the sudo lecture: %s"),
        NULL,
     }, {
        "authenticate", T_FLAG,
-       "Require users to authenticate by default",
+       N_("Require users to authenticate by default"),
        NULL,
     }, {
        "root_sudo", T_FLAG,
-       "Root may run sudo",
+       N_("Root may run sudo"),
        NULL,
     }, {
        "log_host", T_FLAG,
-       "Log the hostname in the (non-syslog) log file",
+       N_("Log the hostname in the (non-syslog) log file"),
        NULL,
     }, {
        "log_year", T_FLAG,
-       "Log the year in the (non-syslog) log file",
+       N_("Log the year in the (non-syslog) log file"),
        NULL,
     }, {
        "shell_noargs", T_FLAG,
-       "If sudo is invoked with no arguments, start a shell",
+       N_("If sudo is invoked with no arguments, start a shell"),
        NULL,
     }, {
        "set_home", T_FLAG,
-       "Set $HOME to the target user when starting a shell with -s",
+       N_("Set $HOME to the target user when starting a shell with -s"),
        NULL,
     }, {
        "always_set_home", T_FLAG,
-       "Always set $HOME to the target user's home directory",
+       N_("Always set $HOME to the target user's home directory"),
        NULL,
     }, {
        "path_info", T_FLAG,
-       "Allow some information gathering to give useful error messages",
+       N_("Allow some information gathering to give useful error messages"),
        NULL,
     }, {
        "fqdn", T_FLAG,
-       "Require fully-qualified hostnames in the sudoers file",
+       N_("Require fully-qualified hostnames in the sudoers file"),
        NULL,
     }, {
        "insults", T_FLAG,
-       "Insult the user when they enter an incorrect password",
+       N_("Insult the user when they enter an incorrect password"),
        NULL,
     }, {
        "requiretty", T_FLAG,
-       "Only allow the user to run sudo if they have a tty",
+       N_("Only allow the user to run sudo if they have a tty"),
        NULL,
     }, {
        "env_editor", T_FLAG,
-       "Visudo will honor the EDITOR environment variable",
+       N_("Visudo will honor the EDITOR environment variable"),
        NULL,
     }, {
        "rootpw", T_FLAG,
-       "Prompt for root's password, not the users's",
+       N_("Prompt for root's password, not the users's"),
        NULL,
     }, {
        "runaspw", T_FLAG,
-       "Prompt for the runas_default user's password, not the users's",
+       N_("Prompt for the runas_default user's password, not the users's"),
        NULL,
     }, {
        "targetpw", T_FLAG,
-       "Prompt for the target user's password, not the users's",
+       N_("Prompt for the target user's password, not the users's"),
        NULL,
     }, {
        "use_loginclass", T_FLAG,
-       "Apply defaults in the target user's login class if there is one",
+       N_("Apply defaults in the target user's login class if there is one"),
        NULL,
     }, {
        "set_logname", T_FLAG,
-       "Set the LOGNAME and USER environment variables",
+       N_("Set the LOGNAME and USER environment variables"),
        NULL,
     }, {
        "stay_setuid", T_FLAG,
-       "Only set the effective uid to the target user, not the real uid",
+       N_("Only set the effective uid to the target user, not the real uid"),
        NULL,
     }, {
        "preserve_groups", T_FLAG,
-       "Don't initialize the group vector to that of the target user",
+       N_("Don't initialize the group vector to that of the target user"),
        NULL,
     }, {
        "loglinelen", T_UINT|T_BOOL,
-       "Length at which to wrap log file lines (0 for no wrap): %d",
+       N_("Length at which to wrap log file lines (0 for no wrap): %d"),
        NULL,
     }, {
        "timestamp_timeout", T_FLOAT|T_BOOL,
-       "Authentication timestamp timeout: %.1f minutes",
+       N_("Authentication timestamp timeout: %.1f minutes"),
        NULL,
     }, {
        "passwd_timeout", T_FLOAT|T_BOOL,
-       "Password prompt timeout: %.1f minutes",
+       N_("Password prompt timeout: %.1f minutes"),
        NULL,
     }, {
        "passwd_tries", T_UINT,
-       "Number of tries to enter a password: %d",
+       N_("Number of tries to enter a password: %d"),
        NULL,
     }, {
        "umask", T_MODE|T_BOOL,
-       "Umask to use or 0777 to use user's: 0%o",
+       N_("Umask to use or 0777 to use user's: 0%o"),
        NULL,
     }, {
        "logfile", T_STR|T_BOOL|T_PATH,
-       "Path to log file: %s",
+       N_("Path to log file: %s"),
        NULL,
     }, {
        "mailerpath", T_STR|T_BOOL|T_PATH,
-       "Path to mail program: %s",
+       N_("Path to mail program: %s"),
        NULL,
     }, {
        "mailerflags", T_STR|T_BOOL,
-       "Flags for mail program: %s",
+       N_("Flags for mail program: %s"),
        NULL,
     }, {
        "mailto", T_STR|T_BOOL,
-       "Address to send mail to: %s",
+       N_("Address to send mail to: %s"),
        NULL,
     }, {
        "mailfrom", T_STR|T_BOOL,
-       "Address to send mail from: %s",
+       N_("Address to send mail from: %s"),
        NULL,
     }, {
        "mailsub", T_STR,
-       "Subject line for mail messages: %s",
+       N_("Subject line for mail messages: %s"),
        NULL,
     }, {
        "badpass_message", T_STR,
-       "Incorrect password message: %s",
+       N_("Incorrect password message: %s"),
        NULL,
     }, {
        "timestampdir", T_STR|T_PATH,
-       "Path to authentication timestamp dir: %s",
+       N_("Path to authentication timestamp dir: %s"),
        NULL,
     }, {
        "timestampowner", T_STR,
-       "Owner of the authentication timestamp dir: %s",
+       N_("Owner of the authentication timestamp dir: %s"),
        NULL,
     }, {
        "exempt_group", T_STR|T_BOOL,
-       "Users in this group are exempt from password and PATH requirements: %s",
+       N_("Users in this group are exempt from password and PATH requirements: %s"),
        NULL,
     }, {
        "passprompt", T_STR,
-       "Default password prompt: %s",
+       N_("Default password prompt: %s"),
        NULL,
     }, {
        "passprompt_override", T_FLAG,
-       "If set, passprompt will override system prompt in all cases.",
+       N_("If set, passprompt will override system prompt in all cases."),
        NULL,
     }, {
        "runas_default", T_STR,
-       "Default user to run commands as: %s",
+       N_("Default user to run commands as: %s"),
        NULL,
     }, {
        "secure_path", T_STR|T_BOOL,
-       "Value to override user's $PATH with: %s",
+       N_("Value to override user's $PATH with: %s"),
        NULL,
     }, {
        "editor", T_STR|T_PATH,
-       "Path to the editor for use by visudo: %s",
+       N_("Path to the editor for use by visudo: %s"),
        NULL,
     }, {
        "listpw", T_TUPLE|T_BOOL,
-       "When to require a password for 'list' pseudocommand: %s",
+       N_("When to require a password for 'list' pseudocommand: %s"),
        def_data_listpw,
     }, {
        "verifypw", T_TUPLE|T_BOOL,
-       "When to require a password for 'verify' pseudocommand: %s",
+       N_("When to require a password for 'verify' pseudocommand: %s"),
        def_data_verifypw,
     }, {
        "noexec", T_FLAG,
-       "Preload the dummy exec functions contained in 'noexec_file'",
+       N_("Preload the dummy exec functions contained in 'noexec_file'"),
        NULL,
     }, {
        "noexec_file", T_STR|T_PATH,
-       "File containing dummy exec functions: %s",
+       N_("File containing dummy exec functions: %s"),
        NULL,
     }, {
        "ignore_local_sudoers", T_FLAG,
-       "If LDAP directory is up, do we ignore local sudoers file",
+       N_("If LDAP directory is up, do we ignore local sudoers file"),
        NULL,
     }, {
        "closefrom", T_INT,
-       "File descriptors >= %d will be closed before executing a command",
+       N_("File descriptors >= %d will be closed before executing a command"),
        NULL,
     }, {
        "closefrom_override", T_FLAG,
-       "If set, users may override the value of `closefrom' with the -C option",
+       N_("If set, users may override the value of `closefrom' with the -C option"),
        NULL,
     }, {
        "setenv", T_FLAG,
-       "Allow users to set arbitrary environment variables",
+       N_("Allow users to set arbitrary environment variables"),
        NULL,
     }, {
        "env_reset", T_FLAG,
-       "Reset the environment to a default set of variables",
+       N_("Reset the environment to a default set of variables"),
        NULL,
     }, {
        "env_check", T_LIST|T_BOOL,
-       "Environment variables to check for sanity:",
+       N_("Environment variables to check for sanity:"),
        NULL,
     }, {
        "env_delete", T_LIST|T_BOOL,
-       "Environment variables to remove:",
+       N_("Environment variables to remove:"),
        NULL,
     }, {
        "env_keep", T_LIST|T_BOOL,
-       "Environment variables to preserve:",
+       N_("Environment variables to preserve:"),
        NULL,
     }, {
        "role", T_STR,
-       "SELinux role to use in the new security context: %s",
+       N_("SELinux role to use in the new security context: %s"),
        NULL,
     }, {
        "type", T_STR,
-       "SELinux type to use in the new security context: %s",
+       N_("SELinux type to use in the new security context: %s"),
        NULL,
     }, {
        "env_file", T_STR|T_PATH|T_BOOL,
-       "Path to the sudo-specific environment file: %s",
+       N_("Path to the sudo-specific environment file: %s"),
        NULL,
     }, {
        "sudoers_locale", T_STR,
-       "Locale to use while parsing sudoers: %s",
+       N_("Locale to use while parsing sudoers: %s"),
        NULL,
     }, {
        "visiblepw", T_FLAG,
-       "Allow sudo to prompt for a password even if it would be visisble",
+       N_("Allow sudo to prompt for a password even if it would be visisble"),
        NULL,
     }, {
        "pwfeedback", T_FLAG,
-       "Provide visual feedback at the password prompt when there is user input",
+       N_("Provide visual feedback at the password prompt when there is user input"),
        NULL,
     }, {
        "fast_glob", T_FLAG,
-       "Use faster globbing that is less accurate but does not access the filesystem",
+       N_("Use faster globbing that is less accurate but does not access the filesystem"),
        NULL,
     }, {
        "umask_override", T_FLAG,
-       "The umask specified in sudoers will override the user's, even if it is more permissive",
+       N_("The umask specified in sudoers will override the user's, even if it is more permissive"),
        NULL,
     }, {
        "log_input", T_FLAG,
-       "Log user's input for the command being run",
+       N_("Log user's input for the command being run"),
        NULL,
     }, {
        "log_output", T_FLAG,
-       "Log the output of the command being run",
+       N_("Log the output of the command being run"),
        NULL,
     }, {
        "compress_io", T_FLAG,
-       "Compress I/O logs using zlib",
+       N_("Compress I/O logs using zlib"),
        NULL,
     }, {
        "use_pty", T_FLAG,
-       "Always run commands in a pseudo-tty",
+       N_("Always run commands in a pseudo-tty"),
        NULL,
     }, {
        "group_plugin", T_STR,
-       "Plugin for non-Unix group support",
+       N_("Plugin for non-Unix group support"),
        NULL,
     }, {
        "iolog_dir", T_STR|T_PATH,
-       "Directory in which to store input/output logs",
+       N_("Directory in which to store input/output logs"),
        NULL,
     }, {
        "iolog_file", T_STR,
-       "File in which to store the input/output log",
+       N_("File in which to store the input/output log"),
        NULL,
     }, {
        "set_utmp", T_FLAG,
-       "Add an entry to the utmp/utmpx file when allocating a pty",
+       N_("Add an entry to the utmp/utmpx file when allocating a pty"),
        NULL,
     }, {
        "utmp_runas", T_FLAG,
-       "Set the user in utmp to the runas user, not the invoking user",
+       N_("Set the user in utmp to the runas user, not the invoking user"),
        NULL,
     }, {
        NULL, 0, NULL
index f9e9961e9aaccd26e11a2c88d7f3a982492eb381..e449b1c67d8604667ddc92f98c7d9565c5c816d7 100644 (file)
@@ -118,51 +118,52 @@ dump_defaults(void)
     struct sudo_defs_types *cur;
     struct list_member *item;
     struct def_values *def;
+    char *desc;
 
     for (cur = sudo_defs_table; cur->name; cur++) {
        if (cur->desc) {
+           desc = _(cur->desc);
            switch (cur->type & T_MASK) {
                case T_FLAG:
                    if (cur->sd_un.flag)
-                       sudo_printf(SUDO_CONV_INFO_MSG, "%s\n", cur->desc);
+                       sudo_printf(SUDO_CONV_INFO_MSG, "%s\n", desc);
                    break;
                case T_STR:
                    if (cur->sd_un.str) {
-                       sudo_printf(SUDO_CONV_INFO_MSG,
-                           cur->desc, cur->sd_un.str);
+                       sudo_printf(SUDO_CONV_INFO_MSG, desc, cur->sd_un.str);
                        sudo_printf(SUDO_CONV_INFO_MSG, "\n");
                    }
                    break;
                case T_LOGFAC:
                    if (cur->sd_un.ival) {
-                       sudo_printf(SUDO_CONV_INFO_MSG,
-                           cur->desc, logfac2str(cur->sd_un.ival));
+                       sudo_printf(SUDO_CONV_INFO_MSG, desc,
+                           logfac2str(cur->sd_un.ival));
                        sudo_printf(SUDO_CONV_INFO_MSG, "\n");
                    }
                    break;
                case T_LOGPRI:
                    if (cur->sd_un.ival) {
-                       sudo_printf(SUDO_CONV_INFO_MSG,
-                           cur->desc, logpri2str(cur->sd_un.ival));
+                       sudo_printf(SUDO_CONV_INFO_MSG, desc,
+                           logpri2str(cur->sd_un.ival));
                        sudo_printf(SUDO_CONV_INFO_MSG, "\n");
                    }
                    break;
                case T_UINT:
                case T_INT:
-                   sudo_printf(SUDO_CONV_INFO_MSG, cur->desc, cur->sd_un.ival);
+                   sudo_printf(SUDO_CONV_INFO_MSG, desc, cur->sd_un.ival);
                    sudo_printf(SUDO_CONV_INFO_MSG, "\n");
                    break;
                case T_FLOAT:
-                   sudo_printf(SUDO_CONV_INFO_MSG, cur->desc, cur->sd_un.fval);
+                   sudo_printf(SUDO_CONV_INFO_MSG, desc, cur->sd_un.fval);
                    sudo_printf(SUDO_CONV_INFO_MSG, "\n");
                    break;
                case T_MODE:
-                   sudo_printf(SUDO_CONV_INFO_MSG, cur->desc, cur->sd_un.mode);
+                   sudo_printf(SUDO_CONV_INFO_MSG, desc, cur->sd_un.mode);
                    sudo_printf(SUDO_CONV_INFO_MSG, "\n");
                    break;
                case T_LIST:
                    if (cur->sd_un.list) {
-                       sudo_printf(SUDO_CONV_INFO_MSG, "%s\n", cur->desc);
+                       sudo_printf(SUDO_CONV_INFO_MSG, "%s\n", desc);
                        for (item = cur->sd_un.list; item; item = item->next) {
                            sudo_printf(SUDO_CONV_INFO_MSG,
                                "\t%s\n", item->value);
@@ -172,8 +173,7 @@ dump_defaults(void)
                case T_TUPLE:
                    for (def = cur->values; def->sval; def++) {
                        if (cur->sd_un.ival == def->ival) {
-                           sudo_printf(SUDO_CONV_INFO_MSG,
-                               cur->desc, def->sval);
+                           sudo_printf(SUDO_CONV_INFO_MSG, desc, def->sval);
                            break;
                        }
                    }
@@ -191,25 +191,28 @@ void
 list_options(void)
 {
     struct sudo_defs_types *cur;
-    char *p;
+    char *p, *desc;
 
     sudo_printf(SUDO_CONV_INFO_MSG,
-       "Available options in a sudoers ``Defaults'' line:\n\n");
+       _("Available options in a sudoers ``Defaults'' line:\n\n"));
     for (cur = sudo_defs_table; cur->name; cur++) {
-       if (cur->name && cur->desc) {
+       if (cur->desc) {
+           desc = _(cur->desc);
            switch (cur->type & T_MASK) {
                case T_FLAG:
                    sudo_printf(SUDO_CONV_INFO_MSG,
-                       "%s: %s\n", cur->name, cur->desc);
+                       _("%s: %s\n"), cur->name, desc);
                    break;
                default:
-                   p = strrchr(cur->desc, ':');
+                   p = strrchr(desc, ':');
                    if (p) {
-                       sudo_printf(SUDO_CONV_INFO_MSG, "%s: %.*s\n",
-                           cur->name, (int) (p - cur->desc), cur->desc);
+                       while (p > desc && isspace((unsigned char)p[-1]))
+                           p--;
+                       sudo_printf(SUDO_CONV_INFO_MSG, _("%s: %.*s\n"),
+                           cur->name, (int) (p - desc), desc);
                    } else {
                        sudo_printf(SUDO_CONV_INFO_MSG,
-                           "%s: %s\n", cur->name, cur->desc);
+                           _("%s: %s\n"), cur->name, desc);
                    }
                    break;
            }
@@ -235,7 +238,7 @@ set_default(char *var, char *val, int op)
            break;
     }
     if (!cur->name) {
-       warningx("unknown defaults entry `%s'", var);
+       warningx(_("unknown defaults entry `%s'"), var);
        return FALSE;
     }
 
@@ -243,18 +246,20 @@ set_default(char *var, char *val, int op)
        case T_LOGFAC:
            if (!store_syslogfac(val, cur, op)) {
                if (val)
-                   warningx("value `%s' is invalid for option `%s'", val, var);
+                   warningx(_("value `%s' is invalid for option `%s'"),
+                       val, var);
                else
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                return FALSE;
            }
            break;
        case T_LOGPRI:
            if (!store_syslogpri(val, cur, op)) {
                if (val)
-                   warningx("value `%s' is invalid for option `%s'", val, var);
+                   warningx(_("value `%s' is invalid for option `%s'"),
+                       val, var);
                else
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                return FALSE;
            }
            break;
@@ -262,16 +267,16 @@ set_default(char *var, char *val, int op)
            if (!val) {
                /* Check for bogus boolean usage or lack of a value. */
                if (!ISSET(cur->type, T_BOOL) || op != FALSE) {
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                    return FALSE;
                }
            }
            if (ISSET(cur->type, T_PATH) && val && *val != '/') {
-               warningx("values for `%s' must start with a '/'", var);
+               warningx(_("values for `%s' must start with a '/'"), var);
                return FALSE;
            }
            if (!store_str(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
@@ -279,12 +284,12 @@ set_default(char *var, char *val, int op)
            if (!val) {
                /* Check for bogus boolean usage or lack of a value. */
                if (!ISSET(cur->type, T_BOOL) || op != FALSE) {
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                    return FALSE;
                }
            }
            if (!store_int(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
@@ -292,12 +297,12 @@ set_default(char *var, char *val, int op)
            if (!val) {
                /* Check for bogus boolean usage or lack of a value. */
                if (!ISSET(cur->type, T_BOOL) || op != FALSE) {
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                    return FALSE;
                }
            }
            if (!store_uint(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
@@ -305,12 +310,12 @@ set_default(char *var, char *val, int op)
            if (!val) {
                /* Check for bogus boolean usage or lack of a value. */
                if (!ISSET(cur->type, T_BOOL) || op != FALSE) {
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                    return FALSE;
                }
            }
            if (!store_float(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
@@ -318,18 +323,18 @@ set_default(char *var, char *val, int op)
            if (!val) {
                /* Check for bogus boolean usage or lack of a value. */
                if (!ISSET(cur->type, T_BOOL) || op != FALSE) {
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                    return FALSE;
                }
            }
            if (!store_mode(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
        case T_FLAG:
            if (val) {
-               warningx("option `%s' does not take a value", var);
+               warningx(_("option `%s' does not take a value"), var);
                return FALSE;
            }
            cur->sd_un.flag = op;
@@ -338,22 +343,22 @@ set_default(char *var, char *val, int op)
            if (!val) {
                /* Check for bogus boolean usage or lack of a value. */
                if (!ISSET(cur->type, T_BOOL) || op != FALSE) {
-                   warningx("no value specified for `%s'", var);
+                   warningx(_("no value specified for `%s'"), var);
                    return FALSE;
                }
            }
            if (!store_list(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
        case T_TUPLE:
            if (!val && !ISSET(cur->type, T_BOOL)) {
-               warningx("no value specified for `%s'", var);
+               warningx(_("no value specified for `%s'"), var);
                return FALSE;
            }
            if (!store_tuple(val, cur, op)) {
-               warningx("value `%s' is invalid for option `%s'", val, var);
+               warningx(_("value `%s' is invalid for option `%s'"), val, var);
                return FALSE;
            }
            break;
@@ -479,10 +484,10 @@ init_defaults(void)
 
     /* Now do the strings */
     def_mailto = estrdup(MAILTO);
-    def_mailsub = estrdup(MAILSUBJECT);
-    def_badpass_message = estrdup(INCORRECT_PASSWORD);
+    def_mailsub = estrdup(_(MAILSUBJECT));
+    def_badpass_message = estrdup(_(INCORRECT_PASSWORD));
     def_timestampdir = estrdup(_PATH_SUDO_TIMEDIR);
-    def_passprompt = estrdup(PASSPROMPT);
+    def_passprompt = estrdup(_(PASSPROMPT));
     def_runas_default = estrdup(RUNAS_DEFAULT);
 #ifdef _PATH_SUDO_SENDMAIL
     def_mailerpath = estrdup(_PATH_SUDO_SENDMAIL);
index 13291240ce3d82d94aa5dff46cd5547021f21662..711a7ad4aab6d7b001b31f146bfb79194894fb85 100644 (file)
@@ -48,7 +48,7 @@ struct sudo_defs_types {
     int type;
     char *desc;
     struct def_values *values;
-    int (*callback)(char *);
+    int (*callback)(const char *);
     union {
        int flag;
        int ival;
index 9d1201fcf32755d4ef38db531b94e6e88c04c7ca..6d6571899e924058a97bd91310e9db8dec35a8c5 100644 (file)
@@ -256,7 +256,7 @@ sudo_setenv(const char *var, const char *val, int dupcheck)
        strlcat(estring, "=", esize) >= esize ||
        strlcat(estring, val, esize) >= esize) {
 
-       errorx(1, "internal error, sudo_setenv() overflow");
+       errorx(1, _("internal error, sudo_setenv() overflow"));
     }
     sudo_putenv(estring, dupcheck, TRUE);
 }
@@ -286,7 +286,7 @@ sudo_putenv(char *str, int dupcheck, int overwrite)
 
 #ifdef ENV_DEBUG
     if (env.envp[env.env_len] != NULL)
-       errorx(1, "sudo_putenv: corrupted envp, len mismatch");
+       errorx(1, _("sudo_putenv: corrupted envp, length mismatch"));
 #endif
 
     if (dupcheck) {
@@ -390,6 +390,10 @@ matches_env_keep(const char *var)
     size_t len;
     int iswild, keepit = FALSE;
 
+    /* Preserve SHELL variable for "sudo -s". */
+    if (ISSET(sudo_mode, MODE_SHELL) && strncmp(var, "SHELL=", 6) == 0)
+       return TRUE;
+
     for (cur = def_env_keep; cur; cur = cur->next) {
        len = strlen(cur->value);
        /* Deal with '*' wildcard */
@@ -691,7 +695,7 @@ validate_env_vars(char * const env_vars[])
     if (bad != NULL) {
        bad[blen - 2] = '\0';           /* remove trailing ", " */
        log_error(NO_MAIL,
-           "sorry, you are not allowed to set the following environment variables: %s", bad);
+           _("sorry, you are not allowed to set the following environment variables: %s"), bad);
        /* NOTREACHED */
        efree(bad);
     }
index 2566733638e1182e554cda8eac5d96b697bcb262..4064248e3d181e06ae927e2c1b731e3737e49828 100644 (file)
@@ -42,6 +42,7 @@
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif /* HAVE_UNISTD_H */
+#include <errno.h>
 
 #include "sudoers.h"
 
@@ -64,7 +65,7 @@ find_path(char *infile, char **outfile, struct stat *sbp, char *path,
     int len;                   /* length parameter */
 
     if (strlen(infile) >= PATH_MAX)
-       errorx(1, "%s: File name too long", infile);
+       errorx(1, _("%s: %s"), infile, strerror(ENAMETOOLONG));
 
     /*
      * If we were given a fully qualified or relative path
@@ -103,7 +104,7 @@ find_path(char *infile, char **outfile, struct stat *sbp, char *path,
         */
        len = snprintf(command, sizeof(command), "%s/%s", path, infile);
        if (len <= 0 || len >= sizeof(command))
-           errorx(1, "%s: File name too long", infile);
+           errorx(1, _("%s: %s"), infile, strerror(ENAMETOOLONG));
        if ((result = sudo_goodpath(command, sbp)))
            break;
 
@@ -118,7 +119,7 @@ find_path(char *infile, char **outfile, struct stat *sbp, char *path,
     if (!result && checkdot) {
        len = snprintf(command, sizeof(command), "./%s", infile);
        if (len <= 0 || len >= sizeof(command))
-           errorx(1, "%s: File name too long", infile);
+           errorx(1, _("%s: %s"), infile, strerror(ENAMETOOLONG));
        result = sudo_goodpath(command, sbp);
        if (result && ignore_dot)
            return NOT_FOUND_DOT;
index cb6aac5174da2bad5da8aab0c28b2a129e9499eb..f12d3940ee8e958f1ec9ae2911ed398441e5ce8e 100644 (file)
@@ -112,7 +112,7 @@ static time_t       yyRelSeconds;
 
 static int     yyerror(char *s);
 static int     yylex(void);
-static int     yyparse(void);
+       int     yyparse(void);
 
 #line 107 "getdate.y"
 #ifndef YYSTYPE_DEFINED
index 13483ff31ff1459ad1a876991b27f3c22ea6a3e4..5ebe29ecac35fef65b14992b6fb0ca1350bbd009 100644 (file)
@@ -100,7 +100,7 @@ static time_t       yyRelSeconds;
 
 static int     yyerror(char *s);
 static int     yylex(void);
-static int     yyparse(void);
+       int     yyparse(void);
 
 %}
 
index d95b834ed268644164994c7cfce57e76de72c8db..51cf5882dda0c98815eb02f92d080cdd8e50d872 100644 (file)
@@ -112,7 +112,7 @@ yyerror(const char *s)
     if (trace_print != NULL) {
        LEXTRACE("<*> ");
     } else if (verbose && s != NULL) {
-       warningx(">>> %s: %s near line %d <<<", sudoers, s,
+       warningx(_(">>> %s: %s near line %d <<<"), sudoers, s,
            sudolineno ? sudolineno - 1 : 0);
     }
     parse_error = TRUE;
index b1eed89954249c4535a123ee951b9b01f030eece..0ec084e6b9c3266c92536f9db1db1702122882ac 100644 (file)
@@ -100,7 +100,7 @@ yyerror(const char *s)
     if (trace_print != NULL) {
        LEXTRACE("<*> ");
     } else if (verbose && s != NULL) {
-       warningx(">>> %s: %s near line %d <<<", sudoers, s,
+       warningx(_(">>> %s: %s near line %d <<<"), sudoers, s,
            sudolineno ? sudolineno - 1 : 0);
     }
     parse_error = TRUE;
index bd5203af98dfc9ea0574f9941aa77cbdbb5658bb..a60a87dc7e848f9b6cef2c89954c6e7912c13b4f 100644 (file)
@@ -54,8 +54,8 @@
 
 #include "sudoers.h"
 
-#ifndef RTLD_LOCAL
-# define RTLD_LOCAL    0
+#ifndef RTLD_GLOBAL
+# define RTLD_GLOBAL   0
 #endif
 
 static void *group_handle;
@@ -77,7 +77,6 @@ group_plugin_load(char *plugin_info)
     /*
      * Fill in .so path and split out args (if any).
      */
-    args = strpbrk(plugin_info, " \t");
     if ((args = strpbrk(plugin_info, " \t")) != NULL) {
        len = snprintf(path, sizeof(path), "%s%.*s",
            (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "",
@@ -88,7 +87,7 @@ group_plugin_load(char *plugin_info)
            (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info);
     }
     if (len <= 0 || len >= sizeof(path)) {
-       warningx("%s%s: %s",
+       warningx(_("%s%s: %s"),
            (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info,
            strerror(ENAMETOOLONG));
        goto done;
@@ -100,28 +99,28 @@ group_plugin_load(char *plugin_info)
        goto done;
     }
     if (sb.st_uid != ROOT_UID) {
-       warningx("%s must be owned by uid %d", path, ROOT_UID);
+       warningx(_("%s must be owned by uid %d"), path, ROOT_UID);
        goto done;
     }
     if ((sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
-       warningx("%s must be only be writable by owner", path);
+       warningx(_("%s must only be writable by owner"), path);
        goto done;
     }
 
     /* Open plugin and map in symbol. */
-    group_handle = dlopen(path, RTLD_LAZY|RTLD_LOCAL);
+    group_handle = dlopen(path, RTLD_LAZY|RTLD_GLOBAL);
     if (!group_handle) {
-       warningx("unable to dlopen %s: %s", path, dlerror());
+       warningx(_("unable to dlopen %s: %s"), path, dlerror());
        goto done;
     }
     group_plugin = dlsym(group_handle, "group_plugin");
     if (group_plugin == NULL) {
-       warningx("unable to find symbol \"group_plugin\" in %s", path);
+       warningx(_("unable to find symbol \"group_plugin\" in %s"), path);
        goto done;
     }
 
     if (GROUP_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) {
-       warningx("%s: incompatible group plugin major version %d, expected %d",
+       warningx(_("%s: incompatible group plugin major version %d, expected %d"),
            path, GROUP_API_VERSION_GET_MAJOR(group_plugin->version),
            GROUP_API_VERSION_MAJOR);
        goto done;
index acf056829f3dd302a83207b1f44fa961cc875faa..10963589ac827bd18ce9dd4a0b744b6737d0f34f 100644 (file)
@@ -106,7 +106,7 @@ dump_interfaces(const char *ai)
 
     addrinfo = estrdup(ai);
 
-    sudo_printf(SUDO_CONV_INFO_MSG, "Local IP address and netmask pairs:\n");
+    sudo_printf(SUDO_CONV_INFO_MSG, _("Local IP address and netmask pairs:\n"));
     for (cp = strtok(addrinfo, " \t"); cp != NULL; cp = strtok(NULL, " \t"))
        sudo_printf(SUDO_CONV_INFO_MSG, "\t%s\n", cp);
 
index 903aedf49755a58448af263bdd45f1b16c905e47..00fd7ea80dccfe071c882bbbe2ade4b13d50f873 100644 (file)
@@ -119,9 +119,9 @@ mkdir_parents(char *path)
        *slash = '\0';
        if (stat(path, &sb) != 0) {
            if (mkdir(path, S_IRWXU) != 0)
-               log_error(USE_ERRNO, "Can't mkdir %s", path);
+               log_error(USE_ERRNO, _("unable to mkdir %s"), path);
        } else if (!S_ISDIR(sb.st_mode)) {
-           log_error(0, "%s: %s", path, strerror(ENOTDIR));
+           log_error(0, _("%s: %s"), path, strerror(ENOTDIR));
        }
        *slash = '/';
     }
@@ -150,9 +150,9 @@ io_nextid(char *iolog_dir, char sessid[7])
     mkdir_parents(iolog_dir);
     if (stat(iolog_dir, &sb) != 0) {
        if (mkdir(iolog_dir, S_IRWXU) != 0)
-           log_error(USE_ERRNO, "Can't mkdir %s", iolog_dir);
+           log_error(USE_ERRNO, _("unable to mkdir %s"), iolog_dir);
     } else if (!S_ISDIR(sb.st_mode)) {
-       log_error(0, "%s exists but is not a directory (0%o)",
+       log_error(0, _("%s exists but is not a directory (0%o)"),
            iolog_dir, (unsigned int) sb.st_mode);
     }
 
@@ -166,17 +166,17 @@ io_nextid(char *iolog_dir, char sessid[7])
     }
     fd = open(pathbuf, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
     if (fd == -1)
-       log_error(USE_ERRNO, "cannot open %s", pathbuf);
+       log_error(USE_ERRNO, _("unable to open %s"), pathbuf);
     lock_file(fd, SUDO_LOCK);
 
     /* Read seq number (base 36). */
     nread = read(fd, buf, sizeof(buf));
     if (nread != 0) {
        if (nread == -1)
-           log_error(USE_ERRNO, "cannot read %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to read %s"), pathbuf);
        id = strtoul(buf, &ep, 36);
        if (buf == ep || id >= SESSID_MAX)
-           log_error(0, "invalid sequence number %s", pathbuf);
+           log_error(0, _("invalid sequence number %s"), pathbuf);
     }
     id++;
 
@@ -196,7 +196,7 @@ io_nextid(char *iolog_dir, char sessid[7])
 
     /* Rewind and overwrite old seq file. */
     if (lseek(fd, 0, SEEK_SET) == (off_t)-1 || write(fd, buf, 7) != 7)
-       log_error(USE_ERRNO, "Can't write to %s", pathbuf);
+       log_error(USE_ERRNO, _("unable to write to %s"), pathbuf);
     close(fd);
 }
 
@@ -222,10 +222,10 @@ mkdir_iopath(const char *iolog_path, char *pathbuf, size_t pathsize)
     mkdir_parents(pathbuf);
     if (len >= 6 && strcmp(&pathbuf[len - 6], "XXXXXX") == 0) {
        if (mkdtemp(pathbuf) == NULL)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     } else {
        if (mkdir(pathbuf, S_IRWXU) != 0)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     }
 
     return len;
@@ -433,6 +433,8 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
        goto done;
     }
 
+    bindtextdomain("sudoers", LOCALEDIR);
+
     sudo_setpwent();
     sudo_setgrent();
 
@@ -473,18 +475,18 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
      */
     io_logfile = open_io_fd(pathbuf, len, "/log", FALSE);
     if (io_logfile == NULL)
-       log_error(USE_ERRNO, "Can't create %s", pathbuf);
+       log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
 
     io_fds[IOFD_TIMING].v = open_io_fd(pathbuf, len, "/timing",
        iolog_compress);
     if (io_fds[IOFD_TIMING].v == NULL)
-       log_error(USE_ERRNO, "Can't create %s", pathbuf);
+       log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
 
     if (details.iolog_ttyin) {
        io_fds[IOFD_TTYIN].v = open_io_fd(pathbuf, len, "/ttyin",
            iolog_compress);
        if (io_fds[IOFD_TTYIN].v == NULL)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     } else {
        sudoers_io.log_ttyin = NULL;
     }
@@ -492,7 +494,7 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
        io_fds[IOFD_STDIN].v = open_io_fd(pathbuf, len, "/stdin",
            iolog_compress);
        if (io_fds[IOFD_STDIN].v == NULL)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     } else {
        sudoers_io.log_stdin = NULL;
     }
@@ -500,7 +502,7 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
        io_fds[IOFD_TTYOUT].v = open_io_fd(pathbuf, len, "/ttyout",
            iolog_compress);
        if (io_fds[IOFD_TTYOUT].v == NULL)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     } else {
        sudoers_io.log_ttyout = NULL;
     }
@@ -508,7 +510,7 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
        io_fds[IOFD_STDOUT].v = open_io_fd(pathbuf, len, "/stdout",
            iolog_compress);
        if (io_fds[IOFD_STDOUT].v == NULL)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     } else {
        sudoers_io.log_stdout = NULL;
     }
@@ -516,7 +518,7 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
        io_fds[IOFD_STDERR].v = open_io_fd(pathbuf, len, "/stderr",
            iolog_compress);
        if (io_fds[IOFD_STDERR].v == NULL)
-           log_error(USE_ERRNO, "Can't create %s", pathbuf);
+           log_error(USE_ERRNO, _("unable to create %s"), pathbuf);
     } else {
        sudoers_io.log_stderr = NULL;
     }
@@ -531,8 +533,7 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
     fputc('\n', io_logfile);
     fputs(details.command ? details.command : "unknown", io_logfile);
     for (cur = &argv[1]; *cur != NULL; cur++) {
-       if (cur != &argv[1])
-           fputc(' ', io_logfile);
+       fputc(' ', io_logfile);
        fputs(*cur, io_logfile);
     }
     fputc('\n', io_logfile);
index 74f5fdff175cd619a190262c06973d8a848e8b34..7a4ee7e4f062ebdc3f2ffeedf808afb63b5d8318 100644 (file)
@@ -242,7 +242,7 @@ expand_iolog_path(const char *prefix, const char *dir, const char *file,
 
 #ifdef HAVE_SETLOCALE
        if (!setlocale(LC_ALL, def_sudoers_locale)) {
-           warningx("unable to set locale to \"%s\", using \"C\"",
+           warningx(_("unable to set locale to \"%s\", using \"C\""),
                def_sudoers_locale);
            setlocale(LC_ALL, "C");
        }
index 8d64c354aad2160760f020555dea96cd4b62cf2b..a788543ac07144df201a7974a40a054d7a3f1615 100644 (file)
@@ -328,7 +328,7 @@ struct sudo_ldap_handle {
     LDAP *ld;
     struct ldap_result *result;
     char *username;
-    GETGROUPS_T *groups;
+    struct group_list *grlist;
 };
 
 struct sudo_nss sudo_nss_ldap = {
@@ -360,7 +360,7 @@ sudo_ldap_conf_add_ports(void)
 
     hostbuf[0] = '\0';
     if (snprintf(defport, sizeof(defport), ":%d", ldap_conf.port) >= sizeof(defport))
-       errorx(1, "sudo_ldap_conf_add_ports: port too large");
+       errorx(1, _("sudo_ldap_conf_add_ports: port too large"));
 
     for ((host = strtok(ldap_conf.host, " \t")); host; (host = strtok(NULL, " \t"))) {
        if (hostbuf[0] != '\0') {
@@ -383,7 +383,7 @@ sudo_ldap_conf_add_ports(void)
     return;
 
 toobig:
-    errorx(1, "sudo_ldap_conf_add_ports: out of space expanding hostbuf");
+    errorx(1, _("sudo_ldap_conf_add_ports: out of space expanding hostbuf"));
 }
 #endif
 
@@ -412,7 +412,7 @@ sudo_ldap_parse_uri(const struct ldap_config_list_str *uri_list)
                nldaps++;
                host = uri + 8;
            } else {
-               warningx("unsupported LDAP uri type: %s", uri);
+               warningx(_("unsupported LDAP uri type: %s"), uri);
                goto done;
            }
 
@@ -441,17 +441,17 @@ sudo_ldap_parse_uri(const struct ldap_config_list_str *uri_list)
            }
        }
        if (hostbuf[0] == '\0') {
-           warningx("invalid uri: %s", uri_list);
+           warningx(_("invalid uri: %s"), uri_list);
            goto done;
        }
 
        if (nldaps != 0) {
            if (nldap != 0) {
-               warningx("cannot mix ldap and ldaps URIs");
+               warningx(_("unable to mix ldap and ldaps URIs"));
                goto done;
            }
            if (ldap_conf.ssl_mode == SUDO_LDAP_STARTTLS) {
-               warningx("cannot mix ldaps and starttls");
+               warningx(_("unable to mix ldaps and starttls"));
                goto done;
            }
            ldap_conf.ssl_mode = SUDO_LDAP_SSL;
@@ -470,7 +470,7 @@ done:
     return rc;
 
 toobig:
-    errorx(1, "sudo_ldap_parse_uri: out of space building hostbuf");
+    errorx(1, _("sudo_ldap_parse_uri: out of space building hostbuf"));
 }
 #else
 static char *
@@ -533,7 +533,7 @@ sudo_ldap_init(LDAP **ldp, const char *host, int port)
            rc = ldapssl_clientauth_init(ldap_conf.tls_certfile, NULL,
                ldap_conf.tls_keyfile != NULL, ldap_conf.tls_keyfile, NULL);
            if (rc != LDAP_SUCCESS) {
-               warningx("unable to initialize SSL cert and key db: %s",
+               warningx(_("unable to initialize SSL cert and key db: %s"),
                    ldapssl_err2string(rc));
                goto done;
            }
@@ -929,13 +929,13 @@ sudo_ldap_timefilter(char *buffer, size_t buffersize)
     /* Make sure we have a formatted timestamp for __now__. */
     time(&now);
     if ((tp = gmtime(&now)) == NULL) {
-       warning("unable to get GMT");
+       warning(_("unable to get GMT time"));
        goto done;
     }
 
     /* Format the timestamp according to the RFC. */
-    if (strftime(timebuffer, sizeof(timebuffer), "%Y%m%d%H%MZ", tp) == 0) {
-       warning("unable to format timestamp");
+    if (strftime(timebuffer, sizeof(timebuffer), "%Y%m%d%H%M%SZ", tp) == 0) {
+       warning(_("unable to format timestamp"));
        goto done;
     }
 
@@ -943,7 +943,7 @@ sudo_ldap_timefilter(char *buffer, size_t buffersize)
     bytes = snprintf(buffer, buffersize, "(&(|(!(sudoNotAfter=*))(sudoNotAfter>=%s))(|(!(sudoNotBefore=*))(sudoNotBefore<=%s)))",
        timebuffer, timebuffer);
     if (bytes < 0 || bytes >= buffersize) {
-       warning("unable to build time filter");
+       warning(_("unable to build time filter"));
        bytes = 0;
     }
 
@@ -974,6 +974,7 @@ sudo_ldap_build_pass1(struct passwd *pw)
 {
     struct group *grp;
     char *buf, timebuffer[TIMEFILTER_LENGTH];
+    struct group_list *grlist;
     size_t sz = 0;
     int i;
 
@@ -984,17 +985,15 @@ sudo_ldap_build_pass1(struct passwd *pw)
     /* Then add (|(sudoUser=USERNAME)(sudoUser=ALL)) + NUL */
     sz += 29 + strlen(pw->pw_name);
 
-    /* Add space for groups */
+    /* Add space for primary and supplementary groups */
     if ((grp = sudo_getgrgid(pw->pw_gid)) != NULL) {
-       sz += 12 + strlen(grp->gr_name);        /* primary group */
-       gr_delref(grp);
+       sz += 12 + strlen(grp->gr_name);
     }
-    for (i = 0; i < user_ngroups; i++) {
-       if (user_groups[i] == pw->pw_gid)
-           continue;
-       if ((grp = sudo_getgrgid(user_groups[i])) != NULL) {
-           sz += 12 + strlen(grp->gr_name);    /* supplementary group */
-           gr_delref(grp);
+    if ((grlist = get_group_list(pw)) != NULL) {
+       for (i = 0; i < grlist->ngroups; i++) {
+           if (grp != NULL && strcasecmp(grlist->groups[i], grp->gr_name) == 0)
+               continue;
+           sz += 12 + strlen(grlist->groups[i]);
        }
     }
 
@@ -1020,28 +1019,32 @@ sudo_ldap_build_pass1(struct passwd *pw)
     (void) strlcat(buf, ")", sz);
 
     /* Append primary group */
-    if ((grp = sudo_getgrgid(pw->pw_gid)) != NULL) {
+    if (grp != NULL) {
        (void) strlcat(buf, "(sudoUser=%", sz);
        (void) strlcat(buf, grp->gr_name, sz);
        (void) strlcat(buf, ")", sz);
-       gr_delref(grp);
     }
 
     /* Append supplementary groups */
-    for (i = 0; i < user_ngroups; i++) {
-       if (user_groups[i] == pw->pw_gid)
-           continue;
-       if ((grp = sudo_getgrgid(user_groups[i])) != NULL) {
+    if (grlist != NULL) {
+       for (i = 0; i < grlist->ngroups; i++) {
+           if (grp != NULL && strcasecmp(grlist->groups[i], grp->gr_name) == 0)
+               continue;
            (void) strlcat(buf, "(sudoUser=%", sz);
-           (void) strlcat(buf, grp->gr_name, sz);
+           (void) strlcat(buf, grlist->groups[i], sz);
            (void) strlcat(buf, ")", sz);
-           gr_delref(grp);
        }
     }
 
+    /* Done with groups. */
+    if (grlist != NULL)
+       grlist_delref(grlist);
+    if (grp != NULL)
+       gr_delref(grp);
+
     /* Add ALL to list and end the global OR */
     if (strlcat(buf, "(sudoUser=ALL)", sz) >= sz)
-       errorx(1, "sudo_ldap_build_pass1 allocation mismatch");
+       errorx(1, _("sudo_ldap_build_pass1 allocation mismatch"));
 
     /* Add the time restriction, or simply end the global OR. */
     if (ldap_conf.timed) {
@@ -1430,7 +1433,7 @@ sudo_ldap_display_defaults(struct sudo_nss *nss, struct passwd *pw,
                else
                    prefix = ", ";
                for (p = bv; *p != NULL; p++) {
-                   lbuf_append(lbuf, prefix, (*p)->bv_val, NULL);
+                   lbuf_append(lbuf, "%s%s", prefix, (*p)->bv_val);
                    prefix = ", ";
                    count++;
                }
@@ -1464,7 +1467,7 @@ sudo_ldap_display_entry_short(LDAP *ld, LDAPMessage *entry, struct lbuf *lbuf)
     struct berval **bv, **p;
     int count = 0;
 
-    lbuf_append(lbuf, "    (", NULL);
+    lbuf_append(lbuf, "    (");
 
     /* get the RunAsUser Values from the entry */
     bv = ldap_get_values_len(ld, entry, "sudoRunAsUser");
@@ -1472,48 +1475,39 @@ sudo_ldap_display_entry_short(LDAP *ld, LDAPMessage *entry, struct lbuf *lbuf)
        bv = ldap_get_values_len(ld, entry, "sudoRunAs");
     if (bv != NULL) {
        for (p = bv; *p != NULL; p++) {
-           if (p != bv)
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, (*p)->bv_val, NULL);
+           lbuf_append(lbuf, "%s%s", p != bv ? ", " : "", (*p)->bv_val);
        }
        ldap_value_free_len(bv);
     } else
-       lbuf_append(lbuf, def_runas_default, NULL);
+       lbuf_append(lbuf, "%s", def_runas_default);
 
     /* get the RunAsGroup Values from the entry */
     bv = ldap_get_values_len(ld, entry, "sudoRunAsGroup");
     if (bv != NULL) {
-       lbuf_append(lbuf, " : ", NULL);
+       lbuf_append(lbuf, " : ");
        for (p = bv; *p != NULL; p++) {
-           if (p != bv)
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, (*p)->bv_val, NULL);
+           lbuf_append(lbuf, "%s%s", p != bv ? ", " : "", (*p)->bv_val);
        }
        ldap_value_free_len(bv);
     }
-    lbuf_append(lbuf, ") ", NULL);
+    lbuf_append(lbuf, ") ");
 
     /* get the Option Values from the entry */
     bv = ldap_get_values_len(ld, entry, "sudoOption");
     if (bv != NULL) {
-       char *cp, *tag;
-
        for (p = bv; *p != NULL; p++) {
-           cp = (*p)->bv_val;
+           char *cp = (*p)->bv_val;
            if (*cp == '!')
                cp++;
-           tag = NULL;
            if (strcmp(cp, "authenticate") == 0)
-               tag = (*p)->bv_val[0] == '!' ?
-                   "NOPASSWD: " : "PASSWD: ";
+               lbuf_append(lbuf, (*p)->bv_val[0] == '!' ?
+                   "NOPASSWD: " : "PASSWD: ");
            else if (strcmp(cp, "noexec") == 0)
-               tag = (*p)->bv_val[0] == '!' ?
-                   "EXEC: " : "NOEXEC: ";
+               lbuf_append(lbuf, (*p)->bv_val[0] == '!' ?
+                   "EXEC: " : "NOEXEC: ");
            else if (strcmp(cp, "setenv") == 0)
-               tag = (*p)->bv_val[0] == '!' ?
-                   "NOSETENV: " : "SETENV: ";
-           if (tag != NULL)
-               lbuf_append(lbuf, tag, NULL);
+               lbuf_append(lbuf, (*p)->bv_val[0] == '!' ?
+                   "NOSETENV: " : "SETENV: ");
        }
        ldap_value_free_len(bv);
     }
@@ -1522,14 +1516,12 @@ sudo_ldap_display_entry_short(LDAP *ld, LDAPMessage *entry, struct lbuf *lbuf)
     bv = ldap_get_values_len(ld, entry, "sudoCommand");
     if (bv != NULL) {
        for (p = bv; *p != NULL; p++) {
-           if (p != bv)
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, (*p)->bv_val, NULL);
+           lbuf_append(lbuf, "%s%s", p != bv ? ", " : "", (*p)->bv_val);
            count++;
        }
        ldap_value_free_len(bv);
     }
-    lbuf_append(lbuf, "\n", NULL);
+    lbuf_append(lbuf, "\n");
 
     return count;
 }
@@ -1546,50 +1538,47 @@ sudo_ldap_display_entry_long(LDAP *ld, LDAPMessage *entry, struct lbuf *lbuf)
 
     /* extract the dn, only show the first rdn */
     rdn = sudo_ldap_get_first_rdn(ld, entry);
-    lbuf_append(lbuf, "\nLDAP Role: ", rdn ? rdn : "UNKNOWN", "\n", NULL);
+    if (rdn != NULL)
+       lbuf_append(lbuf, _("\nLDAP Role: %s\n"), rdn);
+    else
+       lbuf_append(lbuf, _("\nLDAP Role: UNKNOWN\n"));
     if (rdn)
        ldap_memfree(rdn);
 
     /* get the RunAsUser Values from the entry */
-    lbuf_append(lbuf, "    RunAsUsers: ", NULL);
+    lbuf_append(lbuf, "    RunAsUsers: ");
     bv = ldap_get_values_len(ld, entry, "sudoRunAsUser");
     if (bv == NULL)
        bv = ldap_get_values_len(ld, entry, "sudoRunAs");
     if (bv != NULL) {
        for (p = bv; *p != NULL; p++) {
-           if (p != bv)
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, (*p)->bv_val, NULL);
+           lbuf_append(lbuf, "%s%s", p != bv ? ", " : "", (*p)->bv_val);
        }
        ldap_value_free_len(bv);
     } else
-       lbuf_append(lbuf, def_runas_default, NULL);
-    lbuf_append(lbuf, "\n", NULL);
+       lbuf_append(lbuf, "%s", def_runas_default);
+    lbuf_append(lbuf, "\n");
 
     /* get the RunAsGroup Values from the entry */
     bv = ldap_get_values_len(ld, entry, "sudoRunAsGroup");
     if (bv != NULL) {
-       lbuf_append(lbuf, "    RunAsGroups: ", NULL);
+       lbuf_append(lbuf, "    RunAsGroups: ");
        for (p = bv; *p != NULL; p++) {
-           if (p != bv)
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, (*p)->bv_val, NULL);
+           lbuf_append(lbuf, "%s%s", p != bv ? ", " : "", (*p)->bv_val);
        }
        ldap_value_free_len(bv);
-       lbuf_append(lbuf, "\n", NULL);
+       lbuf_append(lbuf, "\n");
     }
 
     /* get the Option Values from the entry */
     bv = ldap_get_values_len(ld, entry, "sudoOption");
     if (bv != NULL) {
-       lbuf_append(lbuf, "    Options: ", NULL);
+       lbuf_append(lbuf, "    Options: ");
        for (p = bv; *p != NULL; p++) {
-           if (p != bv)
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, (*p)->bv_val, NULL);
+           lbuf_append(lbuf, "%s%s", p != bv ? ", " : "", (*p)->bv_val);
        }
        ldap_value_free_len(bv);
-       lbuf_append(lbuf, "\n", NULL);
+       lbuf_append(lbuf, "\n");
     }
 
     /*
@@ -1599,7 +1588,7 @@ sudo_ldap_display_entry_long(LDAP *ld, LDAPMessage *entry, struct lbuf *lbuf)
     bv = ldap_get_values_len(ld, entry, "sudoOrder");
     if (bv != NULL) {
        if (*bv != NULL) {
-           lbuf_append(lbuf, "    Order: ", (*bv)->bv_val, "\n", NULL);
+           lbuf_append(lbuf, _("    Order: %s\n"), (*bv)->bv_val);
        }
        ldap_value_free_len(bv);
     }
@@ -1607,9 +1596,9 @@ sudo_ldap_display_entry_long(LDAP *ld, LDAPMessage *entry, struct lbuf *lbuf)
     /* Get the command values from the entry. */
     bv = ldap_get_values_len(ld, entry, "sudoCommand");
     if (bv != NULL) {
-       lbuf_append(lbuf, "    Commands:\n", NULL);
+       lbuf_append(lbuf, _("    Commands:\n"));
        for (p = bv; *p != NULL; p++) {
-           lbuf_append(lbuf, "\t", (*p)->bv_val, "\n", NULL);
+           lbuf_append(lbuf, "\t%s\n", (*p)->bv_val);
            count++;
        }
        ldap_value_free_len(bv);
@@ -1928,7 +1917,8 @@ sudo_ldap_bind_s(LDAP *ld)
 # endif
        }
        if (rc != LDAP_SUCCESS) {
-           warningx("ldap_sasl_interactive_bind_s(): %s", ldap_err2string(rc));
+           warningx("ldap_sasl_interactive_bind_s(): %s",
+               ldap_err2string(rc));
            return -1;
        }
        DPRINTF(("ldap_sasl_interactive_bind_s() ok"), 1);
@@ -1993,7 +1983,7 @@ sudo_ldap_open(struct sudo_nss *nss)
 #endif
        rc = sudo_ldap_init(&ld, ldap_conf.host, ldap_conf.port);
     if (rc != LDAP_SUCCESS) {
-       warningx("unable to initialize LDAP: %s", ldap_err2string(rc));
+       warningx(_("unable to initialize LDAP: %s"), ldap_err2string(rc));
        return -1;
     }
 
@@ -2024,7 +2014,7 @@ sudo_ldap_open(struct sudo_nss *nss)
        }
        DPRINTF(("ldap_start_tls_s_np() ok"), 1);
 #else
-       warningx("start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()");
+       warningx(_("start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"));
 #endif /* !HAVE_LDAP_START_TLS_S && !HAVE_LDAP_START_TLS_S_NP */
     }
 
@@ -2037,7 +2027,7 @@ sudo_ldap_open(struct sudo_nss *nss)
     handle->ld = ld;
     handle->result = NULL;
     handle->username = NULL;
-    handle->groups = NULL;
+    handle->grlist = NULL;
     nss->handle = handle;
 
     return 0;
@@ -2069,7 +2059,7 @@ sudo_ldap_setdefs(struct sudo_nss *nss)
        }
        result = NULL;
        rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE,
-           filt, NULL, 0, NULL, NULL, NULL, 0, &result);
+           filt, NULL, 0, NULL, NULL, tvp, 0, &result);
        if (rc == LDAP_SUCCESS && (entry = ldap_first_entry(ld, result))) {
            DPRINTF(("found:%s", ldap_get_dn(ld, entry)), 1);
            sudo_ldap_parse_options(ld, entry);
@@ -2093,7 +2083,7 @@ sudo_ldap_lookup(struct sudo_nss *nss, int ret, int pwflag)
     struct sudo_ldap_handle *handle = nss->handle;
     LDAP *ld;
     LDAPMessage *entry;
-    int i, rc, setenv_implied, matched = UNSPEC;
+    int i, rc, setenv_implied;
     struct ldap_result *lres = NULL;
 
     if (handle == NULL || handle->ld == NULL)
@@ -2108,11 +2098,12 @@ sudo_ldap_lookup(struct sudo_nss *nss, int ret, int pwflag)
      * password is required, so the order of the entries doesn't matter.
      */
     if (pwflag) {
-       DPRINTF(("perform search for pwflag %d", pwflag), 1);
        int doauth = UNSPEC;
+       int matched = UNSPEC;
        enum def_tuple pwcheck = 
            (pwflag == -1) ? never : sudo_defs_table[pwflag].sd_un.tuple;
 
+       DPRINTF(("perform search for pwflag %d", pwflag), 1);
        for (i = 0; i < lres->nentries; i++) {
            entry = lres->entries[i].entry;
            if ((pwcheck == any && doauth != FALSE) ||
@@ -2162,7 +2153,6 @@ sudo_ldap_lookup(struct sudo_nss *nss, int ret, int pwflag)
        if (rc != UNSPEC) {
            /* We have a match. */
            DPRINTF(("Command %sallowed", rc == TRUE ? "" : "NOT "), 1);
-           matched = TRUE;
            if (rc == TRUE) {
                DPRINTF(("LDAP entry: %p", entry), 1);
                /* Apply entry-specific options. */
@@ -2255,7 +2245,7 @@ sudo_ldap_result_add_entry(struct ldap_result *lres, LDAPMessage *entry)
            DPRINTF(("order attribute raw: %s", (*bv)->bv_val), 1);
            order = strtod((*bv)->bv_val, &ep);
            if (ep == (*bv)->bv_val || *ep != '\0') {
-               warningx("invalid sudoOrder attribute: %s", (*bv)->bv_val);
+               warningx(_("invalid sudoOrder attribute: %s"), (*bv)->bv_val);
                order = 0.0;
            }
            DPRINTF(("order attribute: %f", order), 1);
@@ -2295,7 +2285,7 @@ sudo_ldap_result_free_nss(struct sudo_nss *nss)
            efree(handle->username);
            handle->username = NULL;
        }
-       handle->groups = NULL;
+       handle->grlist = NULL;
        handle->result = NULL;
     }
 }
@@ -2321,7 +2311,7 @@ sudo_ldap_result_get(struct sudo_nss *nss, struct passwd *pw)
      * have to contact the LDAP server again.
      */
     if (handle->result) {
-       if (handle->groups == user_groups &&
+       if (handle->grlist == user_group_list &&
            strcmp(pw->pw_name, handle->username) == 0) {
            DPRINTF(("reusing previous result (user %s) with %d entries",
                handle->username, handle->result->nentries), 1);
@@ -2364,7 +2354,7 @@ sudo_ldap_result_get(struct sudo_nss *nss, struct passwd *pw)
            }
            result = NULL;
            rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt,
-               NULL, 0, NULL, NULL, NULL, 0, &result);
+               NULL, 0, NULL, NULL, tvp, 0, &result);
            if (rc != LDAP_SUCCESS) {
                DPRINTF(("nothing found for '%s'", filt), 1);
                continue;
@@ -2395,7 +2385,7 @@ sudo_ldap_result_get(struct sudo_nss *nss, struct passwd *pw)
     /* Store everything in the sudo_nss handle. */
     handle->result = lres;
     handle->username = estrdup(pw->pw_name);
-    handle->groups = user_groups;
+    handle->grlist = user_group_list;
 
     return lres;
 }
index 7505f69ca8fe945ea70340452d7c910262006248..e8e25aab287ab3b46048797fc3c15fe84af38ce3 100644 (file)
@@ -34,6 +34,7 @@
 #include "missing.h"
 #include "error.h"
 #include "alloc.h"
+#include "gettext.h"
 #include "linux_audit.h"
 
 /*
@@ -51,7 +52,7 @@ linux_audit_open(void)
     if (au_fd == -1) {
        /* Kernel may not have audit support. */
        if (errno != EINVAL && errno != EPROTONOSUPPORT && errno != EAFNOSUPPORT)
-           error(1, "unable to open audit system");
+           error(1, _("unable to open audit system"));
     } else {
        (void)fcntl(au_fd, F_SETFD, FD_CLOEXEC);
     }
@@ -75,7 +76,7 @@ linux_audit_command(char *argv[], int result)
     for (av = argv; *av != NULL; av++) {
        n = strlcpy(cp, *av, size - (cp - command));
        if (n >= size - (cp - command))
-           errorx(1, "internal error, linux_audit_command() overflow");
+           errorx(1, _("internal error, linux_audit_command() overflow"));
        cp += n;
        *cp++ = ' ';
     }
@@ -84,7 +85,7 @@ linux_audit_command(char *argv[], int result)
     /* Log command, ignoring ECONNREFUSED on error. */
     rc = audit_log_user_command(au_fd, AUDIT_USER_CMD, command, NULL, result);
     if (rc <= 0 && errno != ECONNREFUSED)
-       warning("unable to send audit message");
+       warning(_("unable to send audit message"));
 
     efree(command);
 
index 82f3e69095bdc7d363c8e0ecea4ddd28fb6f5230..35d6a00fd2d47909652258d2d4e5b9793e9efb29 100644 (file)
@@ -138,8 +138,8 @@ do_syslog(int pri, char *msg)
     /*
      * Log the full line, breaking into multiple syslog(3) calls if necessary
      */
-    fmt = FMT_FIRST;
-    maxlen = MAXSYSLOGLEN - (sizeof(FMT_FIRST) - 6 + strlen(user_name));
+    fmt = _(FMT_FIRST);
+    maxlen = MAXSYSLOGLEN - (strlen(fmt) - 5 + strlen(user_name));
     for (p = msg; *p != '\0'; ) {
        len = strlen(p);
        if (len > maxlen) {
@@ -166,8 +166,8 @@ do_syslog(int pri, char *msg)
            mysyslog(pri, fmt, user_name, p);
            p += len;
        }
-       fmt = FMT_CONTD;
-       maxlen = MAXSYSLOGLEN - (sizeof(FMT_CONTD) - 6 + strlen(user_name));
+       fmt = _(FMT_CONTD);
+       maxlen = MAXSYSLOGLEN - (strlen(fmt) - 5 + strlen(user_name));
     }
 
 #ifdef HAVE_SETLOCALE
@@ -180,22 +180,21 @@ static void
 do_logfile(char *msg)
 {
     char *full_line;
-    char *beg, *oldend, *end;
-    FILE *fp;
+    size_t len;
     mode_t oldmask;
-    size_t maxlen;
+    time_t now;
+    FILE *fp;
 
     oldmask = umask(077);
-    maxlen = def_loglinelen > 0 ? def_loglinelen : 0;
     fp = fopen(def_logfile, "a");
     (void) umask(oldmask);
     if (fp == NULL) {
-       send_mail("Can't open log file: %s: %s", def_logfile, strerror(errno));
+       send_mail(_("unable to open log file: %s: %s"),
+           def_logfile, strerror(errno));
     } else if (!lock_file(fileno(fp), SUDO_LOCK)) {
-       send_mail("Can't lock log file: %s: %s", def_logfile, strerror(errno));
+       send_mail(_("unable to lock log file: %s: %s"),
+           def_logfile, strerror(errno));
     } else {
-       time_t now;
-
 #ifdef HAVE_SETLOCALE
        const char *old_locale = estrdup(setlocale(LC_ALL, NULL));
        if (!setlocale(LC_ALL, def_sudoers_locale))
@@ -203,7 +202,7 @@ do_logfile(char *msg)
 #endif /* HAVE_SETLOCALE */
 
        now = time(NULL);
-       if (def_loglinelen == 0) {
+       if (def_loglinelen < sizeof(LOG_INDENT)) {
            /* Don't pretty-print long log file lines (hard to grep) */
            if (def_log_host)
                (void) fprintf(fp, "%s : %s : HOST=%s : %s\n",
@@ -213,59 +212,16 @@ do_logfile(char *msg)
                    get_timestr(now, def_log_year), user_name, msg);
        } else {
            if (def_log_host)
-               easprintf(&full_line, "%s : %s : HOST=%s : %s",
+               len = easprintf(&full_line, "%s : %s : HOST=%s : %s",
                    get_timestr(now, def_log_year), user_name, user_shost, msg);
            else
-               easprintf(&full_line, "%s : %s : %s",
+               len = easprintf(&full_line, "%s : %s : %s",
                    get_timestr(now, def_log_year), user_name, msg);
 
            /*
-            * Print out full_line with word wrap
+            * Print out full_line with word wrap around def_loglinelen chars.
             */
-           beg = end = full_line;
-           while (beg) {
-               oldend = end;
-               end = strchr(oldend, ' ');
-
-               if (maxlen > 0 && end) {
-                   *end = '\0';
-                   if (strlen(beg) > maxlen) {
-                       /* too far, need to back up & print the line */
-
-                       if (beg == (char *)full_line)
-                           maxlen -= 4;        /* don't indent first line */
-
-                       *end = ' ';
-                       if (oldend != beg) {
-                           /* rewind & print */
-                           end = oldend-1;
-                           while (*end == ' ')
-                               --end;
-                           *(++end) = '\0';
-                           (void) fprintf(fp, "%s\n    ", beg);
-                           *end = ' ';
-                       } else {
-                           (void) fprintf(fp, "%s\n    ", beg);
-                       }
-
-                       /* reset beg to point to the start of the new substr */
-                       beg = end;
-                       while (*beg == ' ')
-                           ++beg;
-                   } else {
-                       /* we still have room */
-                       *end = ' ';
-                   }
-
-                   /* remove leading whitespace */
-                   while (*end == ' ')
-                       ++end;
-               } else {
-                   /* final line */
-                   (void) fprintf(fp, "%s\n", beg);
-                   beg = NULL;                 /* exit condition */
-               }
-           }
+           writeln_wrap(fp, full_line, len, def_loglinelen);
            efree(full_line);
        }
        (void) fflush(fp);
@@ -290,11 +246,11 @@ log_denial(int status, int inform_user)
 
     /* Set error message. */
     if (ISSET(status, FLAG_NO_USER))
-       message = "user NOT in sudoers";
+       message = _("user NOT in sudoers");
     else if (ISSET(status, FLAG_NO_HOST))
-       message = "user NOT authorized on host";
+       message = _("user NOT authorized on host");
     else
-       message = "command not allowed";
+       message = _("command not allowed");
 
     logline = new_logline(message, 0);
 
@@ -304,18 +260,18 @@ log_denial(int status, int inform_user)
     /* Inform the user if they failed to authenticate.  */
     if (inform_user) {
        if (ISSET(status, FLAG_NO_USER)) {
-           sudo_printf(SUDO_CONV_ERROR_MSG, "%s is not in the sudoers file.  "
-               "This incident will be reported.\n", user_name);
+           sudo_printf(SUDO_CONV_ERROR_MSG, _("%s is not in the sudoers "
+               "file.  This incident will be reported.\n"), user_name);
        } else if (ISSET(status, FLAG_NO_HOST)) {
-           sudo_printf(SUDO_CONV_ERROR_MSG, "%s is not allowed to run sudo "
-               "on %s.  This incident will be reported.\n",
+           sudo_printf(SUDO_CONV_ERROR_MSG, _("%s is not allowed to run sudo "
+               "on %s.  This incident will be reported.\n"),
                user_name, user_shost);
        } else if (ISSET(status, FLAG_NO_CHECK)) {
-           sudo_printf(SUDO_CONV_ERROR_MSG, "Sorry, user %s may not run "
-               "sudo on %s.\n", user_name, user_shost);
+           sudo_printf(SUDO_CONV_ERROR_MSG, _("Sorry, user %s may not run "
+               "sudo on %s.\n"), user_name, user_shost);
        } else {
-           sudo_printf(SUDO_CONV_ERROR_MSG, "Sorry, user %s is not allowed "
-               "to execute '%s%s%s' as %s%s%s on %s.\n",
+           sudo_printf(SUDO_CONV_ERROR_MSG, _("Sorry, user %s is not allowed "
+               "to execute '%s%s%s' as %s%s%s on %s.\n"),
                user_name, user_cmnd, user_args ? " " : "",
                user_args ? user_args : "",
                list_pw ? list_pw->pw_name : runas_pw ?
@@ -449,14 +405,14 @@ send_mail(const char *fmt, ...)
     switch (pid = fork()) {
        case -1:
            /* Error. */
-           error(1, "cannot fork");
+           error(1, _("unable to fork"));
            break;
        case 0:
            /* Child. */
            switch (pid = fork()) {
                case -1:
                    /* Error. */
-                   mysyslog(LOG_ERR, "cannot fork: %m");
+                   mysyslog(LOG_ERR, _("unable to fork: %m"));
                    _exit(1);
                case 0:
                    /* Grandchild continues below. */
@@ -506,14 +462,14 @@ send_mail(const char *fmt, ...)
     (void) sigaction(SIGPIPE, &sa, NULL);
 
     if (pipe(pfd) == -1) {
-       mysyslog(LOG_ERR, "cannot open pipe: %m");
+       mysyslog(LOG_ERR, _("unable to open pipe: %m"));
        _exit(1);
     }
 
     switch (pid = fork()) {
        case -1:
            /* Error. */
-           mysyslog(LOG_ERR, "cannot fork: %m");
+           mysyslog(LOG_ERR, _("unable to fork: %m"));
            _exit(1);
            break;
        case 0:
@@ -525,7 +481,7 @@ send_mail(const char *fmt, ...)
                /* Child, set stdin to output side of the pipe */
                if (pfd[0] != STDIN_FILENO) {
                    if (dup2(pfd[0], STDIN_FILENO) == -1) {
-                       mysyslog(LOG_ERR, "cannot dup stdin: %m");
+                       mysyslog(LOG_ERR, _("unable to dup stdin: %m"));
                        _exit(127);
                    }
                    (void) close(pfd[0]);
@@ -559,7 +515,7 @@ send_mail(const char *fmt, ...)
                set_perms(PERM_FULL_USER|PERM_NOEXIT);
                execv(mpath, argv);
 #endif /* NO_ROOT_MAILER */
-               mysyslog(LOG_ERR, "cannot execute %s: %m", mpath);
+               mysyslog(LOG_ERR, _("unable to execute %s: %m"), mpath);
                _exit(127);
            }
            break;
@@ -769,5 +725,5 @@ new_logline(const char *message, int serrno)
 
     return line;
 toobig:
-    errorx(1, "internal error: insufficient space for log line");
+    errorx(1, _("internal error: insufficient space for log line"));
 }
index 43d5ff096fe4e8a8a29e3df125a5e50574d7d964..7a89738c381fbc8916a321bdd32f3fbf0577b1dc 100644 (file)
 # define MAXSYSLOGLEN          960
 #endif
 
+/*
+ * Indentation level for file-based logs when word wrap is enabled.
+ */
+#define LOG_INDENT     "    "
+
 void audit_success(char *[]);
 void audit_failure(char *[], char const * const, ...);
 void log_allowed(int);
 void log_denial(int, int);
 void log_error(int flags, const char *fmt, ...) __printflike(2, 3);
 void reapchild(int);
+void writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen);
 
 #endif /* _LOGGING_H */
diff --git a/plugins/sudoers/logwrap.c b/plugins/sudoers/logwrap.c
new file mode 100644 (file)
index 0000000..054b9ac
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif /* STDC_HEADERS */
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif /* HAVE_STRING_H */
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif /* HAVE_STRINGS_H */
+
+#include "sudoers.h"
+
+void
+writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen)
+{
+    char *indent = "";
+    char *beg = line;
+    char *end;
+
+    /*
+     * Print out line with word wrap around maxlen characters.
+     */
+    beg = line;
+    while (len > maxlen) {
+       end = beg + maxlen;
+       while (end != beg && *end != ' ')
+           end--;
+       if (beg == end) {
+           /* Unable to find word break within maxlen, look beyond. */
+           end = strchr(beg + maxlen, ' ');
+           if (end == NULL)
+               break;  /* no word break */
+       }
+       fprintf(fp, "%s%.*s\n", indent, (int)(end - beg), beg);
+       while (*end == ' ')
+           end++;
+       len -= (end - beg);
+       beg = end;
+       if (indent[0] == '\0') {
+           indent = LOG_INDENT;
+           maxlen -= sizeof(LOG_INDENT) - 1;
+       }
+    }
+    /* Print remainder, if any. */
+    if (len)
+       fprintf(fp, "%s%s\n", indent, beg);
+}
index 8e06a4d5c6658efb918a5d0448ededac171aec31..79176a280d30f71d496be1b80677b1960b3d97a2 100644 (file)
@@ -227,6 +227,10 @@ _runaslist_matches(struct member_list *user_list, struct member_list *group_list
            if (group_matched != UNSPEC)
                break;
        }
+       if (group_matched == UNSPEC) {
+           if (runas_pw != NULL && runas_pw->pw_gid == runas_gr->gr_gid)
+               group_matched = ALLOW;  /* runas group matches passwd db */
+       }
     }
 
     if (user_matched == DENY || group_matched == DENY)
index 7befe1588754450dec8cf149df4abcfab4ff3a57..427cff754031779733cf8771b4fe2ccc083b010a 100755 (executable)
@@ -66,7 +66,7 @@ while(<IN>) {
                s/^"//;
                s/"$//;
                s/"/\\"/g;
-               $desc = "\"$_\"";
+               $desc = "N_(\"$_\")";
            }
        } elsif ($field == 3 || $field == 4) {
            if (s/^\*//) {
index 985c4351afbb65ab8d2d1a27cfa70c1d82974a51..303d13500ab736f15fe8d8e76fc34f5ab8ae4b32 100644 (file)
@@ -112,7 +112,7 @@ sudo_file_parse(struct sudo_nss *nss)
     init_parser(sudoers_file, 0);
     yyin = nss->handle;
     if (yyparse() != 0 || parse_error) {
-       log_error(NO_EXIT, "parse error in %s near line %d",
+       log_error(NO_EXIT, _("parse error in %s near line %d"),
            errorfile, errorlineno);
        return -1;
     }
@@ -266,33 +266,28 @@ sudo_file_append_cmnd(struct cmndspec *cs, struct cmndtag *tags,
 
 #ifdef HAVE_SELINUX
     if (cs->role)
-       lbuf_append(lbuf, "ROLE=", cs->role, " ", NULL);
+       lbuf_append(lbuf, "ROLE=%s ", cs->role);
     if (cs->type)
-       lbuf_append(lbuf, "TYPE=", cs->type, " ", NULL);
+       lbuf_append(lbuf, "TYPE=%s ", cs->type);
 #endif /* HAVE_SELINUX */
     if (TAG_CHANGED(setenv)) {
-       lbuf_append(lbuf, cs->tags.setenv ? "SETENV: " :
-           "NOSETENV: ", NULL);
+       lbuf_append(lbuf, cs->tags.setenv ? "SETENV: " : "NOSETENV: ");
        tags->setenv = cs->tags.setenv;
     }
     if (TAG_CHANGED(noexec)) {
-       lbuf_append(lbuf, cs->tags.noexec ? "NOEXEC: " :
-           "EXEC: ", NULL);
+       lbuf_append(lbuf, cs->tags.noexec ? "NOEXEC: " : "EXEC: ");
        tags->noexec = cs->tags.noexec;
     }
     if (TAG_CHANGED(nopasswd)) {
-       lbuf_append(lbuf, cs->tags.nopasswd ? "NOPASSWD: " :
-           "PASSWD: ", NULL);
+       lbuf_append(lbuf, cs->tags.nopasswd ? "NOPASSWD: " : "PASSWD: ");
        tags->nopasswd = cs->tags.nopasswd;
     }
     if (TAG_CHANGED(log_input)) {
-       lbuf_append(lbuf, cs->tags.log_input ? "LOG_INPUT: " :
-           "NOLOG_INPUT: ", NULL);
+       lbuf_append(lbuf, cs->tags.log_input ? "LOG_INPUT: " : "NOLOG_INPUT: ");
        tags->log_input = cs->tags.log_input;
     }
     if (TAG_CHANGED(log_output)) {
-       lbuf_append(lbuf, cs->tags.log_output ? "LOG_OUTPUT: " :
-           "NOLOG_OUTPUT: ", NULL);
+       lbuf_append(lbuf, cs->tags.log_output ? "LOG_OUTPUT: " : "NOLOG_OUTPUT: ");
        tags->log_output = cs->tags.log_output;
     }
     m = cs->cmnd;
@@ -318,37 +313,37 @@ sudo_file_display_priv_short(struct passwd *pw, struct userspec *us,
        tags.nopasswd = UNSPEC;
        tags.log_input = UNSPEC;
        tags.log_output = UNSPEC;
-       lbuf_append(lbuf, "    ", NULL);
+       lbuf_append(lbuf, "    ");
        tq_foreach_fwd(&priv->cmndlist, cs) {
            if (cs != tq_first(&priv->cmndlist))
-               lbuf_append(lbuf, ", ", NULL);
-           lbuf_append(lbuf, "(", NULL);
+               lbuf_append(lbuf, ", ");
+           lbuf_append(lbuf, "(");
            if (!tq_empty(&cs->runasuserlist)) {
                tq_foreach_fwd(&cs->runasuserlist, m) {
                    if (m != tq_first(&cs->runasuserlist))
-                       lbuf_append(lbuf, ", ", NULL);
+                       lbuf_append(lbuf, ", ");
                    print_member(lbuf, m->name, m->type, m->negated,
                        RUNASALIAS);
                }
            } else if (tq_empty(&cs->runasgrouplist)) {
-               lbuf_append(lbuf, def_runas_default, NULL);
+               lbuf_append(lbuf, "%s", def_runas_default);
            } else {
-               lbuf_append(lbuf, pw->pw_name, NULL);
+               lbuf_append(lbuf, "%s", pw->pw_name);
            }
            if (!tq_empty(&cs->runasgrouplist)) {
-               lbuf_append(lbuf, " : ", NULL);
+               lbuf_append(lbuf, " : ");
                tq_foreach_fwd(&cs->runasgrouplist, m) {
                    if (m != tq_first(&cs->runasgrouplist))
-                       lbuf_append(lbuf, ", ", NULL);
+                       lbuf_append(lbuf, ", ");
                    print_member(lbuf, m->name, m->type, m->negated,
                        RUNASALIAS);
                }
            }
-           lbuf_append(lbuf, ") ", NULL);
+           lbuf_append(lbuf, ") ");
            sudo_file_append_cmnd(cs, &tags, lbuf);
            nfound++;
        }
-       lbuf_append(lbuf, "\n", NULL);
+       lbuf_append(lbuf, "\n");
     }
     return nfound;
 }
@@ -371,35 +366,35 @@ sudo_file_display_priv_long(struct passwd *pw, struct userspec *us,
        tags.nopasswd = UNSPEC;
        tags.log_input = UNSPEC;
        tags.log_output = UNSPEC;
-       lbuf_append(lbuf, "\nSudoers entry:\n", NULL);
+       lbuf_append(lbuf, _("\nSudoers entry:\n"));
        tq_foreach_fwd(&priv->cmndlist, cs) {
-           lbuf_append(lbuf, "    RunAsUsers: ", NULL);
+           lbuf_append(lbuf, _("    RunAsUsers: "));
            if (!tq_empty(&cs->runasuserlist)) {
                tq_foreach_fwd(&cs->runasuserlist, m) {
                    if (m != tq_first(&cs->runasuserlist))
-                       lbuf_append(lbuf, ", ", NULL);
+                       lbuf_append(lbuf, ", ");
                    print_member(lbuf, m->name, m->type, m->negated,
                        RUNASALIAS);
                }
            } else if (tq_empty(&cs->runasgrouplist)) {
-               lbuf_append(lbuf, def_runas_default, NULL);
+               lbuf_append(lbuf, "%s", def_runas_default);
            } else {
-               lbuf_append(lbuf, pw->pw_name, NULL);
+               lbuf_append(lbuf, "%s", pw->pw_name);
            }
-           lbuf_append(lbuf, "\n", NULL);
+           lbuf_append(lbuf, "\n");
            if (!tq_empty(&cs->runasgrouplist)) {
-               lbuf_append(lbuf, "    RunAsGroups: ", NULL);
+               lbuf_append(lbuf, _("    RunAsGroups: "));
                tq_foreach_fwd(&cs->runasgrouplist, m) {
                    if (m != tq_first(&cs->runasgrouplist))
-                       lbuf_append(lbuf, ", ", NULL);
+                       lbuf_append(lbuf, ", ");
                    print_member(lbuf, m->name, m->type, m->negated,
                        RUNASALIAS);
                }
-               lbuf_append(lbuf, "\n", NULL);
+               lbuf_append(lbuf, "\n");
            }
-           lbuf_append(lbuf, "    Commands:\n\t", NULL);
+           lbuf_append(lbuf, _("    Commands:\n\t"));
            sudo_file_append_cmnd(cs, &tags, lbuf);
-           lbuf_append(lbuf, "\n", NULL);
+           lbuf_append(lbuf, "\n");
            nfound++;
        }
     }
@@ -462,18 +457,18 @@ sudo_file_display_defaults(struct sudo_nss *nss, struct passwd *pw,
            case DEFAULTS_CMND:
                continue;
        }
-       lbuf_append(lbuf, prefix, NULL);
        if (d->val != NULL) {
-           lbuf_append(lbuf, d->var, d->op == '+' ? "+=" :
-               d->op == '-' ? "-=" : "=", NULL);
+           lbuf_append(lbuf, "%s%s%s", prefix, d->var,
+               d->op == '+' ? "+=" : d->op == '-' ? "-=" : "=");
            if (strpbrk(d->val, " \t") != NULL) {
-               lbuf_append(lbuf, "\"", NULL);
-               lbuf_append_quoted(lbuf, "\"", d->val, NULL);
-               lbuf_append(lbuf, "\"", NULL);
+               lbuf_append(lbuf, "\"");
+               lbuf_append_quoted(lbuf, "\"", "%s", d->val);
+               lbuf_append(lbuf, "\"");
            } else
-               lbuf_append_quoted(lbuf, SUDOERS_QUOTED, d->val, NULL);
+               lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", d->val);
        } else
-           lbuf_append(lbuf, d->op == FALSE ? "!" : "", d->var, NULL);
+           lbuf_append(lbuf, "%s%s%s", prefix,
+               d->op == FALSE ? "!" : "", d->var);
        prefix = ", ";
        nfound++;
     }
@@ -505,34 +500,29 @@ display_bound_defaults(int dtype, struct lbuf *lbuf)
 {
     struct defaults *d;
     struct member *m, *binding = NULL;
-    char *dname, *dsep;
+    char *dsep;
     int atype, nfound = 0;
 
     switch (dtype) {
        case DEFAULTS_HOST:
            atype = HOSTALIAS;
-           dname = "host";
            dsep = "@";
            break;
        case DEFAULTS_USER:
            atype = USERALIAS;
-           dname = "user";
            dsep = ":";
            break;
        case DEFAULTS_RUNAS:
            atype = RUNASALIAS;
-           dname = "runas";
            dsep = ">";
            break;
        case DEFAULTS_CMND:
            atype = CMNDALIAS;
-           dname = "cmnd";
            dsep = "!";
            break;
        default:
            return -1;
     }
-    /* sudo_printf(SUDO_CONV_INFO_MSG, "Per-%s Defaults entries:\n", dname); */
     tq_foreach_fwd(&defaults, d) {
        if (d->type != dtype)
            continue;
@@ -541,21 +531,21 @@ display_bound_defaults(int dtype, struct lbuf *lbuf)
        if (binding != tq_first(&d->binding)) {
            binding = tq_first(&d->binding);
            if (nfound != 1)
-               lbuf_append(lbuf, "\n", NULL);
-           lbuf_append(lbuf, "    Defaults", dsep, NULL);
+               lbuf_append(lbuf, "\n");
+           lbuf_append(lbuf, "    Defaults%s", dsep);
            for (m = binding; m != NULL; m = m->next) {
                if (m != binding)
-                   lbuf_append(lbuf, ",", NULL);
+                   lbuf_append(lbuf, ",");
                print_member(lbuf, m->name, m->type, m->negated, atype);
-               lbuf_append(lbuf, " ", NULL);
+               lbuf_append(lbuf, " ");
            }
        } else
-           lbuf_append(lbuf, ", ", NULL);
+           lbuf_append(lbuf, ", ");
        if (d->val != NULL) {
-           lbuf_append(lbuf, d->var, d->op == '+' ? "+=" :
-               d->op == '-' ? "-=" : "=", d->val, NULL);
+           lbuf_append(lbuf, "%s%s%s", d->var, d->op == '+' ? "+=" :
+               d->op == '-' ? "-=" : "=", d->val);
        } else
-           lbuf_append(lbuf, d->op == FALSE ? "!" : "", d->var, NULL);
+           lbuf_append(lbuf, "%s%s", d->op == FALSE ? "!" : "", d->var);
     }
 
     return nfound;
@@ -619,23 +609,23 @@ _print_member(struct lbuf *lbuf, char *name, int type, int negated,
 
     switch (type) {
        case ALL:
-           lbuf_append(lbuf, negated ? "!ALL" : "ALL", NULL);
+           lbuf_append(lbuf, "%sALL", negated ? "!" : "");
            break;
        case COMMAND:
            c = (struct sudo_command *) name;
            if (negated)
-               lbuf_append(lbuf, "!", NULL);
-           lbuf_append_quoted(lbuf, SUDOERS_QUOTED, c->cmnd, NULL);
+               lbuf_append(lbuf, "!");
+           lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", c->cmnd);
            if (c->args) {
-               lbuf_append(lbuf, " ", NULL);
-               lbuf_append_quoted(lbuf, SUDOERS_QUOTED, c->args, NULL);
+               lbuf_append(lbuf, " ");
+               lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", c->args);
            }
            break;
        case ALIAS:
            if ((a = alias_find(name, alias_type)) != NULL) {
                tq_foreach_fwd(&a->members, m) {
                    if (m != tq_first(&a->members))
-                       lbuf_append(lbuf, ", ", NULL);
+                       lbuf_append(lbuf, ", ");
                    _print_member(lbuf, m->name, m->type,
                        negated ? !m->negated : m->negated, alias_type);
                }
@@ -643,7 +633,7 @@ _print_member(struct lbuf *lbuf, char *name, int type, int negated,
            }
            /* FALLTHROUGH */
        default:
-           lbuf_append(lbuf, negated ? "!" : "", name, NULL);
+           lbuf_append(lbuf, "%s%s", negated ? "!" : "", name);
            break;
     }
 }
index 2d42871b7d887be14f1b7a896c6c7de1c8babc40..3d9f84cd64e0e11ab9430cb8ea4d306bb411d653 100644 (file)
@@ -29,6 +29,9 @@
 #include "error.h"
 #include "sudo_plugin.h"
 
+#define DEFAULT_TEXT_DOMAIN    "sudoers"
+#include "gettext.h"
+
 static void _warning(int, const char *, va_list);
        void plugin_cleanup(int);
 
@@ -94,12 +97,12 @@ _warning(int use_errno, const char *fmt, va_list ap)
     msg[0].msg_type = SUDO_CONV_ERROR_MSG;
     msg[0].msg = getprogname();
     msg[1].msg_type = SUDO_CONV_ERROR_MSG;
-    msg[1].msg = ": ";
+    msg[1].msg = _(": ");
     msg[2].msg_type = SUDO_CONV_ERROR_MSG;
     msg[2].msg = str;
     if (use_errno) {
        msg[3].msg_type = SUDO_CONV_ERROR_MSG;
-       msg[3].msg = ": ";
+       msg[3].msg = _(": ");
        msg[4].msg_type = SUDO_CONV_ERROR_MSG;
        msg[4].msg = strerror(errno);
        nmsgs = 6;
diff --git a/plugins/sudoers/po/README b/plugins/sudoers/po/README
new file mode 100644 (file)
index 0000000..ff9b845
--- /dev/null
@@ -0,0 +1,14 @@
+NLS Translations for sudo are coordinated through the Translation
+Project, at http://translationproject.org/
+
+If you would like to contribute a translation for sudo, please join
+a translation team at the Translation Project instead of contributing
+a po file directly.  This will avoid duplicated work if there is
+already a translation in progress.  If you would like to become a
+member of a translation team, please follow the instructions at
+http://translationproject.org/html/translators.html
+
+The messages in sudo are split into two domains: sudo and sudoers.
+The former is used by the sudo front-end and utility functions.
+The latter is used by the sudoers policy and I/O logging plug-ins
+as well as the sudoers-specific commands visudo and sudoreplay.
diff --git a/plugins/sudoers/po/da.mo b/plugins/sudoers/po/da.mo
new file mode 100644 (file)
index 0000000..a8124ad
Binary files /dev/null and b/plugins/sudoers/po/da.mo differ
diff --git a/plugins/sudoers/po/da.po b/plugins/sudoers/po/da.po
new file mode 100644 (file)
index 0000000..024b731
--- /dev/null
@@ -0,0 +1,1742 @@
+# Danish translation of sudoers.
+# This file is put in the public domain.
+# Joe Hansen <joedalton2@yahoo.dk>, 2011.
+#
+# audit -> overvågning
+# dummy -> attrap
+# epoch -> epoke
+# execute -> udføre (run -> kør)
+# overflow -> overløb
+# runas -> runas ? (eller måske bedre med kør som. den er valgt indtil videre)
+# stat -> stat
+#
+# der bliver brugt masser af forskellige citationstegn i den her ('' \" \" ``, 
+# nogle gange også tre styk). De er alle lavet med »« på dansk.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudoers 1.8.2-rc9\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-05 13:34-0400\n"
+"PO-Revision-Date: 2011-08-09 23:06+0100\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\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"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr "Alias »%s« er allerede defineret"
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr "getaudit: fejlede"
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr "Kunne ikke bestemme overvågningsbetingelse"
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr "getauid fejlede"
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr "au_open: fejlede"
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr "au_to_subject: fejlede"
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr "au_to_exec_args: fejlede"
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr "au_to_return32: fejlede"
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr "Kan ikke indsende overvågningspost"
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr "getauid: fejlede"
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr "au_to_text: fejlede"
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr "beklager men en adgangskode er krævet for at køre %s"
+
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:970 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr "kan ikke åbne %s"
+
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr "kan ikke skrive til %s"
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr "kan ikke mkdir %s"
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr "intern fejl, expand_prompt()-overløb"
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr "tidsstempelsti er for lang: %s"
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr "%s findes men er ikke en mappe (0%o)"
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr "%s ejet af uid %u, bør være uid %u"
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr "%s er skrivbar for ikkeejer (0%o), bør være tilstand 0700"
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:956
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr "kan ikke stat %s"
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr "%s findes men er ikke en regulær fil (0%o)"
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr "%s skrivbar af ikkeejer (0%o), bør være tilstand 0600"
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr "tidsstempel for langt ude i fremtiden: %20.20s"
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr "kan ikke fjerne %s (%s), vil nulstille til epoken"
+
+#: plugins/sudoers/check.c:660
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr "kan ikke nulstille %s til epoken"
+
+#: plugins/sudoers/check.c:714 plugins/sudoers/check.c:720
+#, c-format
+msgid "unknown uid: %u"
+msgstr "ukendt uid: %u"
+
+#: plugins/sudoers/check.c:717 plugins/sudoers/sudoers.c:747
+#: plugins/sudoers/sudoers.c:813 plugins/sudoers/sudoers.c:814
+#: plugins/sudoers/sudoers.c:1087 plugins/sudoers/testsudoers.c:200
+#: plugins/sudoers/testsudoers.c:330
+#, c-format
+msgid "unknown user: %s"
+msgstr "ukendt bruger: %s"
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr "Syslog-facilitet hvis syslog bruges til logning: %s"
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr "Syslog-prioritet at bruge når brugergodkendelser går igennem: %s"
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr "Syslog-prioritet at bruge når brugergodkendelser ikke går igennem: %s"
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr "Placer OTP-prompter på deres egen linje"
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr "Ignorer ».« i $PATH"
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr "Send altid post når sudo køres"
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr "Send post hvis brugergodkendelse fejler"
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr "Send post hvis brugeren ikke er i suoders"
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr "Send post hvis brugeren ikke er i sudoers for denne vært"
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr "Send post hvis brugeren ikke har tilladelse til at køre en kommando"
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr "Brug et separat tidsstempel for hver bruger/tty-kombination"
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr "Undervis brugere den første gang de kører sudo"
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr "Fil indeholdende sudo-undervisningen: %s"
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr "Kræv som standard at brugere skal godkendes"
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr "Root kan køre sudo"
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr "Log værtsnavnet i logfilen (non-syslog)"
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr "Log året i logfilen (non-syslog)"
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr "Hvis sudo er startet op uden argumenter så start en skal"
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr "Angiv $HOME for målbrugeren når der startes en skal med -s"
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr "Angiv altid $HOME for målbrugerens hjemmemappe"
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr "Tillad lidt informationsindsamling for at lave brugbare fejlbeskeder"
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr "Kræv fuldkvalificerede værtsnavne i sudoersfilen"
+
+#: plugins/sudoers/def_data.c:115
+msgid "Insult the user when they enter an incorrect password"
+msgstr "Fornærm brugeren når de indtaster en forkert adgangskode"
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr "Tillad kun brugeren at køre sudo hvis de har en tty"
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr "Visudo vil overholde EDITOR-miljøvariablen"
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr "Spørg om adgangskoden for root, ikke brugerens"
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr "Spørg om brugerens kør som_standard adgangskode, ikke brugernes"
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr "Spørg om målbrugerens adgangskode, ikke brugernes"
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr "Brug standarder i målbrugerens logindklasse hvis der er en"
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr "Angiv LOGNAME- og USER-miljøvariablerne"
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr "Angiv kun den effektive uid til målbrugeren, ikke den reelle uid"
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr "Initialiser ikke gruppevektoren til målbrugerens"
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr "Længde hvor logfillinjer skal ombrydes (0 for ingen ombrydning): %d"
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr "Tidsudløb for godkendelsestidsstempel: %.1f minutter"
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr "Tidsudløb for adgangskodeprompt: %.1f minutter"
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr "Antal forsøg for indtastning af adgangskode: %d"
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr "Umask at bruge eller 0777 for at bruge brugers: 0%o"
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr "Sti til logfil: %s"
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr "Stil til postprogram: %s"
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr "Flag for postprogram: %s"
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr "Adresse at sende post til: %s"
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr "Adresse at sende post fra: %s"
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr "Emnelinje for postbeskeder: %s"
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr "Ugyldig adgangskodebesked: %s"
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr "Sti til mappe for godkendelsestidsstempel: %s"
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr "Ejer af mappen for godkendelsestidsstempel: %s"
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr "Brugere i denne gruppe er undtaget fra adgangskode og STI-krav: %s"
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr "Standard for adgangskodeprompt: %s"
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr "Hvis angivet vil adgangsprompt overskrive systemprompt i alle tilfælde."
+
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr "Standardbruger at køre kommandoer som: %s"
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr "Værdi at overskrive brugers $PATH med: %s"
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr "Sti til redigeringsprogrammet for brug af visudo: %s"
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr "Hvornår der skal kræves en adgangskode for »list« pseudokommando: %s"
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr "Hvornår der skal kræves en adgangskode for »verify« pseudokommando: %s"
+
+#: plugins/sudoers/def_data.c:243
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr "Præindlæs attrap-udførelsesfunktioner indeholdt i »noexec_file«"
+
+#: plugins/sudoers/def_data.c:247
+#, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr "Fil der indeholder attrap-udførelsesfunktioner: %s"
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr "Hvis LDAP-mappe er sat op, ignorer vi så lokal sudoersfil"
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr "Filbeskrivelser >= %d vil blive lukket før udførelse af en kommando"
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr "Hvis angivet kan brugere overskrive værdien af »closeform« med tilvalget -C"
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr "Tillad at brugere kan angive arbitrære miljøvariabler"
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr "Nulstil miljøet til et standardsæt af variabler"
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr "Miljøvariabler at indstillingskontrollere:"
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr "Miljøvariabler at fjerne:"
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr "Miljøvariabler at bevare:"
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr "SELinux-rolle at bruge i den nye sikkerhedskontekst: %s"
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr "SELinux-type at bruge i den nye sikkerhedskontekst: %s"
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr "Sti til den sudo-specifikke miljøfil: %s"
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr "Sprog at bruge under fortolkning af sudoers: %s"
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr "Tillad at sudo spørger om en adgangskode selv om den vil være synlig"
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr "Tilbyd visuel tilbagemeldning ved adgangskodeprompten når der er brugerinddata"
+
+#: plugins/sudoers/def_data.c:307
+msgid "Use faster globbing that is less accurate but does not access the filesystem"
+msgstr "Brug hurtigere globbing som er mindre præcis, men som ikke tilgår filsystemet"
+
+#: plugins/sudoers/def_data.c:311
+msgid "The umask specified in sudoers will override the user's, even if it is more permissive"
+msgstr "Umask'en angivet i sudoers vil overskrive brugerens, også selv om den er mere tilladende"
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr "Log brugers inddata for kommandoen der bliver kørt"
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr "Log uddata for kommandoen der bliver kørt"
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr "Komprimer I/O-log med brug af zlib"
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr "Kør altid kommandoer i en pseudo-tty"
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr "Udvidelsesmodul for ikke-Unix-gruppeunderstøttelse"
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr "Mappe at gemme inddata-/uddatalog i"
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr "Fil at gemme inddata-/uddatalog i"
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr "Tilføjer et punkt til utmp/utmpx-filen når der allokeres en pty"
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr "Angiv brugeren i utmp til brugeren kør som, ikke den opstartende bruger"
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+"Tilgængelige indstillinger i en sudoers »standardlinje«:\n"
+"\n"
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr "%s: %.*s\n"
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr "ukendt standardpunkt »%s«"
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr "værdi »%s« er ugyldig for indstilling »%s«"
+
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr "ingen værdi angivet for »%s«"
+
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr "værdier for »%s« skal begynde med en »/«"
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr "indstilling »%s« kan ikke modtage en værdi"
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr "intern fejl, sudo_setenv()-overløb"
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr "sudo_putenv: ødelagt envp, forskellig længde"
+
+#: plugins/sudoers/env.c:698
+#, c-format
+msgid "sorry, you are not allowed to set the following environment variables: %s"
+msgstr "beklager, du har ikke tilladelse til at angive de følgende miljøvariabler: %s"
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:899 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ">>> %s: %s nær linje %d <<<"
+
+#: plugins/sudoers/group_plugin.c:90
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: plugins/sudoers/group_plugin.c:102
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s skal være ejet af uid %d"
+
+#: plugins/sudoers/group_plugin.c:106
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr "%s skal være skrivbar af ejer"
+
+#: plugins/sudoers/group_plugin.c:113
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "kan ikke dlopen %s: %s"
+
+#: plugins/sudoers/group_plugin.c:118
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr "kan ikke finde symbol »group_plugin« i %s"
+
+#: plugins/sudoers/group_plugin.c:123
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr "%s: inkompatibel gruppeudvidelsesmodul for hovedversion %d, forventede %d"
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr "Lokal IP-adresse og netmaskepar:\n"
+
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:977
+#, c-format
+msgid "unable to read %s"
+msgstr "kan ikke læse %s"
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr "ugyldig sekvenstal %s"
+
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr "kan ikke oprette %s"
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:356
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr "kan ikke angive sprog til »%s«, bruger »C«"
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr "sudo_ldap_conf_add_ports: port for stor"
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr "sudo_ldap_conf_add_ports: stigende mellemlager for vært (hostbuf) har ikke nok plads"
+
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr "ikkeunderstøttet LDAP uri-type: %s"
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr "ugyldig uri: %s"
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr "kan ikke blande ldap og ldaps URI'er"
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr "kan ikke blande ldaps og starttls"
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr "sudo_ldap_parse_uri: opbyggende mellemlager for vært (hostbuf) har ikke nok plads"
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr "kan ikke initialisere SSL-cert og key db: %s"
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr "kan ikke indhente GMT-tid"
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr "kan ikke formatere tidsstempel"
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr "kan ikke bygge tidsfilter"
+
+#: plugins/sudoers/ldap.c:1047
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr "sudo_ldap_build_pass1 forskellige allokeringer"
+
+#: plugins/sudoers/ldap.c:1542
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+"\n"
+"LDAP-rolle: %s\n"
+
+#: plugins/sudoers/ldap.c:1544
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+"\n"
+"LDAP-rolle: UKENDT\n"
+
+#: plugins/sudoers/ldap.c:1591
+#, c-format
+msgid "    Order: %s\n"
+msgstr "    Rækkefølge: %s\n"
+
+#: plugins/sudoers/ldap.c:1599
+#, c-format
+msgid "    Commands:\n"
+msgstr "    Kommandoer:\n"
+
+#: plugins/sudoers/ldap.c:1986
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr "kan ikke initialisere LDAP: %s"
+
+#: plugins/sudoers/ldap.c:2017
+#, c-format
+msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"
+msgstr "start_tls angivet men LDAP libs understøtter ikke ldap_start_tls_s() eller ldap_start_tls_s_np()"
+
+#: plugins/sudoers/ldap.c:2248
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr "ugyldig sudoOrder-attribut: %s"
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr "kan ikke åbne overvågningssystem"
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr "intern fejl, linux_audit_command()-overløb"
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr "kan ikke sende overvågningsbesked"
+
+#: plugins/sudoers/logging.c:192
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr "kan ikke åbne logfil: %s: %s"
+
+#: plugins/sudoers/logging.c:195
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr "kan ikke låse logfil: %s: %s"
+
+#: plugins/sudoers/logging.c:249
+msgid "user NOT in sudoers"
+msgstr "bruger IKKE i sudoers"
+
+#: plugins/sudoers/logging.c:251
+msgid "user NOT authorized on host"
+msgstr "bruger IKKE autoriseret på vært"
+
+#: plugins/sudoers/logging.c:253
+msgid "command not allowed"
+msgstr "kommando ikke tilladt"
+
+#: plugins/sudoers/logging.c:263
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr "%s er ikke sudoersfilen. Denne handling vil blive rapporteret.\n"
+
+#: plugins/sudoers/logging.c:266
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr "%s har ikke tilladelse til at køre sudo på %s. Denne handling vil blive rapporteret.\n"
+
+#: plugins/sudoers/logging.c:270
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr "Beklager. Bruger %s må ikke køre sudo på %s.\n"
+
+#: plugins/sudoers/logging.c:273
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr "Beklager. Bruger %s har ikke tilladelse til at køre »%s%s%s« som %s%s%s på %s.\n"
+
+#: plugins/sudoers/logging.c:408
+#, c-format
+msgid "unable to fork"
+msgstr "kan ikke forgrene"
+
+#: plugins/sudoers/logging.c:415 plugins/sudoers/logging.c:472
+#, c-format
+msgid "unable to fork: %m"
+msgstr "kan ikke forgrene: %m"
+
+#: plugins/sudoers/logging.c:465
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr "kan ikke åbne datakanal: %m"
+
+#: plugins/sudoers/logging.c:484
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr "kan ikke dup stdin: %m"
+
+#: plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr "kan ikke køre %s: %m"
+
+#: plugins/sudoers/logging.c:728
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr "intern fejl: utilstrækkelig plads for loglinje"
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr "fortolkningsfejl i %s nær linje %d"
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+"\n"
+"Sudoers-punkt:\n"
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr "    KørSomBrugere: "
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr "    KørSomGrupper: "
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+"    Kommandoer:\n"
+"\t"
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ": "
+
+#: plugins/sudoers/pwutil.c:251
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr "kan ikke cache uid %u (%s), findes allerede"
+
+#: plugins/sudoers/pwutil.c:259
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr "kan ikke cache uid %u, findes allerede"
+
+#: plugins/sudoers/pwutil.c:295 plugins/sudoers/pwutil.c:304
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr "kan ikke cache bruger %s, findes allerede"
+
+#: plugins/sudoers/pwutil.c:607
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr "kan ikke cache gid %u (%s), findes allerede"
+
+#: plugins/sudoers/pwutil.c:615
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr "kan ikke cache gid %u, findes allerede"
+
+#: plugins/sudoers/pwutil.c:644 plugins/sudoers/pwutil.c:653
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr "kan ikke cache gruppe %s, findes allerede"
+
+#: plugins/sudoers/set_perms.c:109 plugins/sudoers/set_perms.c:355
+#: plugins/sudoers/set_perms.c:587 plugins/sudoers/set_perms.c:821
+msgid "perm stack overflow"
+msgstr "permanent stakoverløb"
+
+#: plugins/sudoers/set_perms.c:117 plugins/sudoers/set_perms.c:363
+#: plugins/sudoers/set_perms.c:595 plugins/sudoers/set_perms.c:829
+msgid "perm stack underflow"
+msgstr "permanent stakunderløb"
+
+#: plugins/sudoers/set_perms.c:223 plugins/sudoers/set_perms.c:455
+#: plugins/sudoers/set_perms.c:692
+msgid "unable to change to runas gid"
+msgstr "kan ikke ændre til kør som gid"
+
+#: plugins/sudoers/set_perms.c:231 plugins/sudoers/set_perms.c:462
+#: plugins/sudoers/set_perms.c:699
+msgid "unable to change to runas uid"
+msgstr "kan ikke ændre til kør som uid"
+
+#: plugins/sudoers/set_perms.c:245 plugins/sudoers/set_perms.c:475
+#: plugins/sudoers/set_perms.c:712
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr "kan ikke ændre til sudoers gid"
+
+#: plugins/sudoers/set_perms.c:286 plugins/sudoers/set_perms.c:513
+#: plugins/sudoers/set_perms.c:750 plugins/sudoers/set_perms.c:890
+msgid "too many processes"
+msgstr "for mange processer"
+
+#: plugins/sudoers/set_perms.c:952
+msgid "unable to set runas group vector"
+msgstr "kan ikke angive kør som gruppevektor"
+
+#: plugins/sudoers/sudo_nss.c:238
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr "Matchende standardpunkter for %s på denne vært:\n"
+
+#: plugins/sudoers/sudo_nss.c:251
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr "Kør som og kommandospecifikke standarder for %s:\n"
+
+#: plugins/sudoers/sudo_nss.c:264
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr "Bruger %s må ikke køre de følgende kommandoer på denne vært:\n"
+
+#: plugins/sudoers/sudo_nss.c:274
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr "Bruger %s har ikke tilladelse til at køre sudo på %s.\n"
+
+#: plugins/sudoers/sudoers.c:198 plugins/sudoers/sudoers.c:233
+#: plugins/sudoers/sudoers.c:907
+msgid "problem with defaults entries"
+msgstr "problem med standardpunkter"
+
+#: plugins/sudoers/sudoers.c:202
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr "ingen gyldige sudoerskilder fundet, afslutter"
+
+#: plugins/sudoers/sudoers.c:256
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr "kan ikke udføre %s: %s"
+
+#: plugins/sudoers/sudoers.c:305
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr "sudoers angiver at administrator (root) ikke har tilladelse til sudo"
+
+#: plugins/sudoers/sudoers.c:312
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr "du har ikke tilladelse til at bruge tilvalget -C"
+
+#: plugins/sudoers/sudoers.c:402
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr "tidsstempelejer (%s): Ingen sådan bruger"
+
+#: plugins/sudoers/sudoers.c:418
+msgid "no tty"
+msgstr "ingen tty"
+
+#: plugins/sudoers/sudoers.c:419
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr "beklager, du skal bruge en tty for at køre sudo"
+
+#: plugins/sudoers/sudoers.c:462
+msgid "No user or host"
+msgstr "Ingen bruger eller vært"
+
+#: plugins/sudoers/sudoers.c:476 plugins/sudoers/sudoers.c:497
+#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:1452
+#: plugins/sudoers/sudoers.c:1453
+#, c-format
+msgid "%s: command not found"
+msgstr "%s: Kommando ikke fundet"
+
+#: plugins/sudoers/sudoers.c:478 plugins/sudoers/sudoers.c:494
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+"ignorerer »%s« fundet i ».«\n"
+"Brug »sudo ./%s« hvis dette er »%s«, du ønsker at køre."
+
+#: plugins/sudoers/sudoers.c:483
+msgid "validation failure"
+msgstr "valideringsfejl"
+
+#: plugins/sudoers/sudoers.c:493
+msgid "command in current directory"
+msgstr "kommando i aktuel mappe"
+
+#: plugins/sudoers/sudoers.c:505
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr "beklager men du har ikke tilladelse til at bevare miljøet"
+
+#: plugins/sudoers/sudoers.c:890
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr "intern fejl, set_cmnd()-overløb"
+
+#: plugins/sudoers/sudoers.c:935
+#, c-format
+msgid "fixed mode on %s"
+msgstr "fast tilstand på %s"
+
+#: plugins/sudoers/sudoers.c:939
+#, c-format
+msgid "set group on %s"
+msgstr "angiv gruppe på %s"
+
+#: plugins/sudoers/sudoers.c:942
+#, c-format
+msgid "unable to set group on %s"
+msgstr "kan ikke angive gruppe på %s"
+
+#: plugins/sudoers/sudoers.c:945
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr "kan ikke rette tilstand på %s"
+
+#: plugins/sudoers/sudoers.c:958
+#, c-format
+msgid "%s is not a regular file"
+msgstr "%s er ikke en regulær fil"
+
+#: plugins/sudoers/sudoers.c:960
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr "%s er tilstand 0%o, bør være 0%o"
+
+#: plugins/sudoers/sudoers.c:964
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr "%s er ejet af uid %u, bør være %u"
+
+#: plugins/sudoers/sudoers.c:967
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr "%s er eget af gid %u, bør være %u"
+
+#: plugins/sudoers/sudoers.c:1011
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr "kun administrator (root) kan bruge »-c %s«"
+
+#: plugins/sudoers/sudoers.c:1021
+#, c-format
+msgid "unknown login class: %s"
+msgstr "ukendt logindklasse: %s"
+
+#: plugins/sudoers/sudoers.c:1055
+#, c-format
+msgid "unable to resolve host %s"
+msgstr "kan ikke slå vært %s op"
+
+#: plugins/sudoers/sudoers.c:1105 plugins/sudoers/testsudoers.c:342
+#, c-format
+msgid "unknown group: %s"
+msgstr "ukendt gruppe: %s"
+
+#: plugins/sudoers/sudoers.c:1137
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr "Udvidelsesmodulversion %s for sudoerspolitik\n"
+
+#: plugins/sudoers/sudoers.c:1139
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr "Grammatikversion %d for sudoersfil\n"
+
+#: plugins/sudoers/sudoers.c:1143
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+"\n"
+"Sudoers-sti: %s\n"
+
+#: plugins/sudoers/sudoers.c:1146
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr "nsswitch-sti: %s\n"
+
+#: plugins/sudoers/sudoers.c:1148
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr "ldap.conf-sti: %s\n"
+
+#: plugins/sudoers/sudoers.c:1149
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr "ldap.secret-sti: %s\n"
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr "ugyldigt filtertilvalg: %s"
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr "ugyldig maks ventetid: %s"
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr "ugyldig hastighedsfaktor: %s"
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr "%s version %s\n"
+
+#: plugins/sudoers/sudoreplay.c:310
+#, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr "%s/%.2s/%.2s/%.2s/timing: %s"
+
+#: plugins/sudoers/sudoreplay.c:316
+#, c-format
+msgid "%s/%s/timing: %s"
+msgstr "%s/%s/timing: %s"
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr "ugyldig logfil %s"
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr "Genafspiller sudosession: %s"
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr "kan ikke angive tty til rå (raw) tilstand"
+
+#: plugins/sudoers/sudoreplay.c:383
+#, c-format
+msgid "invalid timing file line: %s"
+msgstr "ugyldig timingfillinje: %s"
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr "skriver til standarduddata"
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr "nanosleep: tv_sec %ld, tv_nsec %ld"
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr "tvetydigt udtryk »%s«"
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr "for mange udtryk i parentes, maks %d"
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr "manglende »)« i udtryk"
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr "ukendt søgeterm »%s«"
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr "%s kræver et argument"
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr "ugyldigt regulært udtryk: %s"
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr "kunne ikke fortolke dato »%s«"
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr "mangler »(« i udtryk"
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr "ugyldig kæde »or« (eller)"
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr "ugyldig kæde »!«"
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr "ugyldigt regulært udtryk: %s"
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr "brug: %s [-h] [-d mappe] [-m maks_ventetid] [-s hastighedsfaktor] ID\n"
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr "brug: %s [-h] [-d mappe] -l [søgeudtryk]\n"
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+"%s - genafspil sudosessionslogge\n"
+"\n"
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+"\n"
+"Tilvalg:\n"
+"  -d mappe            angiv mappe for sessionslogge\n"
+"  -f filter           angiv hvilken I/O-type at vise\n"
+"  -h                  vis denne hjælpetekst og afslut\n"
+"  -l [udtryk]         vis tilgængelilge sessions-ID'er som overholder\n"
+"                      udtryk\n"
+"  -m maks_vent        maks antal sekunder at vente mellem hændelser\n"
+"  -s hastighedsfaktor øg eller sænk uddata\n"
+"  -V                  vis versionsinformation og afslut"
+
+#: plugins/sudoers/testsudoers.c:228
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr "intern fejl, init_vars()-overløb"
+
+#: plugins/sudoers/testsudoers.c:304
+msgid "\thost  unmatched"
+msgstr "\thost  matchede ikke"
+
+#: plugins/sudoers/testsudoers.c:307
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+"\n"
+"Kommando tilladt"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+"\n"
+"Kommando nægtet"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+"\n"
+"Kommando ikke matchet"
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr "kan ikke allokere hukommelse"
+
+#: toke.l:786
+msgid "too many levels of includes"
+msgstr "for mange niveauer af includes (inkluderinger)"
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr "fill_args: overløb for mellemlager"
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr "%s grammatikversion %d\n"
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr "du findes ikke i %s-databasen"
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr "tryk retur for at redigere %s: "
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr "skrivefejl"
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr "kan ikke stat midlertidig fil (%s), %s unchanged"
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr "midlertidig fil med nullængde (%s), %s uændret"
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr "redigeringsprogram (%s) fejlede, %s uændret"
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr "%s uændret"
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr "kan ikke genåbne midlertidig fil (%s), %s uændrede."
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr "kan ikke fortolke midlertidig fil (%s), ukendt fejl"
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr "intern fejl, kan ikke finde %s på listen!"
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr "kan ikke angive (uid, gid) af %s til (%d, %d)"
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr "kan ikke ændre tilstand på %s til 0%o"
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr "%s og %s er ikke på det samme filsystem, bruger mv til at omdøbe"
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr "kommando fejlede: »%s %s %s«, %s uændret"
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr "fejl under omdøbing af %s, %s uændret"
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr "Hvad nu? "
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+"Tilvalg er:\n"
+"  r(e)diger sudoersfil igen\n"
+"  afslut(x) uden at gemme ændringer til sudoersfil\n"
+"  afslut(Q) og gem ændringer til sudoersfil (FARLIGT!)\n"
+
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr "kan ikke udføre %s"
+
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr "kan ikke køre %s"
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr "kunne ikke fortolke %s-fil, ukendt fejl"
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr "fortolkningsfejl i %s nær linje %d\n"
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr "fortolkningsfejl i %s\n"
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr "%s: fortolket o.k.\n"
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr "%s: forkert ejer (uid, gid) bør være (%d, %d)\n"
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr "%s: ugyldige rettigheder, bør være tilstand 0%o\n"
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr "%s travl, forsøg igen senere"
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr "angivet redigeringsprogram (%s) findes ikke"
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr "kan ikke stat redigeringsprogram (%s)"
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr "intet redigeringsprogram fundet (sti for redigeringsprogram = %s)"
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr "Fejl: Cyklus i %s_Alias »%s«"
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr "Advarsel: Cyklus i %s_Alias »%s«"
+
+#: plugins/sudoers/visudo.c:990
+#, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr "Fejl: %s_Alias »%s« refereret men ikke defineret"
+
+#: plugins/sudoers/visudo.c:991
+#, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr "Advarsel: %s_Alias »%s« refereret men ikke defineret"
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr "%s: ubrugt %s_Alias %s"
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+"%s - rediger sikkert sudoersfilen\n"
+"\n"
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+"\n"
+"Tilvalg:\n"
+"  -c          kun kontroltilstand\n"
+"  -f sudoers  angiv placering for sudoersfil\n"
+"  -h          vis denne hjælpetekst og afslut\n"
+"  -q          mindre uddybende (stille) beskeder for syntaksfejl\n"
+"  -s          streng syntakskontrol\n"
+"  -V          vis information om version og afslut"
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr "kan ikke starte bsd-godkendelse"
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr "ugyldig godkendelsestype"
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr "kan ikke opsætte godkendelse"
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr "kan ikke læse fwtk-konfiguration"
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr "kan ikke forbinde til godkendelsesserver"
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr "mistede forbindelsen til godkendelseserveren"
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+"godkendelsesserverfejl:\n"
+"%s"
+
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr "%s: Kan ikke fortolke »%s«: %s"
+
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr "%s: Kan ikke fjerne fortolkning af princ (»%s«): %s"
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr "%s: Kan ikke løse ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr "%s: Kan ikke allokere tilvalg: %s"
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr "%s: Kan ikke indhente akkreditiver: %s"
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr "%s: Kan ikke initialisere ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr "%s: Kan ikke gemme cred i ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr "%s: Kan ikke indhente værtshovedstol: %s"
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr "%s: Kan ikke verifiere TGT! Muligt angreb!: %s"
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr "kan ikke initialisere PAM"
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr "valideringsfejl for konto, er din konto låst?"
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr "Konto eller adgangskoder er udløbet, nulstil din adgangskode og forsøg igen"
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr "pam_chauthtok: %s"
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr "Adgangskode udløbet, kontakt din systemadministrator"
+
+#: plugins/sudoers/auth/pam.c:161
+msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator"
+msgstr "Konto udløbet eller PAM-konfiguration mangler et »kontoafsnit« for sudo. Kontakt din systemadministrator"
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr "pam_authenticate: %s"
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr "Adgangskode: "
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr "Adgangskode:"
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr "kan ikke kontakte SecurID-serveren"
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr "kunne ikke initialisere ACE API-biblioteket"
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr "Bruger-ID låst for SecurID-godkendelse"
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr "ugyldigt brugernavnslængde for SecurID"
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr "ugyldigt godkendelseshåndtag for SecurID"
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr "SecurID-kommunikation fejlede"
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr "ukendt SecurID-fejl"
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr "ugyldig adgangskodelængde for SecurID"
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr "kan ikke initialisere SIA-session"
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid "There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option."
+msgstr "Der er ingen godkendelsesmetoder kompileret ind i sudo! Hvis du ønsker at fravælge godkendelse så brug konfigurationstilvalget --disable-authentication."
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+msgid "Invalid authentication methods compiled into sudo!  You may mix standalone and non-standalone authentication."
+msgstr "Ugyldige godkendelsesmetoder kompileret ind i sudo! Du kan blande alenestående og ikkealenestående godkendelse."
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] "%d ukorrekt adgangskodeforsøg"
+msgstr[1] "%d ukorrekte adgangskodeforsøg"
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr "Godkendelsesmetoder:"
diff --git a/plugins/sudoers/po/eu.mo b/plugins/sudoers/po/eu.mo
new file mode 100644 (file)
index 0000000..9d58549
Binary files /dev/null and b/plugins/sudoers/po/eu.mo differ
diff --git a/plugins/sudoers/po/eu.po b/plugins/sudoers/po/eu.po
new file mode 100644 (file)
index 0000000..bda562a
--- /dev/null
@@ -0,0 +1,1678 @@
+# Basque translation of sudoers.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sudo package.
+# Mikel Olasagasti Uranga <mikel@olasagasti.info>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudoers-1.8.2-rc2\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-06-04 18:27-0400\n"
+"PO-Revision-Date: 2011-06-06 19:15+0100\n"
+"Last-Translator: Mikel Olasagasti Uranga <mikel@olasagasti.info>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\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"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr "`%s' alias-a lehendik ere definitua dago"
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr "getaudit: huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr "Ezin izan da auditoretza baldintza finkatu"
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr "getauid-ek huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr "au_open: huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr "au_to_subject: huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr "au_to_exec_args: huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr "au_to_return32: huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr "ezin da auditoretza sarrera gorde"
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr "getauid: huts egin du"
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr "au_to_text: huts egin du"
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr "barkatu, pasahitz bat behar da %s abiarazteko"
+
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:939 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr "ezin da %s ireki"
+
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr "ezin da %s-(e)ra idatzi"
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr "ezin da mkdir %s egin"
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr "barne errorea, expand_prompt() overflow"
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr "%s existitzen da baina ez da direktorio bat (0%o)"
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr "%s-(r)en jabea %u uid-a da, %u uid-a beharko luke"
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr ""
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:925
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr "ezin da stat egin %s-(r)engan"
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr ""
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr ""
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr ""
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr ""
+
+#: plugins/sudoers/check.c:659
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr ""
+
+#: plugins/sudoers/check.c:713 plugins/sudoers/check.c:719
+#, c-format
+msgid "unknown uid: %u"
+msgstr "uid ezezaguna: %u"
+
+#: plugins/sudoers/check.c:716 plugins/sudoers/sudoers.c:736
+#: plugins/sudoers/sudoers.c:802 plugins/sudoers/sudoers.c:803
+#: plugins/sudoers/sudoers.c:1056 plugins/sudoers/sudoers.c:1057
+#: plugins/sudoers/testsudoers.c:200 plugins/sudoers/testsudoers.c:330
+#, c-format
+msgid "unknown user: %s"
+msgstr "erabiltzaile ezezaguna: %s"
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr "root-ek sudo abiarizi lezake"
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:115
+msgid "Insult the user when they enter an incorrect password"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr "Visudo-k EDITOR ingurune aldagaia erabiliko du"
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr ""
+
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:243
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:247
+#, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:307
+msgid "Use faster globbing that is less accurate but does not access the filesystem"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:311
+msgid "The umask specified in sudoers will override the user's, even if it is more permissive"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr "Trinkotu S/E gertaerak zlib erabiliz"
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr "%s: %.*s\n"
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr "`%s' balorea baliogabea da `%s' aukerarentzat"
+
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr "ez da baliorik ezarri `%s'-(r)entzat"
+
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr ""
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr ""
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr ""
+
+#: plugins/sudoers/env.c:694
+#, c-format
+msgid "sorry, you are not allowed to set the following environment variables: %s"
+msgstr ""
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:868 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:91
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: plugins/sudoers/group_plugin.c:103
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:107
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:114
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:119
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:124
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr ""
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr ""
+
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:946
+#, c-format
+msgid "unable to read %s"
+msgstr "ezin da %s irakurri"
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr ""
+
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr "ezin da %s sortu"
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:361
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr ""
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr "sudo_ldap_conf_add_ports: port too large"
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr "baliogabeko uri-a: %s"
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1044
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1539
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1541
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1588
+#, c-format
+msgid "    Order: %s\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1596
+#, c-format
+msgid "    Commands:\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1983
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:2014
+#, c-format
+msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:2245
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr ""
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr ""
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr ""
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr ""
+
+#: plugins/sudoers/logging.c:193
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr ""
+
+#: plugins/sudoers/logging.c:196
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr ""
+
+#: plugins/sudoers/logging.c:295
+msgid "user NOT in sudoers"
+msgstr "erabiltzailea ez dago sudoers-en"
+
+#: plugins/sudoers/logging.c:297
+msgid "user NOT authorized on host"
+msgstr "erabiltzailea ez dago baimendutako ostalarian"
+
+#: plugins/sudoers/logging.c:299
+msgid "command not allowed"
+msgstr "komandua ez dago baimenduta"
+
+#: plugins/sudoers/logging.c:309
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr "%s ez dago sudoers fitxatzegian.  Gertaeraren berri emango da.\n"
+
+#: plugins/sudoers/logging.c:312
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr "%s ez dago baimenduta sudo abiarazteko %s-(e)n.  Gertaeraren berri emango da.\n"
+
+#: plugins/sudoers/logging.c:316
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr "Barkatu, %s erabiltzaileak ez luke sudo abiariazi beharko %s-(e)n.\n"
+
+#: plugins/sudoers/logging.c:319
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr "Barkatu, %s erabiltzaileak ez du '%s%s%s' %s%s%s bezala exekutatzeko baimenik %s-(e)n.\n"
+
+#: plugins/sudoers/logging.c:454
+#, c-format
+msgid "unable to fork"
+msgstr ""
+
+#: plugins/sudoers/logging.c:461 plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to fork: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:511
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:530
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:564
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:774
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr ""
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr ""
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr ""
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr ""
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ": "
+
+#: plugins/sudoers/pwutil.c:244
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:252
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:288 plugins/sudoers/pwutil.c:297
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:511
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:519
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:548 plugins/sudoers/pwutil.c:557
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:249 plugins/sudoers/set_perms.c:476
+#: plugins/sudoers/set_perms.c:710
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:290 plugins/sudoers/set_perms.c:514
+#: plugins/sudoers/set_perms.c:748 plugins/sudoers/set_perms.c:882
+msgid "too many processes"
+msgstr "prozesu gehiegi"
+
+#: plugins/sudoers/set_perms.c:943 plugins/sudoers/set_perms.c:959
+msgid "unable to set runas group vector"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:952
+msgid "unable to get runas group vector"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:217
+msgid "unable to reset group vector"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:223
+msgid "unable to get group vector"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:266
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:279
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:292
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:302
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:206 plugins/sudoers/sudoers.c:241
+#: plugins/sudoers/sudoers.c:876
+msgid "problem with defaults entries"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:210
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:264
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr "ezin da %s exekutatu: %s"
+
+#: plugins/sudoers/sudoers.c:311
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:318
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:407
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr "data-zigiluaren jabea (%s): ez dago horrelako erabiltzailerik"
+
+#: plugins/sudoers/sudoers.c:423
+msgid "no tty"
+msgstr "tty gabe"
+
+#: plugins/sudoers/sudoers.c:424
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr "barkatu, tty bat behar duzu sudo abiarazteko"
+
+#: plugins/sudoers/sudoers.c:470
+msgid "No user or host"
+msgstr "Ez dago erabiltzaile edo ostalaririk"
+
+#: plugins/sudoers/sudoers.c:484 plugins/sudoers/sudoers.c:505
+#: plugins/sudoers/sudoers.c:506 plugins/sudoers/sudoers.c:1413
+#: plugins/sudoers/sudoers.c:1414
+#, c-format
+msgid "%s: command not found"
+msgstr "%s: komandoa ez da aurkitu"
+
+#: plugins/sudoers/sudoers.c:486 plugins/sudoers/sudoers.c:502
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:491
+msgid "validation failure"
+msgstr "balidazio hutsegitea"
+
+#: plugins/sudoers/sudoers.c:501
+msgid "command in current directory"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:513
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:860
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:904
+#, c-format
+msgid "fixed mode on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:908
+#, c-format
+msgid "set group on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:911
+#, c-format
+msgid "unable to set group on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:914
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:927
+#, c-format
+msgid "%s is not a regular file"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:929
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:933
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:936
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:980
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr "soilik root-ek erabili dezake `-c %s'"
+
+#: plugins/sudoers/sudoers.c:990
+#, c-format
+msgid "unknown login class: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1024
+#, c-format
+msgid "unable to resolve host %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1076 plugins/sudoers/testsudoers.c:342
+#, c-format
+msgid "unknown group: %s"
+msgstr "talde ezezaguna: %s"
+
+#: plugins/sudoers/sudoers.c:1108
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1110
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1114
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+"\n"
+"Sudoers-en bidea: %s\n"
+
+#: plugins/sudoers/sudoers.c:1117
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr "nsswitch-en bidea: %s\n"
+
+#: plugins/sudoers/sudoers.c:1119
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr "ldap.conf-en bidea: %s\n"
+
+#: plugins/sudoers/sudoers.c:1120
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr "ldap.secret-en bidea: %s\n"
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr "%s bertsioa %s\n"
+
+#: plugins/sudoers/sudoreplay.c:310
+#, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:316
+#, c-format
+msgid "%s/%s/timing: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr "baliogabeko %s log fitxategia"
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:383
+#, c-format
+msgid "invalid timing file line: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr "baliogabeko regex-a: %s"
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:228
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:304
+msgid "\thost  unmatched"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:307
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr ""
+
+#: toke.l:786
+msgid "too many levels of includes"
+msgstr "include maila gehiegi"
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr "fill_args: buffer overflow"
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr "ez zara %s datubasean existitzen"
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr "sakatu intro %s editatzeko:"
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr "idazketa errorea"
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr "%s aldatu gabea"
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr ""
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr "Eta orain?"
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr "ezin da %s exekutatu"
+
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr "ezin da %s abiarazi"
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr "%s okupatuta, saiatu berriz beranduago"
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:990
+#, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:991
+#, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr ""
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr ""
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr "ezin da PAM hasieratu"
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr "pam_chauthtok: %s"
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:161
+msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr "pam_authenticate: %s"
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr "Pasahitza: "
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr "Pasahitza:"
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr ""
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr ""
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid "There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option."
+msgstr ""
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+msgid "Invalid authentication methods compiled into sudo!  You may mix standalone and non-standalone authentication."
+msgstr ""
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] "pasahitz sartze saiakera oker %d"
+msgstr[1] "%d pasahitz sartze saiakera oker"
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr "Autentikazio metodoak:"
diff --git a/plugins/sudoers/po/fi.mo b/plugins/sudoers/po/fi.mo
new file mode 100644 (file)
index 0000000..5033c19
Binary files /dev/null and b/plugins/sudoers/po/fi.mo differ
diff --git a/plugins/sudoers/po/fi.po b/plugins/sudoers/po/fi.po
new file mode 100644 (file)
index 0000000..c4f36f1
--- /dev/null
@@ -0,0 +1,1763 @@
+# Finnish messages for sudoers.
+# This file is put in the public domain.
+# Copyright © 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sudo package.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudoers 1.8.2-rc9\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-05 13:34-0400\n"
+"PO-Revision-Date: 2011-08-08 14:25+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\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"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr "Alias ”%s” on jo määritelty"
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr "getaudit: epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr "Ei voitu määritellä audit-ehtoa"
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr "getauid epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr "au_open: epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr "au_to_subject: epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr "au_to_exec_args: epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr "au_to_return32: epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr "ei kyetä suorittamaan commit-toimintoa audit-tietueelle"
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr "getauid: epäonnistui"
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr "au_to_text: epäonnistui"
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr "kohteen %s suorittamiseen vaaditaan salasana"
+
+#  Avaamisen kohde voi olla timestamp file, sudoers file tai pathbuf
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:970 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr "ei kyetä avaamaan kohdetta %s"
+
+#  Kirjoittamisen kohde voi olla timestamp file tai pathbuf
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr "ei kyetä kirjoittamaan kohteeseen %s"
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr "ei kyetä suorittamaan käskyä mkdir %s"
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr "sisäinen virhe, expand_prompt()-ylivuoto"
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr "aikaleimapolku on liian pitkä: %s"
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr "%s on olemassa, mutta ei ole hakemisto (0%o)"
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr "%s on uid %u:n omistama, pitäisi olla uid %u:n omistama"
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr "%s on kirjoitettava ei-omistajalle (0%o), pitäisi olla tila 0700"
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:956
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr "ei kyetä kutsumaan funktiota stat %s"
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr "%s on olemassa, mutta ei ole tavallinen tiedosto (0%o)"
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr "%s on kirjoitettava ei-omistajalle (0%o), pitäisi olla tila 0600"
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr "aikaleima liian kaukana tulevaisuudessa: %20.20s"
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr "ei kyetä poistamaan %s (%s), nollataan aika"
+
+#: plugins/sudoers/check.c:660
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr "ei kyetä nollaamaan %s ajaksi"
+
+#: plugins/sudoers/check.c:714 plugins/sudoers/check.c:720
+#, c-format
+msgid "unknown uid: %u"
+msgstr "tuntematon uid-käyttäjätunniste: %u"
+
+#: plugins/sudoers/check.c:717 plugins/sudoers/sudoers.c:747
+#: plugins/sudoers/sudoers.c:813 plugins/sudoers/sudoers.c:814
+#: plugins/sudoers/sudoers.c:1087 plugins/sudoers/testsudoers.c:200
+#: plugins/sudoers/testsudoers.c:330
+#, c-format
+msgid "unknown user: %s"
+msgstr "tuntematon käyttäjä: %s"
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr "Syslog-apuneuvo, jos syslog-lokia käytetään kirjautumista varten: %s"
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr "Käytettävä syslog-prioriteetti, kun käyttäjä todennetaan onnistuneesti: %s"
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr "Käytettävä syslog-prioriteetti, kun käyttäjän todennus epäonnistui: %s"
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr "Laita OPT-kehote omalle rivilleen"
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr "Ohita ’.’ $PATH-asetuksessa"
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr "Lähetä aina sähkopostia, kun sudo suoritetaan"
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr "Lähetä sähköpostia, jos käyttäjän todennus epäonnistuu"
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr "Lähetä sähköpostia, jos käyttäjä ei ole sudoers-määrittelyssä"
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr "Lähetä sähköpostia, jos käyttäjä ei ole tällä tietokoneella sudoers-määrittelyssä"
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr "Lähetä sähköpostia, jos käyttäjän ei sallita suorittaa komentoa"
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr "Käytä erillistä aikaleimaa jokaiselle käyttäjä/tty -yhdistelmälle"
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr "Saarnaa ensimmäistä kertaa sudo-ohjelmaa käyttävälle"
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr "Tiedosto, joka sisältää sudo-saarnan: %s"
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr "Vaadi käyttäjien todennus oletuksena"
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr "Root voi suorittaa sudo-ohjelman"
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr "Kirjaa tietokonenimi (ei-syslog)lokitiedostoon"
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr "Kirjaa vuosi (ei-syslog)lokitiedostoon"
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr "Jos sudo-ohjelmaa kutsutaan ilman argumentteja, käynnistä käyttöjärjestelmäkuori"
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr "Aseta $HOME-muuttujaksi kohdekäyttäjä kun käyttöjärjestelmäkuori käynnistetään valitsimella -s"
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr "Aseta $HOME-muuttujaksi aina kohdekäyttäjän kotihakemisto"
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr "Salli jotain tietojenkeräystä hyödyllisten virheilmoitusten tarjoamiseksi"
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr "Vaadi täysin rakennettu tietokonenimi suoders-tiedostossa"
+
+#: plugins/sudoers/def_data.c:115
+msgid "Insult the user when they enter an incorrect password"
+msgstr "Solvaa käyttäjiä, kun he kirjoittavat väärän salasanan"
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr "Salli käyttäjien suorittaa sudo-ohjelma vain jos heillä on tty"
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr "Visudo noudattaa EDITOR-ympäristömuuttujaa"
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr "Kysy root-käyttäjän salasana, ei käyttäjän"
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr "Kysy runas_default-käyttäjän salasana, ei käyttäjän"
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr "Kysy kohdekäyttäjän salasana, ei käyttäjän"
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr "Käytä oletuksia kohdekäyttäjän kirjautumisluokassa, jos siinä on yhtään"
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr "Aseta LOGNAME- ja USER-ympäristömuuttujat"
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr "Aseta vain voimassa oleva uid-käyttäjätunniste kohdekäyttäjälle, ei oikeaa uid-tunnistetta"
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr "Älä alusta ryhmävektoria kohdekäyttäjän vastaavaan arvoon"
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr "Pituus, jossa pitkät lokitiedostorivit jaetaan seuraavalle riville (0 ei jaeta): %d"
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr "Todennusaikaleiman aikavalvonta: %.1f minuuttia"
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr "Salasanakehotteen aikavalvonta: %.1f minuuttia"
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr "Salasanayritysten lukumäärä: %d"
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr "Käytettävä umask-määrittely tai 0777 käytettäväksi käyttäjän umask-määrittelyksi: 0%o"
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr "Polku lokitiedostoon: %s"
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr "Polku sähköpostiohjelmaan: %s"
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr "Sähköpostiohjelman liput: %s"
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr "Osoite, johon sähköposti lähetetään: %s"
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr "Osoite, josta sähköposti lähetetään: %s"
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr "Sähköpostiviestin Aihe-rivi: %s"
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr "Virheellinen salasanaviesti: %s"
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr "Polku todennusaikaleimahakemistoon: %s"
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr "Todennusaikaleimahakemiston omistaja: %s"
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr "Käyttäjät tässä ryhmässä on vapautettu salasana- ja PATH-vaatimuksista: %s"
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr "Oletussalasanakehote: %s"
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr "Jos asetettu, salasankehote korvaa järjestelmäkehotteen kaikissa tapauksissa."
+
+#  Tämä on tekemisessä runas_default -määrittelyn kanssa
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr "Oletuskäyttäjä suorittaa komennot käyttäjänä: %s"
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr "Arvo, jolla korvataan käyttäjän $PATH-asetus: %s"
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr "Visudo-editorin käyttämä polku: %s"
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr "Kun vaaditaan salasana ’list’-näennäiskomennolle: %s"
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr "Kun vaaditaan salasana ’verify’-näennäiskomennolle: %s"
+
+#: plugins/sudoers/def_data.c:243
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr "Esilataa vale-exec-funktiot, jotka sisältyvät kohteeseen ’noexec_file’"
+
+#: plugins/sudoers/def_data.c:247
+#, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr "Tiedosto, joka sisältää vale-exec-funktioita: %s"
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr "Jos LDAP-hakemisto on ylhäällä, ohitammeko paikallisen sudoers-tiedoston"
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr "Tiedostokuvaajat >= %d suljetaan ennen komennon suoritusta"
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr "Jos asetettu, käyttäjä voi korvata ’closefrom’-arvon valitsimella -C"
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr "Salli käyttäjien asettaa mielivaltaisia ympäristömuuttujia"
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr "Nollaa ympäristö muuttujien oletusjoukoksi"
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr "Ympäristömuuttujat, joille tehdään järkevyystarkistus:"
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr "Poistettavat ympäristömuuttujat:"
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr "Säilytettävät ympäristömuuttujat:"
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr "Uudessa turva-asiayhteydessä käytettävä SELinux-rooli: %s"
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr "Uudessa turva-asiayhteydessä käytettävä SELinux-tyyppi: %s"
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr "Polku sudo-kohtaiseen ympäristötiedostoon: %s"
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr "Locale-asetus, jota käytetään sudoers-jäsentämisessä: %s"
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr "Salli sudo-ohjelman kysyä salasana vieläpä jos se olisi näkyvä"
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr "Tarjoa visuaalista palautetta salasanakehotteelta silloin kun on käyttäjäsyöte"
+
+#: plugins/sudoers/def_data.c:307
+msgid "Use faster globbing that is less accurate but does not access the filesystem"
+msgstr "Käyttää nopeampaa jokerimerkkien korvausta, joka on epätarkempi, mutta ei lue tiedostojärjestelmää"
+
+#: plugins/sudoers/def_data.c:311
+msgid "The umask specified in sudoers will override the user's, even if it is more permissive"
+msgstr "Sudoers umask korvaa käyttäjän umask-määrittelyn, vieläpä jos se on sallivampi"
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr "Kirjaa lokiin käyttäjän syöte suoritettavalle komennolle"
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr "Kirjaa lokiin suoritettavan komennon tuloste"
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr "Tiivistä siirräntälokit käyttäen zlib-ohjelmaa"
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr "Suorita aina komennot näennäis-tty:ssä"
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr "Lisäosa ei-Unix-ryhmätuelle"
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr "Hakemisto, johon tallennetaan syöte-/tulostelokit"
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr "Tiedosto, johon tallennetaan syöte-/tulosteloki"
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr "Lisää rivi utmp-/utmpx-tiedostoon, kun varataan pty"
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr "Aseta käyttäjäksi utmp-tiedostoon suorittava käyttäjä, ei kutsuva käyttäjä"
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+"Käytettävissä olevat valitsimet sudoers ’’Defaults’’ -rivillä:\n"
+"\n"
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr "%s: %.*s\n"
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr "tuntematon oletusrivi ”%s”"
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr "arvo ”%s” on virheellinen valitsimelle ”%s”"
+
+#  parametrinä on variable
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr "arvoa ei ole määritelty muuttujalle ”%s”"
+
+#  Parametri on muuttuja
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr "muuttujan ”%s” arvojen on alettava merkillä ’/’"
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr "valitsin ”%s” ei ota arvoa"
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr "sisäinen virhe, sudo_setenv()-ylivuoto"
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr "sudo_putenv: rikkoutunut envp, pituus ei täsmää"
+
+#: plugins/sudoers/env.c:698
+#, c-format
+msgid "sorry, you are not allowed to set the following environment variables: %s"
+msgstr "seuraavia ympäristömuuttujia ei ole lupa asettaa: %s"
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:899 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ">>> %s: %s lähellä riviä %d <<<"
+
+#: plugins/sudoers/group_plugin.c:90
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: plugins/sudoers/group_plugin.c:102
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s-omistajan on oltava uid %d"
+
+#: plugins/sudoers/group_plugin.c:106
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr "%s on vain omistajan kirjoitettava"
+
+#: plugins/sudoers/group_plugin.c:113
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "ei kyetä kutsumaan funktiota dlopen %s: %s"
+
+#  parametrina on path
+#: plugins/sudoers/group_plugin.c:118
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr "ei kyetä löytämään symbolia ”group_plugin” polusta %s"
+
+#: plugins/sudoers/group_plugin.c:123
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr "%s: yhteensopimaton ryhmälisäosan major-versio %d, odotettiin %d"
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr "Paikallinen ip-osoite ja verkkopeiteparit:\n"
+
+#  Parametrinä on sudoers-tiedosto tai pathbuf
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:977
+#, c-format
+msgid "unable to read %s"
+msgstr "ei kyetä lukemaan kohdetta %s"
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr "virheellinen sarjanumero %s"
+
+#  Parametrina on pathbuf
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr "ei kyetä luomaan hakemistopolkua %s"
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:356
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr "ei kyetä asettamaan locale-asetukseksi ”%s”, käytetään ”C”"
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr "sudo_ldap_conf_add_ports: portti on liian suuri"
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr "sudo_ldap_conf_add_ports: hostbuf-puskuritila loppui"
+
+#  URL on verkko-osoite, loogisesti URI on verkkoresurssi(osoite)
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr "tukematon LDAP-verkkoresurssin tunnustyyppi: %s"
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr "virheellinen verkkoresurssin tunnus: %s"
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr "ei kyetä sekottamaan ldap:n ja ldap-kohteiden verkkoresurssitunnuksia"
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr "ei kyetä sekoittamaan ldap- ja starttl-kohteita"
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr "sudo_ldap_parse_uri: hostbuf-puskuritila loppui"
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr "ei kyetä alustamaan SSL-varmenne- ja -avaintietokantaa: %s"
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr "ei kyetä saamaan GMT-aikaa"
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr "ei kyetä muotoilemaan aikaleimaa"
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr "ei kyetä rakentamaan aikasuodatinta"
+
+#: plugins/sudoers/ldap.c:1047
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr "sudo_ldap_build_pass1-varaustäsmäämättömyys"
+
+#: plugins/sudoers/ldap.c:1542
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+"\n"
+"LDAP-rooli: %s\n"
+
+#: plugins/sudoers/ldap.c:1544
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+"\n"
+"LDAP-rooli: TUNTEMATON\n"
+
+#: plugins/sudoers/ldap.c:1591
+#, c-format
+msgid "    Order: %s\n"
+msgstr "    Järjestys: %s\n"
+
+#: plugins/sudoers/ldap.c:1599
+#, c-format
+msgid "    Commands:\n"
+msgstr "    Komennot:\n"
+
+#: plugins/sudoers/ldap.c:1986
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr "ei kyetä alustamaan kohdetta LDAP: %s"
+
+#: plugins/sudoers/ldap.c:2017
+#, c-format
+msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"
+msgstr "start_tls määritelty mutta LDAP-kirjastot ei tue funktiota ldap_start_tls_s() tai funktiota ldap_start_tls_s_np()"
+
+#: plugins/sudoers/ldap.c:2248
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr "virheellinen sudoOrder-attribuutti: %s"
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr "ei kyetä avaamaan audit-järjestelmää"
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr "sisäinen virhe, linux_audit_command()-ylivuoto"
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr "ei kyetä lähettämään audit-viestiä"
+
+#: plugins/sudoers/logging.c:192
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr "ei kyetä avaamaan lokitiedostoa: %s: %s"
+
+#: plugins/sudoers/logging.c:195
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr "ei kyetä lukitsemaan lokitiedostoa: %s: %s"
+
+#: plugins/sudoers/logging.c:249
+msgid "user NOT in sudoers"
+msgstr "käyttäjä EI ole sudoers-tiedostossa"
+
+#: plugins/sudoers/logging.c:251
+msgid "user NOT authorized on host"
+msgstr "käyttäjä ei ole varmennettu tietokoneella"
+
+#: plugins/sudoers/logging.c:253
+msgid "command not allowed"
+msgstr "komento ei ole sallittu"
+
+#: plugins/sudoers/logging.c:263
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr "käyttäjä %s ei ole sudoers-tiedostossa.  Tästä tapahtumasta ilmoitetaan.\n"
+
+#: plugins/sudoers/logging.c:266
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr "käyttäjä %s ei saa suorittaa komentoa sudo tietokoneella %s.  Tästä tapahtumasta ilmoitetaan.\n"
+
+#: plugins/sudoers/logging.c:270
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr "Käyttäjä %s ei voi suorittaa komentoa sudo tietokoneella %s.\n"
+
+#: plugins/sudoers/logging.c:273
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr "Käyttäjän %s ei sallita suorittaa ’%s%s%s’ käyttäjänä %s%s%s tietokoneella %s.\n"
+
+#: plugins/sudoers/logging.c:408
+#, c-format
+msgid "unable to fork"
+msgstr "ei kyetä kutsumaan fork-funktiota"
+
+#: plugins/sudoers/logging.c:415 plugins/sudoers/logging.c:472
+#, c-format
+msgid "unable to fork: %m"
+msgstr "ei kyetä kutsumaan fork-funktiota: %m"
+
+#: plugins/sudoers/logging.c:465
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr "ei kyetä avaamaan putkea: %m"
+
+#: plugins/sudoers/logging.c:484
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr "ei kyetä kutsumaan funktiota dup vakiosyötteellä: %m"
+
+#: plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr "ei kyetä suorittamaan %s: %m"
+
+#: plugins/sudoers/logging.c:728
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr "sisäinen virhe: riittämättömästi tilaa lokiriville"
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d"
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+"\n"
+"Sudoers-rivi:\n"
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr "    SuoritaKäyttäjänä: "
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr "    SuoritaRyhmänä: "
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+"    Komennot:\n"
+"\t"
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ": "
+
+#: plugins/sudoers/pwutil.c:251
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr "ei kyetä laittamaan välimuistiin uid %u (%s) -käyttäjää, on jo siellä"
+
+#: plugins/sudoers/pwutil.c:259
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr "ei kyetä laittamaan välimuistiin uid %u -käyttäjää, on jo siellä"
+
+#: plugins/sudoers/pwutil.c:295 plugins/sudoers/pwutil.c:304
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr "ei kyetä laittamaan välimuistiin käyttäjää %s, on jo siellä"
+
+#: plugins/sudoers/pwutil.c:607
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr "ei kyetä laittamaan välimuistiin gid %u (%s) -ryhmää, on jo siellä"
+
+#: plugins/sudoers/pwutil.c:615
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr "ei kyetä laittamaan välimuistiin gid %u -ryhmää, on jo siellä"
+
+#: plugins/sudoers/pwutil.c:644 plugins/sudoers/pwutil.c:653
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr "ei kyetä laittamaan välimuistiin ryhmää %s, on jo siellä"
+
+#: plugins/sudoers/set_perms.c:109 plugins/sudoers/set_perms.c:355
+#: plugins/sudoers/set_perms.c:587 plugins/sudoers/set_perms.c:821
+msgid "perm stack overflow"
+msgstr "käyttöoikeuspinoylivuoto"
+
+#: plugins/sudoers/set_perms.c:117 plugins/sudoers/set_perms.c:363
+#: plugins/sudoers/set_perms.c:595 plugins/sudoers/set_perms.c:829
+msgid "perm stack underflow"
+msgstr "käyttöoikeuspinovajaus"
+
+#: plugins/sudoers/set_perms.c:223 plugins/sudoers/set_perms.c:455
+#: plugins/sudoers/set_perms.c:692
+msgid "unable to change to runas gid"
+msgstr "ei kyetä vaihtamaan runas gid -tunnisteeksi"
+
+#: plugins/sudoers/set_perms.c:231 plugins/sudoers/set_perms.c:462
+#: plugins/sudoers/set_perms.c:699
+msgid "unable to change to runas uid"
+msgstr "ei kyetä vaihtamaan runas gid -tunnisteeksi"
+
+#: plugins/sudoers/set_perms.c:245 plugins/sudoers/set_perms.c:475
+#: plugins/sudoers/set_perms.c:712
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr "ei kyetä vaihtamaan sudoers gid-tunnisteeksi"
+
+#: plugins/sudoers/set_perms.c:286 plugins/sudoers/set_perms.c:513
+#: plugins/sudoers/set_perms.c:750 plugins/sudoers/set_perms.c:890
+msgid "too many processes"
+msgstr "liian monta prosessia"
+
+#: plugins/sudoers/set_perms.c:952
+msgid "unable to set runas group vector"
+msgstr "ei kyetä asettaan runas-ryhmävektoria"
+
+#: plugins/sudoers/sudo_nss.c:238
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr "Täsmäävät Defaults-rivit kohteelle %s tällä tietokoneella:\n"
+
+#: plugins/sudoers/sudo_nss.c:251
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr "Runas- ja Command-kohtaiset oletukset kohteelle %s:\n"
+
+#: plugins/sudoers/sudo_nss.c:264
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr "Käyttäjä %s voi suorittaa seuraavat komennot tällä tietokoneella:\n"
+
+#: plugins/sudoers/sudo_nss.c:274
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr "Käyttäjä %s ei saa suorittaa komentoa sudo tietokoneella %s.\n"
+
+#: plugins/sudoers/sudoers.c:198 plugins/sudoers/sudoers.c:233
+#: plugins/sudoers/sudoers.c:907
+msgid "problem with defaults entries"
+msgstr "oletusrivien pulma"
+
+#: plugins/sudoers/sudoers.c:202
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr "ei löytynyt kelvollisia sudoers-lähteitä, poistutaan"
+
+#: plugins/sudoers/sudoers.c:256
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr "ei kyetä suorittamaan komentoa %s: %s"
+
+#: plugins/sudoers/sudoers.c:305
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr "sudoers määrittelee, että root ei saa suorittaa sudo-komentoa"
+
+#: plugins/sudoers/sudoers.c:312
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr "ei käyttöoikeuksia valitsimelle -C"
+
+#: plugins/sudoers/sudoers.c:402
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr "aikaleimaomistaja (%s): Tuntematon käyttäjä"
+
+#: plugins/sudoers/sudoers.c:418
+msgid "no tty"
+msgstr "ei tty:tä"
+
+#: plugins/sudoers/sudoers.c:419
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr "sudo-komennon suorittamiseksi on oltava tty"
+
+#: plugins/sudoers/sudoers.c:462
+msgid "No user or host"
+msgstr "Ei käyttäjä eikä tietokone"
+
+#: plugins/sudoers/sudoers.c:476 plugins/sudoers/sudoers.c:497
+#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:1452
+#: plugins/sudoers/sudoers.c:1453
+#, c-format
+msgid "%s: command not found"
+msgstr "%s: komentoa ei löytynyt"
+
+#: plugins/sudoers/sudoers.c:478 plugins/sudoers/sudoers.c:494
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+"ohitetaan komento ”%s”, joka löytyi kohteesta ’.’\n"
+"Käytä ”sudo ./%s”, jos tämä on ”%s”-komento, joka halutaan suorittaa."
+
+#: plugins/sudoers/sudoers.c:483
+msgid "validation failure"
+msgstr "kelpuutushäiriö"
+
+#: plugins/sudoers/sudoers.c:493
+msgid "command in current directory"
+msgstr "komento nykyisessä hakemistossa"
+
+#: plugins/sudoers/sudoers.c:505
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr "ympäristöä ei ole lupa säilyttää"
+
+#: plugins/sudoers/sudoers.c:890
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr "sisäinen virhe, set_cmnd()-ylivuoto"
+
+#  Parametri on sudoers file
+#: plugins/sudoers/sudoers.c:935
+#, c-format
+msgid "fixed mode on %s"
+msgstr "korjattu tila tiedostossa %s"
+
+#  Parametri on suoders file
+#: plugins/sudoers/sudoers.c:939
+#, c-format
+msgid "set group on %s"
+msgstr "aseta ryhmä tiedostossa %s"
+
+#  Parametri on sudoers file
+#: plugins/sudoers/sudoers.c:942
+#, c-format
+msgid "unable to set group on %s"
+msgstr "ei kyetä asettamaan ryhmää tiedostossa %s"
+
+#: plugins/sudoers/sudoers.c:945
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr "ei kyetä korjaamaan tilaa tiedostossa %s"
+
+#: plugins/sudoers/sudoers.c:958
+#, c-format
+msgid "%s is not a regular file"
+msgstr "%s ei ole tavallinen tiedosto"
+
+#: plugins/sudoers/sudoers.c:960
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr "%s on tila 0%o, pitäisi olla 0%o"
+
+#: plugins/sudoers/sudoers.c:964
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr "%s on uid %u -käyttäjän omistama, pitäisi olla %u"
+
+#: plugins/sudoers/sudoers.c:967
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr "%s on gid %u -ryhmän omistama, pitäisi olla %u"
+
+#: plugins/sudoers/sudoers.c:1011
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr "vain root-käyttäjä voi käyttää valitsinta ”-c %s”"
+
+#: plugins/sudoers/sudoers.c:1021
+#, c-format
+msgid "unknown login class: %s"
+msgstr "tuntematon kirjautumisluokka: %s"
+
+#: plugins/sudoers/sudoers.c:1055
+#, c-format
+msgid "unable to resolve host %s"
+msgstr "ei kyetä ratkaisemaan tietokonetta %s"
+
+#: plugins/sudoers/sudoers.c:1105 plugins/sudoers/testsudoers.c:342
+#, c-format
+msgid "unknown group: %s"
+msgstr "tuntematon ryhmä: %s"
+
+#: plugins/sudoers/sudoers.c:1137
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr "Sudoers-menettelytapalisäosaversio %s\n"
+
+#: plugins/sudoers/sudoers.c:1139
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr "Sudoers-tiedostokielioppiversio %d\n"
+
+#: plugins/sudoers/sudoers.c:1143
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+"\n"
+"Sudoers-polku: %s\n"
+
+#: plugins/sudoers/sudoers.c:1146
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr "nsswitch-polku: %s\n"
+
+#: plugins/sudoers/sudoers.c:1148
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr "ldap.conf-polku: %s\n"
+
+#: plugins/sudoers/sudoers.c:1149
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr "ldap.secret-polku: %s\n"
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr "virheellinen suodatinvalitsin: %s"
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr "virheellinen enimmäisodotusaika: %s"
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr "virheellinen nopeustekijä: %s"
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr "%s versio %s\n"
+
+#: plugins/sudoers/sudoreplay.c:310
+#, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr "%s/%.2s/%.2s/%.2s/ajoitus: %s"
+
+#: plugins/sudoers/sudoreplay.c:316
+#, c-format
+msgid "%s/%s/timing: %s"
+msgstr "%s/%s/ajoitus: %s"
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr "virheellinen lokitiedosto %s"
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr "Toistetaan sudo-istunto: %s"
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr "ei kyetä asettamaa tty:ta raakatilaan"
+
+#: plugins/sudoers/sudoreplay.c:383
+#, c-format
+msgid "invalid timing file line: %s"
+msgstr "virheellinen ajoitustiedostorivi: %s"
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr "kirjoitetaan vakiotulosteeseen"
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr "nanosleep: tv_sec %ld, tv_nsec %ld"
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr "monimerkityksellinen lauseke ”%s”"
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr "liian monta sulkumerkillistä lauseketta, enintään %d"
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr "täsmäämätön ’)’ lausekkeessa"
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr "tuntematon hakutermi ”%s”"
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr "%s vaatii argumentin"
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr "virheellinen säännöllinen lauseke: %s"
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr "ei voitu jäsentää päivämäärää ”%s”"
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr "täsmäämätön ’(’ lausekkeessa"
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr "virheellinen jäljessä oleva ”or”"
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr "virheellinen jäljessä oleva ”!”"
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr "virheellinen säännöllinen lauseke: %s"
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr "käyttö: %s [-h] [-d hakemisto] [-m enimmäisodotusaika] [-s nopeustekijä] ID-tunniste\n"
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr "käyttö: %s [-h] [-d hakemisto] -l [hakulauseke]\n"
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+"%s - toista sudo-istuntolokit\n"
+"\n"
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+"\n"
+"Valitsimet:\n"
+"  -d hakemisto     määrittele istuntolokien hakemisto\n"
+"  -f suodatin      määrittele, mitä siirräntätyyppiä näytetään\n"
+"  -h               näytä opasteviesti ja poistu\n"
+"  -l [lauseke]     luettele käytettävissä oleva istuntotunnisteet, jotka täsmäävät lausekkeeseen\n"
+"  -m maksimisodotusaika tapahtumien välien enimmäisodotusaika sekunteina\n"
+"  -s nopeustekijä  nopeuta tai hidasta tulostusta\n"
+"  -V               näytä versiotiedot ja poistu"
+
+#: plugins/sudoers/testsudoers.c:228
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr "sisäinen virhe, init_vars()-ylivuoto"
+
+#: plugins/sudoers/testsudoers.c:304
+msgid "\thost  unmatched"
+msgstr "\ttietokone täsmäämätön"
+
+#: plugins/sudoers/testsudoers.c:307
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+"\n"
+"Komento sallittu"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+"\n"
+"Komento kielletty"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+"\n"
+"Täsmäämätön komento"
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr "ei kyetä varaamaan muistia"
+
+#: toke.l:786
+msgid "too many levels of includes"
+msgstr "liian monta include-tasoa"
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr "fill_args: puskuriylivuoto"
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr "%s kielioppiversio %d\n"
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr "ei ole olemassa %s-tietokannassa"
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr "muokkaa %s painamalla enter-painiketta: "
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr "kirjoitusvirhe"
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr "ei kyetä kutsumaan stat-funktiota tilapäiselle tiedostolle (%s), %s ennallaan"
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr "nollapituinen tilapäinen tiedosto (%s), %s ennallaan"
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr "editori (%s) epäonnistui, %s ennallaan"
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr "%s ennallaan"
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr "ei kyetä avaamaan uudelleen tilapäistä tiedostoa (%s), %s ennallaan."
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr "ei kyetä jäsentämään tilapäistä tiedostoa (%s), tuntematon virhe"
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr "sisäinen virhe, ei kyetä löytämään %s luettelosta!"
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr "ei kyetä asettamaan kohdetta %s (uid, gid) arvoihin (%d, %d)"
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr "ei kyetä muuttamaan %s-tilaa arvoon 0%o"
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr "%s ja %s eivät ole samassa tiedostojärjestelmässä, käytetään komentoa mv uudelleennimeämiseen"
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr "komento epäonnistui: ’%s %s %s’, %s ennallaan"
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr "virhe nimettäessä %s uudelleen, %s ennallaan"
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr "Mitä nyt?"
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+"Valitsimia ovat:\n"
+"  (e) muokkaa sudoers-tiedostoa uudelleen\n"
+"  (x) poistu tallentamatta sudoers-tiedoston muutoksia\n"
+"  (Q) poistu ja tallenna muutokset sudoers-tiedostoon (VAARA!)\n"
+
+#  Parametri on path, mutta saattaa sisältää suoritettavan ohjelman
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr "ei kyetä suorittamaan kohdetta %s"
+
+#  Parametri on path, mutta saattaa sisältää suoritettavan ohjelman
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr "ei kyetä suorittamaan kohdetta %s"
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr "tiedoston %s jäsentäminen epäonnistui, tuntematon virhe"
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d\n"
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr "jäsentämisvirhe tiedostossa %s\n"
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr "%s: jäsentäminen valmis\n"
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr "%s: väärä omistaja (uid, gid), pitäisi olla (%d, %d)\n"
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr "%s: väärät käyttöoikeudet, pitäisi olla tila 0%o\n"
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr "%s varattu, yritä myöhemmin uudelleen"
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr "määritelty editori (%s) ei ole olemassa"
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr "ei kyetä kutsumaan funktiota stat editori (%s)"
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr "editoria ei löytynyt (editoripolku = %s)"
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr "Virhe: jakso kohteessa %s_Alias ”%s”"
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr "Varoitus: jakso kohteessa %s_Alias ”%s”"
+
+#: plugins/sudoers/visudo.c:990
+#, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr "Virhe: %s_Alias ”%s” uudelleenviitattu, mutta ei määritelty"
+
+#: plugins/sudoers/visudo.c:991
+#, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr "Varoitus: %s_Alias ”%s” uudelleenviitattu, mutta ei määritelty"
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr "%s: käyttämätön %s_Alias %s"
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+"%s - muokkaa sudoers-tiedostoa turvallisesti\n"
+"\n"
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+"\n"
+"Valitsimet:\n"
+"  -c          vain tarkistus -tila\n"
+"  -f sudoers  määrittele sudoers-tiedoston sijainti\n"
+"  -h          näytä opasteteksti ja poistu\n"
+"  -q          vähemmän laveat (hiljaiset) syntaksivirheviestit\n"
+"  -s          tiukka syntaksitarkistus\n"
+"  -V          näytä versiotiedot ja poistu"
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr "ei kyetä aloittamaan bsd-todentamista"
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr "virheellinen todennustyyppi"
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr "ei kyetä asettamaan todentamista"
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr "ei kyetä lukemaan fwtk config -asetusta"
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr "ei kyetä yhdistämään todentamispalvelimelle"
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr "kadotettiin yhteys todentamispalvelimelle"
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+"todentamispalvelinvirhe:\n"
+"%s"
+
+#  Ensimmäinen parametri on auth name
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr "%s: ei kyetä jäsentämään todentamisnimeä ’%s’: %s"
+
+#  Sana princ viittaa krb5_principal -määrittelyyn
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr "%s: ei kyetä poistamaan valtuutetun (’%s’) jäsentämistä: %s"
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr "%s:  ei kyetä ratkaisemaan ccache-välimuistia: %s"
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr "%s: ei kyetä varaamaan valitsimia: %s"
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr "%s: ei kyetä hakemaan valtuustietoja: %s"
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr "%s: ei kyetä alustamaan ccache-välimuistia: %s"
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr "%s: ei kyetä tallentamaan valtuustietoja ccache-välimuistiin: %s"
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr "%s: ei kyetä hakemaan tietokoneen valtuutettua: %s"
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr "%s: Ei voida todentaa TGT-lippua! Mahdollinen hyökkäys!: %s"
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr "ei kyetä alustamaan PAM:ia"
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr "tilikelpuutushäiriö, onko tilisi lukittu?"
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr "Tili tai salasana on vanhentunut, nollaa salasanasi tai yritä uudelleen"
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr "pam_chauthtok: %s"
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr "Salasana vanhentunut, ota yhteyttä järjestelmän ylläpitäjään"
+
+#: plugins/sudoers/auth/pam.c:161
+msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator"
+msgstr "Tili vanhentunut tai PAM-asetuksista puuttuu ”account”-lohko sudo-komennolle, ota yhteyttä järjestelmän ylläpitäjään"
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr "pam_authenticate: %s"
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr "Salasana: "
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr "Salasana:"
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr "ei kyetä ottamaan yhteyttä SecurID-palvelimeen"
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr "epäonnistui ACE API -kirjaston alustamisessa"
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr "Käyttäjätunniste lukittu SecurID-todennukselle"
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr "virheellinen käyttäjänimipituus kohteelle SecurID"
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr "virheellinen todentamiskäsittelijä kohteelle SecurID"
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr "SecurID-viestintä epäonnistui"
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr "tuntematon SecurID-virhe"
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr "virheellinen salasanakoodipituus kohteelle SecurID"
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr "ei kyetä alustamaan SIA-istuntoa"
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid "There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option."
+msgstr "Sudo-ohjelmaan ei ole käännetty todentamismenelmiä! Jos haluat kääntää pois todentamisen, käytä asetusvalitsinta --disable-authentication."
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+msgid "Invalid authentication methods compiled into sudo!  You may mix standalone and non-standalone authentication."
+msgstr "Virheellisiä todennusmenetelmiä käännetty sudo-ohjelmaan! Yksittäisiä ja ei-yksittäisiä todennuksia on ehkä sekoitettu keskenään."
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] "%d väärä salasana yritetty"
+msgstr[1] "%d väärää salasanaa yritetty"
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr "Todennusmenetelmät:"
+
+#~ msgid "unable to get runas group vector"
+#~ msgstr "ei kyetä hakemaan runas-ryhmävektoria"
+
+#~ msgid "unable to reset group vector"
+#~ msgstr "ei kyetä nollaamaan ryhmävektoria"
+
+#~ msgid "unable to get group vector"
+#~ msgstr "ei kyetä hakemaan ryhmävektoria"
+
+#~ msgid "%s: %s_Alias `%s' references self"
+#~ msgstr "%s: %s_Alias ”%s” viittaa itseensä"
+
+#~ msgid "unable to parse temporary file (%s), unknown error"
+#~ msgstr "ei kyetä jäsentämään tilapäistä tiedostoa (%s), tuntematon virhe"
diff --git a/plugins/sudoers/po/pl.mo b/plugins/sudoers/po/pl.mo
new file mode 100644 (file)
index 0000000..a804700
Binary files /dev/null and b/plugins/sudoers/po/pl.mo differ
diff --git a/plugins/sudoers/po/pl.po b/plugins/sudoers/po/pl.po
new file mode 100644 (file)
index 0000000..9f94c9e
--- /dev/null
@@ -0,0 +1,1731 @@
+# Polish translation for sudo/sudoers.
+# This file is put in the public domain.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudoers 1.8.2-rc9\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-05 13:34-0400\n"
+"PO-Revision-Date: 2011-08-09 17:40+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\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"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr "Alias `%s' jest już zdefiniowany"
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr "getaudit: niepowodzenie"
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr "Nie udało się określić warunku audytowego"
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr "getauid nie powiodło się"
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr "au_open: niepowodzenie"
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr "au_to_subject: niepowodzenie"
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr "au_to_exec_args: niepowodzenie"
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr "au_to_return32: niepowodzenie"
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr "nie udało się zatwierdzić rekordu audytowego"
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr "getauid: niepowodzenie"
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr "au_to_text: niepowodzenie"
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr "niestety do uruchomienia %s wymagane jest hasło"
+
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:970 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr "nie udało się otworzyć %s"
+
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr "nie udało się zapisać do %s"
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr "nie udało się wykonać mkdir %s"
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr "błąd wewnętrzny, przepełnienie expand_prompt()"
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr "ścieżka znacznika czasu zbyt długa: %s"
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr "%s istnieje, ale nie jest katalogiem (0%o)"
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr "właścicielem %s jest uid %u, powinien być uid %u"
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr "%s zapisywalny nie tylko dla właściciela (uprawnienia 0%o, powinny być 0700)"
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:956
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr "nie udało się wykonać stat na %s"
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr "%s istnieje, ale nie jest zwykłym plikiem (0%o)"
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr "%s zapisywalny nie tylko dla właściciela (uprawnienia 0%o, powinny być 0600)"
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr "znacznik czasu zbyt daleko w przyszłości: %20.20s"
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr "nie udało się usunąć %s (%s), zostanie zresetowany do epoch"
+
+#: plugins/sudoers/check.c:660
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr "nie udało się zresetować %s do epoch"
+
+#: plugins/sudoers/check.c:714 plugins/sudoers/check.c:720
+#, c-format
+msgid "unknown uid: %u"
+msgstr "nieznany uid: %u"
+
+#: plugins/sudoers/check.c:717 plugins/sudoers/sudoers.c:747
+#: plugins/sudoers/sudoers.c:813 plugins/sudoers/sudoers.c:814
+#: plugins/sudoers/sudoers.c:1087 plugins/sudoers/testsudoers.c:200
+#: plugins/sudoers/testsudoers.c:330
+#, c-format
+msgid "unknown user: %s"
+msgstr "nieznany użytkownik: %s"
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr "Rodzaj komunikatu sysloga, jeśli syslog jest używany: %s"
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr "Priorytet komunikatu sysloga w przypadku udanego uwierzytelnienia: %s"
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr "Priorytet komunikatu sysloga w przypadku nieudanego uwierzytelnienia: %s"
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr "Umieszczenie zachęty OTP we własnej linii"
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr "Ignorowanie '.' w $PATH"
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr "Wysyłanie listu zawsze przy uruchomieniu sudo"
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr "Wysyłanie listu przy błędnym uwierzytelnieniu"
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr "Wysyłanie listu jeśli użytkownik nie jest w sudoers"
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr "Wysyłanie listu jeśli użytkownik nie jest w sudoers dla tego hosta"
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr "Wysyłanie listu jeśli użytkownik nie ma prawa do uruchomienia polecenia"
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr "Użycie osobnego znacznika czasu dla każdej pary użytkownik/tty"
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr "Poinstruowanie użytkownika przy pierwszym uruchomieniu sudo"
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr "Plik zawierający instrukcję do sudo: %s"
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr "Domyślne wymaganie uwierzytelnienia przez użytkowników"
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr "Możliwość uruchamiania sudo przez roota"
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr "Logowanie nazwy hosta w pliku logu (niesyslogowym)"
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr "Logowanie roku w pliku logu (niesyslogowym)"
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr "Uruchomienie powłoki przy wywołaniu sudo bez argumentów"
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr "Ustawianie $HOME na katalog użytkownika docelowego przy uruchamianiu powłoki z -s"
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr "Ustawianie $HOME zawsze na katalog domowy użytkownika docelowego"
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr "Zezwolenie na zbieranie niektórych informacji do przydatnych komunikatów błędów"
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr "Wymaganie pełnych nazw hostów w pliku sudoers"
+
+#: plugins/sudoers/def_data.c:115
+msgid "Insult the user when they enter an incorrect password"
+msgstr "Lżenie użytkownika po podaniu błędnego hasła"
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr "Możliwość uruchamiania sudo tylko z poziomu terminala"
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr "Honorowanie zmiennej środowiskowej EDITOR przez visudo"
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr "Pytanie o hasło roota zamiast hasła użytkownika"
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr "Pytanie o hasło użytkownika runas_default zamiast uruchamiającego"
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr "Pytanie o hasło użytkownika docelowego zamiast uruchamiającego"
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr "Użycie ustawień domyślnych z klasy logowania użytkownika docelowego (jeśli są)"
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr "Ustawianie zmiennych środowiskowych LOGNAME i USER"
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr "Ustawianie na użytkownika docelowego tylko efektywnego uid-a, nie rzeczywistego uid-a"
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr "Pomijanie inicjalizacji wektora grup na grupy użytkownika docelowego"
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr "Długość, na której zawijać linie logu (0 bez zawijania): %d"
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr "Limit czasu znacznika uwierzytelniania (w minutach): %.1f"
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr "Limit czasu pytania o hasło (w minutach): %.1f"
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr "Liczba prób wpisania hasła: %d"
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr "Wartość umask lub 0777, aby użyć wartości użytkownika: 0%o"
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr "Ścieżka do pliku logu: %s"
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr "Ścieżka do programu mail: %s"
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr "Flagi dla programu mail: %s"
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr "Adres, na który mają być wysyłane listy: %s"
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr "Adres, z którego mają być wysyłane listy: %s"
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr "Temat wysyłanych listów: %s"
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr "Komunikat o błędnym haśle: %s"
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr "Ścieżka katalogu znaczników czasu uwierzytelniania: %s"
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr "Właściciel katalogu znaczników czasu uwierzytelniania: %s"
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr "Grupa, której użytkownicy są zwolnieni z wymagań dot. haseł i PATH: %s"
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr "Domyślne pytanie o hasło: %s"
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr "Czy passprompt ma być używane zamiast systemowego zapytania we wszystkich przypadkach"
+
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr "Domyślny użytkownik do uruchamiania poleceń: %s"
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr "Wartość do podstawienia za $PATH użytkownika: %s"
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr "Ścieżka do edytora, który ma być używany przez visudo: %s"
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr "Kiedy ma być wymagane hasło dla pseudopolecenia 'list': %s"
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr "Kiedy ma być wymagane hasło dla pseudopolecenia 'verify': %s"
+
+#: plugins/sudoers/def_data.c:243
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr "Wczytanie pustych funkcji exec zawartych w 'noexec_file'"
+
+#: plugins/sudoers/def_data.c:247
+#, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr "Plik zawierający puste funkcje exec: %s"
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr "Jeśli istnieje katalog LDAP, czy ignorować lokalny plik sudoers"
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr "Deskryptory plików >= %d będą zamykane przed uruchomieniem polecenia"
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr "Czy użytkownicy mogą zmieniać wartość `closefrom' opcją -C"
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr "Zezwolenie użytkownikom na ustawianie dowolnych zmiennych środowiskowych"
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr "Wyczyszczenie środowiska do domyślnego zbioru zmiennych"
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr "Zmienne środowiskowe do sprawdzania poprawności:"
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr "Zmienne środowiskowe do usunięcia:"
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr "Zmienne środowiskowe do zachowania:"
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr "Rola SELinuksa do używania w nowym kontekście bezpieczeństwa: %s"
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr "Typ SELinuksa do używania w nowym kontekście bezpieczeństwa: %s"
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr "Ścieżka do pliku środowiska specyficznego dla sudo: %s"
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr "Lokalizacja, jak ma być używana przy analizie pliku sudoers: %s"
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr "Zezwolenie sudo na pytanie o hasło nawet gdyby miało być widoczne"
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr "Uwidocznienie wprowadzania hasła przez użytkownika w miarę wpisywania"
+
+#: plugins/sudoers/def_data.c:307
+msgid "Use faster globbing that is less accurate but does not access the filesystem"
+msgstr "Użycie szybszych masek (glob) - mniej dokładnych, ale nie odwołujących się do systemu plików"
+
+#: plugins/sudoers/def_data.c:311
+msgid "The umask specified in sudoers will override the user's, even if it is more permissive"
+msgstr "Wartość umask podana w sudoers ma zastąpić wartość użytkownika, nawet jeśli pozwala na więcej"
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr "Logowanie wejścia użytkownika dla uruchamianych poleceń"
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr "Logowanie wyjścia z uruchamianych poleceń"
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr "Kompresja logów we/wy przy użyciu zliba"
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr "Uruchamianie poleceń zawsze na pseudoterminalu"
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr "Wtyczka do obsługi grup nieuniksowych"
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr "Katalog do zapisu logów wejścia/wyjścia"
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr "Plik do zapisu logu wejścia/wyjścia"
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr "Dodawanie wpisu do pliku utmp/utmpx przy przydzielaniu pty"
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr "Ustawianie użytkownika w utmp jako docelowego, nie wywołującego"
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+"Opcje dostępne w linii \"Defaults\" pliku sudoers:\n"
+"\n"
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr "%s: %.*s\n"
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr "nieznany wpis domyślny `%s'"
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr "błędna wartość `%s' dla opcji `%s'"
+
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr "nie podano wartości dla `%s'"
+
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr "wartości `%s' muszą zaczynać się od '/'"
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr "opcja `%s' nie przyjmuje wartości"
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr "błąd wewnętrzny, przepełnienie sudo_setenv()"
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr "sudo_putenv: uszkodzone envp, niezgodność długości"
+
+#: plugins/sudoers/env.c:698
+#, c-format
+msgid "sorry, you are not allowed to set the following environment variables: %s"
+msgstr "niestety nie jest dozwolone ustawianie następujących zmiennych środowiskowych: %s"
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:899 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ">>> %s: %s w okolicy linii %d <<<"
+
+#: plugins/sudoers/group_plugin.c:90
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: plugins/sudoers/group_plugin.c:102
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "właścicielem %s musi być uid %d"
+
+#: plugins/sudoers/group_plugin.c:106
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr "prawo zapisu do %s może mieć tylko właściciel"
+
+#: plugins/sudoers/group_plugin.c:113
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "nie udało się wykonać dlopen %s: %s"
+
+#: plugins/sudoers/group_plugin.c:118
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr "nie udało się odnaleźć symbolu \"group_plugin\" w %s"
+
+#: plugins/sudoers/group_plugin.c:123
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr "%s: niezgodna główna wersja wtyczki grup %d, oczekiwano %d"
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr "Pary lokalnych adresów IP i masek:\n"
+
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:977
+#, c-format
+msgid "unable to read %s"
+msgstr "nie udało się odczytać %s"
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr "błędny numer sekwencyjny %s"
+
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr "nie udało się utworzyć %s"
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:356
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr "nie udało się ustawić lokalizacji na \"%s\", użyto \"C\""
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr "sudo_ldap_conf_add_ports: port zbyt duży"
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr "sudo_ldap_conf_add_ports: brak miejsca podczas rozszerzania hostbuf"
+
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr "nieobsługiwany rodzaj URI LDAP: %s"
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr "błędny URI: %s"
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr "nie można mieszać URI ldap i ldaps"
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr "nie można mieszać ldaps i starttls"
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr "sudo_ldap_parse_uri: brak miejsca podczas konstruowania hostbuf"
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr "nie udało się zainicjować bazy certyfikatów i kluczy SSL: %s"
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr "nie udało się pobrać czasu GMT"
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr "nie udało się sformatować znacznika czasu"
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr "nie udało się stworzyć filtra czasu"
+
+#: plugins/sudoers/ldap.c:1047
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr "niezgodność przydzielenia sudo_ldap_build_pass1"
+
+#: plugins/sudoers/ldap.c:1542
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+"\n"
+"Rola LDAP: %s\n"
+
+#: plugins/sudoers/ldap.c:1544
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+"\n"
+"Rola LDAP: NIEZNANA\n"
+
+#: plugins/sudoers/ldap.c:1591
+#, c-format
+msgid "    Order: %s\n"
+msgstr "    Porządek: %s\n"
+
+#: plugins/sudoers/ldap.c:1599
+#, c-format
+msgid "    Commands:\n"
+msgstr "    Polecenia:\n"
+
+#: plugins/sudoers/ldap.c:1986
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr "nie udało się zainicjować LDAP: %s"
+
+#: plugins/sudoers/ldap.c:2017
+#, c-format
+msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"
+msgstr "wybrano start_tls, ale biblioteki LDAP nie obsługują ldap_start_tls_s() ani ldap_start_tls_s_np()"
+
+#: plugins/sudoers/ldap.c:2248
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr "błędny atrybut sudoOrder: %s"
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr "nie udało się otworzyć systemu audytowego"
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr "błąd wewnętrzny, przepełnienie linux_audit_command()"
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr "nie udało się wysłać komunikatu audytowego"
+
+#: plugins/sudoers/logging.c:192
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr "nie udało się otworzyć pliku logu: %s: %s"
+
+#: plugins/sudoers/logging.c:195
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr "nie udało się zablokować pliku logu: %s: %s"
+
+#: plugins/sudoers/logging.c:249
+msgid "user NOT in sudoers"
+msgstr "użytkownik NIE występuje w sudoers"
+
+#: plugins/sudoers/logging.c:251
+msgid "user NOT authorized on host"
+msgstr "użytkownik NIE jest autoryzowany na hoście"
+
+#: plugins/sudoers/logging.c:253
+msgid "command not allowed"
+msgstr "polecenie niedozwolone"
+
+#: plugins/sudoers/logging.c:263
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr "%s nie występuje w pliku sudoers. Ten incydent zostanie zgłoszony.\n"
+
+#: plugins/sudoers/logging.c:266
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr "%s nie ma uprawnień do uruchamiania sudo na %s. Ten incydent zostanie zgłoszony.\n"
+
+#: plugins/sudoers/logging.c:270
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr "Niestety użytkownik %s nie może uruchamiać sudo na %s.\n"
+
+#: plugins/sudoers/logging.c:273
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr "Niestety użytkownik %s nie ma uprawnień do uruchamiania '%s%s%s' jako %s%s%s na %s.\n"
+
+#: plugins/sudoers/logging.c:408
+#, c-format
+msgid "unable to fork"
+msgstr "nie udało się wykonać fork"
+
+#: plugins/sudoers/logging.c:415 plugins/sudoers/logging.c:472
+#, c-format
+msgid "unable to fork: %m"
+msgstr "nie udało się wykonać fork: %m"
+
+#: plugins/sudoers/logging.c:465
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr "nie udało się otworzyć potoku: %m"
+
+#: plugins/sudoers/logging.c:484
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr "nie udało się wykonać dup na stdin: %m"
+
+#: plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr "nie udało się wywołać %s: %m"
+
+#: plugins/sudoers/logging.c:728
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr "błąd wewnętrzny: za mało miejsca na linię logu"
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr "błąd składni w %s w okolicy linii %d"
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+"\n"
+"Wpis sudoers:\n"
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr "    Jako użytkownicy: "
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr "    Jako grupy: "
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+"    Polecenia:\n"
+"\t"
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ": "
+
+#: plugins/sudoers/pwutil.c:251
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr "nie udało się zapamiętać uid-a %u (%s), już istnieje"
+
+#: plugins/sudoers/pwutil.c:259
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr "nie udało się zapamiętać uid-a %u, już istnieje"
+
+#: plugins/sudoers/pwutil.c:295 plugins/sudoers/pwutil.c:304
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr "nie udało się zapamiętać użytkownika %s, już istnieje"
+
+#: plugins/sudoers/pwutil.c:607
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr "nie udało się zapamiętać gid-a %u (%s), już istnieje"
+
+#: plugins/sudoers/pwutil.c:615
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr "nie udało się zapamiętać gid-a %u, już istnieje"
+
+#: plugins/sudoers/pwutil.c:644 plugins/sudoers/pwutil.c:653
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr "nie udało się zapamiętać grupy %s, już istnieje"
+
+#: plugins/sudoers/set_perms.c:109 plugins/sudoers/set_perms.c:355
+#: plugins/sudoers/set_perms.c:587 plugins/sudoers/set_perms.c:821
+msgid "perm stack overflow"
+msgstr "przepełnienie stosu uprawnień"
+
+#: plugins/sudoers/set_perms.c:117 plugins/sudoers/set_perms.c:363
+#: plugins/sudoers/set_perms.c:595 plugins/sudoers/set_perms.c:829
+msgid "perm stack underflow"
+msgstr "niedopełnienie stosu uprawnień"
+
+#: plugins/sudoers/set_perms.c:223 plugins/sudoers/set_perms.c:455
+#: plugins/sudoers/set_perms.c:692
+msgid "unable to change to runas gid"
+msgstr "nie udało się zmienić na docelowy gid"
+
+#: plugins/sudoers/set_perms.c:231 plugins/sudoers/set_perms.c:462
+#: plugins/sudoers/set_perms.c:699
+msgid "unable to change to runas uid"
+msgstr "nie udało się zmienić na docelowy uid"
+
+#: plugins/sudoers/set_perms.c:245 plugins/sudoers/set_perms.c:475
+#: plugins/sudoers/set_perms.c:712
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr "nie udało się zmienić na gid sudoers"
+
+#: plugins/sudoers/set_perms.c:286 plugins/sudoers/set_perms.c:513
+#: plugins/sudoers/set_perms.c:750 plugins/sudoers/set_perms.c:890
+msgid "too many processes"
+msgstr "zbyt dużo procesów"
+
+#: plugins/sudoers/set_perms.c:952
+msgid "unable to set runas group vector"
+msgstr "nie udało się ustawić wektora grup docelowych"
+
+#: plugins/sudoers/sudo_nss.c:238
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr "Pasujące wpisy Defaults dla %s na tym hoście:\n"
+
+#: plugins/sudoers/sudo_nss.c:251
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr "Wartości specyficzne dla Runas i Command dla %s:\n"
+
+#: plugins/sudoers/sudo_nss.c:264
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr "Użytkownik %s może uruchamiać na tym hoście następujące polecenia:\n"
+
+#: plugins/sudoers/sudo_nss.c:274
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr "Użytkownik %s nie ma uprawnień do uruchamiania sudo na %s.\n"
+
+#: plugins/sudoers/sudoers.c:198 plugins/sudoers/sudoers.c:233
+#: plugins/sudoers/sudoers.c:907
+msgid "problem with defaults entries"
+msgstr "problem z wpisami domyślnymi"
+
+#: plugins/sudoers/sudoers.c:202
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr "nie znaleziono poprawnych źródeł sudoers, zakończenie"
+
+#: plugins/sudoers/sudoers.c:256
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr "nie udało się wywołać %s: %s"
+
+#: plugins/sudoers/sudoers.c:305
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr "wg sudoers root nie ma prawa używać sudo"
+
+#: plugins/sudoers/sudoers.c:312
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr "brak uprawnień do używania opcji -C"
+
+#: plugins/sudoers/sudoers.c:402
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr "właściciel znacznika czasu (%s): nie ma takiego użytkownika"
+
+#: plugins/sudoers/sudoers.c:418
+msgid "no tty"
+msgstr "brak tty"
+
+#: plugins/sudoers/sudoers.c:419
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr "niestety do uruchomienia sudo konieczny jest tty"
+
+#: plugins/sudoers/sudoers.c:462
+msgid "No user or host"
+msgstr "Brak użytkownika lub hosta"
+
+#: plugins/sudoers/sudoers.c:476 plugins/sudoers/sudoers.c:497
+#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:1452
+#: plugins/sudoers/sudoers.c:1453
+#, c-format
+msgid "%s: command not found"
+msgstr "%s: nie znaleziono polecenia"
+
+#: plugins/sudoers/sudoers.c:478 plugins/sudoers/sudoers.c:494
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+"zignorowano plik `%s' znaleziony w '.'\n"
+"Proszę użyć `sudo ./%s', jeśli to `%s' ma być uruchomiony."
+
+#: plugins/sudoers/sudoers.c:483
+msgid "validation failure"
+msgstr "błąd kontroli poprawności"
+
+#: plugins/sudoers/sudoers.c:493
+msgid "command in current directory"
+msgstr "polecenie w bieżącym katalogu"
+
+#: plugins/sudoers/sudoers.c:505
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr "niestety brak uprawnień do zachowania środowiska"
+
+#: plugins/sudoers/sudoers.c:890
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr "błąd wewnętrzny, przepełnienie set_cmnd()"
+
+#: plugins/sudoers/sudoers.c:935
+#, c-format
+msgid "fixed mode on %s"
+msgstr "poprawiono uprawnienia %s"
+
+#: plugins/sudoers/sudoers.c:939
+#, c-format
+msgid "set group on %s"
+msgstr "ustawiono grupę %s"
+
+#: plugins/sudoers/sudoers.c:942
+#, c-format
+msgid "unable to set group on %s"
+msgstr "nie udało się ustawić grupy %s"
+
+#: plugins/sudoers/sudoers.c:945
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr "nie udało się poprawić uprawnień %s"
+
+#: plugins/sudoers/sudoers.c:958
+#, c-format
+msgid "%s is not a regular file"
+msgstr "%s nie jest zwykłym plikiem"
+
+#: plugins/sudoers/sudoers.c:960
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr "%s ma uprawnienia 0%o, powinny być 0%o"
+
+#: plugins/sudoers/sudoers.c:964
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr "właścicielem %s jest uid %u, powinien być %u"
+
+#: plugins/sudoers/sudoers.c:967
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr "właścicielem %s jest gid %u, powinien być %u"
+
+#: plugins/sudoers/sudoers.c:1011
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr "tylko root może używać `-c %s'"
+
+#: plugins/sudoers/sudoers.c:1021
+#, c-format
+msgid "unknown login class: %s"
+msgstr "nieznana klasa logowania: %s"
+
+#: plugins/sudoers/sudoers.c:1055
+#, c-format
+msgid "unable to resolve host %s"
+msgstr "nie udało się rozwiązać nazwy hosta %s"
+
+#: plugins/sudoers/sudoers.c:1105 plugins/sudoers/testsudoers.c:342
+#, c-format
+msgid "unknown group: %s"
+msgstr "nieznana grupa: %s"
+
+#: plugins/sudoers/sudoers.c:1137
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr "Wersja wtyczki polityki sudoers %s\n"
+
+#: plugins/sudoers/sudoers.c:1139
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr "Wersja gramatyki pliku sudoers %d\n"
+
+#: plugins/sudoers/sudoers.c:1143
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+"\n"
+"Ścieżka do sudoers: %s\n"
+
+#: plugins/sudoers/sudoers.c:1146
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr "ścieżka do nsswitch: %s\n"
+
+#: plugins/sudoers/sudoers.c:1148
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr "ścieżka do ldap.conf: %s\n"
+
+#: plugins/sudoers/sudoers.c:1149
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr "ścieżka do ldap.secret: %s\n"
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr "błędna opcja filtra: %s"
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr "błędny maksymalny czas oczekiwania: %s"
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr "błędny współczynnik szybkości: %s"
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr "%s wersja %s\n"
+
+#: plugins/sudoers/sudoreplay.c:310
+#, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr "%s/%.2s/%.2s/%.2s/czas: %s"
+
+#: plugins/sudoers/sudoreplay.c:316
+#, c-format
+msgid "%s/%s/timing: %s"
+msgstr "%s/%s/czas: %s"
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr "błędny plik logu %s"
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr "Odtwarzanie sesji sudo: %s"
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr "nie udało się przestawić tty w tryb surowy"
+
+#: plugins/sudoers/sudoreplay.c:383
+#, c-format
+msgid "invalid timing file line: %s"
+msgstr "błędna linia pliku czasu: %s"
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr "zapis na standardowe wyjście"
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr "nanospeep: tv_sec %ld, tv_nsec %ld"
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr "niejednoznaczne wyrażenie \"%s\""
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr "zbyt dużo zagnieżdżonych wyrażeń w nawiasach, maksimum to %d"
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr "niesparowany ')' w wyrażeniu"
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr "nieznany warunek wyszukiwania \"%s\""
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr "%s wymaga argumentu"
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr "błędne wyrażenie regularne: %s"
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr "nie udało się przeanalizować daty \"%s\""
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr "niesparowany '(' w wyrażeniu"
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr "niedozwolone kończące \"or\""
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr "niedozwolony kończący \"!\""
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr "błędne wyrażenie regularne: %s"
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr "Składnia: %s [-h] [-d katalog] [-m maks_oczek] [-s wsp_szybkości] ID\n"
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr "Składnia: %s [-h] [-d katalog] -k [wyrażenie wyszukiwania]\n"
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+"%s - odtwarzanie logów sesji sudo\n"
+"\n"
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+"\n"
+"Opcje:\n"
+"  -d katalog       podanie katalogu na logi sesji\n"
+"  -f filtr         określenie rodzaju we/wy do wyświetlania\n"
+"  -h               wyświetlenie opisu i zakończenie\n"
+"  -l [wyrażenie]   lista dostępnych ID sesji pasujących do wyrażenia\n"
+"  -m maks_oczek    maksymalna liczba sekund oczekiwania między zdarzeniami\n"
+"  -s wsp_szybkości przyspieszenie lub spowolnienie wyjścia\n"
+"  -V               wyświetlenie informacji o wersji i zakończenie"
+
+#: plugins/sudoers/testsudoers.c:228
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr "błąd wewnętrzny, przepełnienie init_vars()"
+
+#: plugins/sudoers/testsudoers.c:304
+msgid "\thost  unmatched"
+msgstr "\thost nie znaleziony"
+
+#: plugins/sudoers/testsudoers.c:307
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+"\n"
+"Polecenie dozwolone"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+"\n"
+"Polecenie niedozwolone"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+"\n"
+"Polecenie nie znalezione"
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr "nie udało się przydzielić pamięci"
+
+#: toke.l:786
+msgid "too many levels of includes"
+msgstr "za dużo poziomów include"
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr "fill_args: przepełnienie bufora"
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr "%s, wersja gramatyki %d\n"
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr "nie istniejesz w bazie danych %s"
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr "wciśnięcie return przejdzie do edycji %s: "
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr "błąd zapisu"
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr "nie udało się wykonać stat na pliku tymczasowym (%s), %s nie zmieniony"
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr "plik tymczasowy (%s) zerowej długości, %s nie zmieniony"
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr "błąd edytora (%s), %s nie zmieniony"
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr "%s nie zmieniony"
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr "nie udało się ponownie otworzyć pliku tymczasowego (%s), %s nie zmieniony."
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr "nie udało się przeanalizować pliku tymczasowego (%s), nieznany błąd"
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr "błąd wewnętrzny, nie znaleziono %s na liście!"
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr "nie udało się ustawić (uid, gid) %s na (%d, %d)"
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr "nie udało się zmienić uprawnień %s na 0%o"
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr "%s i %s nie są na tym samym systemie plików, użycie mv do zmiany nazwy"
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr "polecenie nie powiodło się: '%s %s %s', %s nie zmieniony"
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr "błąd podczas zmiany nazwy %s, %s nie zmieniony"
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr "Co teraz? "
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+"Możliwe opcje:\n"
+"  (e) ponowna edycja pliku sudoers\n"
+"  (x) wyjście bez zapisu zmian do pliku sudoers\n"
+"  (Q) wyjście i zapisanie zmian w pliku sudoers (NIEBEZPIECZNE!)\n"
+
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr "nie udało się wywołać %s"
+
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr "nie udało się uruchomić %s"
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr "nie udało się przeanalizować pliku %s, nieznany błąd"
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr "błąd składni w %s w okolicy linii %d\n"
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr "błąd składni w %s\n"
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr "%s: składnia poprawna\n"
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr "%s: błędny właściciel, (uid, gid) powinny wynosić (%d, %d)\n"
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr "%s: błędne uprawnienia, powinny być 0%o\n"
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr "%s zajęty, proszę spróbować później"
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr "podany edytor (%s) nie istnieje"
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr "nie udało się wykonać stat na edytorze (%s)"
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr "nie znaleziono edytora (ścieżka = %s)"
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr "Błąd: cykl w %s_Alias `%s'"
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr "Uwaga: cykl w %s_Alias `%s'"
+
+#: plugins/sudoers/visudo.c:990
+#, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr "Błąd: %s_Alias `%s' użyty, ale nie zdefiniowany"
+
+#: plugins/sudoers/visudo.c:991
+#, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr "Uwaga: %s_Alias `%s' użyty, ale nie zdefiniowany"
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr "%s: nie użyty %s_Alias %s"
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+"%s - bezpieczna edycja pliku sudoers\n"
+"\n"
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+"\n"
+"Opcje:\n"
+"  -c          tryb wyłącznie sprawdzający\n"
+"  -f sudoers  podanie położenia pliku sudoers\n"
+"  -h          wyświetlenie opisu i zakończenie\n"
+"  -q          mniej obszerne (\"cichsze\") komunikaty o błędach składni\n"
+"  -s          ścisłe sprawdzanie składni\n"
+"  -V          wyświetlenie informacji o wersji i zakończenie"
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr "nie udało się rozpocząć uwierzytelnienia BSD"
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr "błędny rodzaj uwierzytelnienia"
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr "nie udało się ustawić parametrów uwierzytelnienia"
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr "nie udało się odczytać konfiguracji fwtk"
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr "nie udało się połączyć z serwerem uwierzytelniającym"
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr "utracono połączenie z serwerem uwierzytelniającym"
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+"błąd serwera uwierzytelniającego:\n"
+"%s"
+
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr "%s: nie udało się przeanalizować '%s': %s"
+
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr "%s: nie udało się złożyć princ ('%s'): %s"
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr "%s: nie udało się rozwiązać ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr "%s: nie udało się przydzielić opcji: %s"
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr "%s: nie udało się pobrać danych uwierzytelniających: %s"
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr "%s: nie udało się zainicjować ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr "%s: nie udało się zapisać danych uwierzytelniających w ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr "%s: nie udało się pobrać głównego hosta: %s"
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr "%s: Nie można zweryfikować TGT! Możliwy atak!: %s"
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr "nie udało się zainicjować PAM"
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr "błąd kontroli poprawności konta - konto zablokowane?"
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr "Konto lub hasło wygasło, należy ustawić ponownie hasło i spróbować jeszcze raz"
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr "pam_chauthtok: %s"
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr "Hasło wygasło, proszę skontaktować się z administratorem systemu"
+
+#: plugins/sudoers/auth/pam.c:161
+msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator"
+msgstr "Konto wygasło lub w konfiguracji PAM brak sekcji \"account\" dla sudo, proszę skontaktować się z administratorem systemu"
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr "pam_authenticate: %s"
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr "Hasło: "
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr "Hasło:"
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr "nie udało się połączyć z serwerem SecurID"
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr "nie udało się zainicjować biblioteki ACE API"
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr "ID użytkownika zablokowany dla uwierzytelnienia SecurID"
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr "błędna długość nazwy użytkownika dla SecurID"
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr "błędny uchwyt uwierzytelnienia dla SecurID"
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr "błąd komunikacji SecurID"
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr "nieznany błąd SecurID"
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr "błędna długość hasła dla SecurID"
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr "nie udało się zainicjować sesji SIA"
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid "There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option."
+msgstr "W sudo nie wkompilowano żadnych metod uwierzytelniania! Aby wyłączyć uwierzytelnianie, proszę użyć opcji konfiguracyjnej --disable-authentication."
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+msgid "Invalid authentication methods compiled into sudo!  You may mix standalone and non-standalone authentication."
+msgstr "W sudo wkompilowano błędne metody uwierzytelniania! Można mieszać samodzielne i niesamodzielne sposoby uwierzytelniania."
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] "%d błędna próba wprowadzenia hasła"
+msgstr[1] "%d błędne próby wprowadzenia hasła"
+msgstr[2] "%d błędnych prób wprowadzenia hasła"
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr "Metody uwierzytelniania:"
diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot
new file mode 100644 (file)
index 0000000..21f6196
--- /dev/null
@@ -0,0 +1,1696 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-17 11:40-0400\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"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr ""
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr ""
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:971 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr ""
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr ""
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr ""
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr ""
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:957
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr ""
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr ""
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr ""
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr ""
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr ""
+
+#: plugins/sudoers/check.c:660
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr ""
+
+#: plugins/sudoers/check.c:714 plugins/sudoers/check.c:720
+#, c-format
+msgid "unknown uid: %u"
+msgstr ""
+
+#: plugins/sudoers/check.c:717 plugins/sudoers/sudoers.c:748
+#: plugins/sudoers/sudoers.c:814 plugins/sudoers/sudoers.c:815
+#: plugins/sudoers/sudoers.c:1088 plugins/sudoers/testsudoers.c:202
+#: plugins/sudoers/testsudoers.c:337
+#, c-format
+msgid "unknown user: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:115
+msgid "Insult the user when they enter an incorrect password"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr ""
+
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:243
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:247
+#, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:307
+msgid ""
+"Use faster globbing that is less accurate but does not access the filesystem"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:311
+msgid ""
+"The umask specified in sudoers will override the user's, even if it is more "
+"permissive"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr ""
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr ""
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr ""
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr ""
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr ""
+
+#: plugins/sudoers/env.c:698
+#, c-format
+msgid ""
+"sorry, you are not allowed to set the following environment variables: %s"
+msgstr ""
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:903 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr ""
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:90
+#, c-format
+msgid "%s%s: %s"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:102
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:106
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:113
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:118
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr ""
+
+#: plugins/sudoers/group_plugin.c:123
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr ""
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr ""
+
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:978
+#, c-format
+msgid "unable to read %s"
+msgstr ""
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr ""
+
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr ""
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:357
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr ""
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1047
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1542
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1544
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1591
+#, c-format
+msgid "    Order: %s\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1599
+#, c-format
+msgid "    Commands:\n"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:1986
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:2017
+#, c-format
+msgid ""
+"start_tls specified but LDAP libs do not support ldap_start_tls_s() or "
+"ldap_start_tls_s_np()"
+msgstr ""
+
+#: plugins/sudoers/ldap.c:2248
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr ""
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr ""
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr ""
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr ""
+
+#: plugins/sudoers/logging.c:192
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr ""
+
+#: plugins/sudoers/logging.c:195
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr ""
+
+#: plugins/sudoers/logging.c:249
+msgid "user NOT in sudoers"
+msgstr ""
+
+#: plugins/sudoers/logging.c:251
+msgid "user NOT authorized on host"
+msgstr ""
+
+#: plugins/sudoers/logging.c:253
+msgid "command not allowed"
+msgstr ""
+
+#: plugins/sudoers/logging.c:263
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr ""
+
+#: plugins/sudoers/logging.c:266
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr ""
+
+#: plugins/sudoers/logging.c:270
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr ""
+
+#: plugins/sudoers/logging.c:273
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr ""
+
+#: plugins/sudoers/logging.c:408
+#, c-format
+msgid "unable to fork"
+msgstr ""
+
+#: plugins/sudoers/logging.c:415 plugins/sudoers/logging.c:472
+#, c-format
+msgid "unable to fork: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:465
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:484
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr ""
+
+#: plugins/sudoers/logging.c:728
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr ""
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr ""
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr ""
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr ""
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:251
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:259
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:295 plugins/sudoers/pwutil.c:304
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:607
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:615
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr ""
+
+#: plugins/sudoers/pwutil.c:644 plugins/sudoers/pwutil.c:653
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:109 plugins/sudoers/set_perms.c:355
+#: plugins/sudoers/set_perms.c:587 plugins/sudoers/set_perms.c:821
+msgid "perm stack overflow"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:117 plugins/sudoers/set_perms.c:363
+#: plugins/sudoers/set_perms.c:595 plugins/sudoers/set_perms.c:829
+msgid "perm stack underflow"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:223 plugins/sudoers/set_perms.c:455
+#: plugins/sudoers/set_perms.c:692
+msgid "unable to change to runas gid"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:231 plugins/sudoers/set_perms.c:462
+#: plugins/sudoers/set_perms.c:699
+msgid "unable to change to runas uid"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:245 plugins/sudoers/set_perms.c:475
+#: plugins/sudoers/set_perms.c:712
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:286 plugins/sudoers/set_perms.c:513
+#: plugins/sudoers/set_perms.c:750 plugins/sudoers/set_perms.c:890
+msgid "too many processes"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:952
+msgid "unable to set runas group vector"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:238
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:251
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:264
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr ""
+
+#: plugins/sudoers/sudo_nss.c:274
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:199 plugins/sudoers/sudoers.c:234
+#: plugins/sudoers/sudoers.c:911
+msgid "problem with defaults entries"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:203
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:257
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:306
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:313
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:403
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:419
+msgid "no tty"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:420
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:463
+msgid "No user or host"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:498
+#: plugins/sudoers/sudoers.c:499 plugins/sudoers/sudoers.c:1465
+#: plugins/sudoers/sudoers.c:1466
+#, c-format
+msgid "%s: command not found"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:479 plugins/sudoers/sudoers.c:495
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:484
+msgid "validation failure"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:494
+msgid "command in current directory"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:506
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:894
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:936
+#, c-format
+msgid "fixed mode on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:940
+#, c-format
+msgid "set group on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:943
+#, c-format
+msgid "unable to set group on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:946
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:959
+#, c-format
+msgid "%s is not a regular file"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:961
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:965
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:968
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1012
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1022
+#, c-format
+msgid "unknown login class: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1056
+#, c-format
+msgid "unable to resolve host %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1106 plugins/sudoers/testsudoers.c:351
+#, c-format
+msgid "unknown group: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1150
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1152
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1156
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1159
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1161
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoers.c:1162
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:310
+#, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:316
+#, c-format
+msgid "%s/%s/timing: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:383
+#, c-format
+msgid "invalid timing file line: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:230
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:309
+msgid "\thost  unmatched"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:312
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:313
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+
+#: plugins/sudoers/testsudoers.c:313
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr ""
+
+#: toke.l:786
+msgid "too many levels of includes"
+msgstr ""
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr ""
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr ""
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr ""
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:990
+#, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:991
+#, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr ""
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr ""
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr ""
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:161
+msgid ""
+"Account expired or PAM config lacks an \"account\" section for sudo, contact "
+"your system administrator"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr ""
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr ""
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr ""
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr ""
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr ""
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid ""
+"There are no authentication methods compiled into sudo!  If you want to turn "
+"off authentication, use the --disable-authentication configure option."
+msgstr ""
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+msgid ""
+"Invalid authentication methods compiled into sudo!  You may mix standalone "
+"and non-standalone authentication."
+msgstr ""
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr ""
diff --git a/plugins/sudoers/po/uk.mo b/plugins/sudoers/po/uk.mo
new file mode 100644 (file)
index 0000000..131c776
Binary files /dev/null and b/plugins/sudoers/po/uk.mo differ
diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po
new file mode 100644 (file)
index 0000000..706220b
--- /dev/null
@@ -0,0 +1,1745 @@
+# Ukrainian translation for sudoers.
+# This file is put in the public domain.
+#
+# Yuri Chornoivan <yurchor@ukr.net>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: sudoers 1.8.2-rc9\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-05 13:34-0400\n"
+"PO-Revision-Date: 2011-08-09 08:41+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 1.2\n"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr "Замінник «%s» вже визначено"
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr "getaudit: помилка"
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr "Не вдалося визначити умови аудита"
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr "помилка getauid"
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr "au_open: помилка"
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr "au_to_subject: помилка"
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr "au_to_exec_args: помилка"
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr "au_to_return32: помилка"
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr "не вдалося надіслати запис аудита"
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr "getauid: помилка"
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr "au_to_text: помилка"
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr "вибачте, для виконання %s слід вказати пароль"
+
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:970 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr "не вдалося відкрити %s"
+
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr "не вдалося виконати запис до %s"
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr "не вдалося створити каталог %s"
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr "внутрішня помилка, переповнення expand_prompt()"
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr "шлях часового штампа є занадто довгим: %s"
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr "%s існує, але не є каталогом (0%o)"
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr "власником %s є uid %u, має бути uid %u"
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr "%s доступний до запису невласником (0%o), має бути встановлено режим 0700"
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:956
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr "не вдалося виконати stat для %s"
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr "%s існує, але не є звичайним файлом (0%o)"
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr "%s доступний до запису невласником (0%o), має бути встановлено режим 0600"
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr "занадто далекий часовий штамп у майбутньому: %20.20s"
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr "на вдалося вилучити %s (%s), час буде змінено відповідно до епохи"
+
+#: plugins/sudoers/check.c:660
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr "не вдалося встановити для %s час епохи"
+
+#: plugins/sudoers/check.c:714 plugins/sudoers/check.c:720
+#, c-format
+msgid "unknown uid: %u"
+msgstr "невідоме значення uid: %u"
+
+#: plugins/sudoers/check.c:717 plugins/sudoers/sudoers.c:747
+#: plugins/sudoers/sudoers.c:813 plugins/sudoers/sudoers.c:814
+#: plugins/sudoers/sudoers.c:1087 plugins/sudoers/testsudoers.c:200
+#: plugins/sudoers/testsudoers.c:330
+#, c-format
+msgid "unknown user: %s"
+msgstr "невідомий користувач: %s"
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr "Інструмент ведення журналу, якщо використано syslog: %s"
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr "Пріоритетність, яка використовуватиметься у syslog для успішних розпізнавань: %s"
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr "Пріоритетність, яка використовуватиметься у syslog для неуспішних розпізнавань: %s"
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr "Розташовувати запит щодо OTP у окремому рядку"
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr "Ігнорувати «.» у $PATH"
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr "Завжди надсилати листа, коли викликано sudo"
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr "Надсилати листа, якщо користувачу не вдалося пройти розпізнавання"
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr "Надсилати листа, якщо користувача немає серед sudoers"
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr "Надсилати листа, якщо користувача немає у списку sudoers цього вузла"
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr "Надсилати листа, якщо користувачеві заборонено виконувати команду"
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr "Окремий часовий штамп для кожної комбінації користувач/tty"
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr "Показувати настанови користувачеві під час першого запуску sudo"
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr "Файл з настановами щодо sudo: %s"
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr "Типово, вимагати розпізнавання"
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr "Root може виконувати sudo"
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr "Записувати назву вузла до файла журналу (не syslog)"
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr "Записувати рік до файла журналу (не syslog)"
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr "Якщо sudo викликано без параметрів, запускати командну оболонку"
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr "Встановлювати $HOME відповідно до вказаного користувача для запуску оболонки з -s"
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr "Завжди встановлювати значенням $HOME домашній каталог вказаного користувача"
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr "Дозволити збирання даних з метою формування зрозумілих повідомлень про помилки"
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr "У файлі sudoers слід вказати повні назви вузлів"
+
+#: plugins/sudoers/def_data.c:115
+msgid "Insult the user when they enter an incorrect password"
+msgstr "Знущатися з користувача, якщо введено помилковий пароль"
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr "Дозволяти користувачеві виконувати sudo, лише якщо з ним пов’язано tty"
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr "Visudo зважатимwill honor the EDITOR environment variable"
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr "Надсилати запит на пароль root, а не користувача"
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr "Надсилати запит щодо пароля runas_default, але пароля самого користувача"
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr "Надсилати запит щодо пароля потрібного користувача, але пароля самого користувача"
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr "Застосовувати типові параметри у класі вказаного користувача, якщо такий клас є"
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr "Встановити значення змінних середовища LOGNAME і USER"
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr "Встановлювати для потрібного користувача ефективний uid, а не справжній uid"
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr "Не ініціалізувати вектор групи відповідно до вказаного користувача"
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr "Позиція, на якій слід переносити рядки файла журналу (0 — без перенесення): %d"
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr "Час очікування на часовий штамп розпізнавання: %.1f хвилина"
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr "Час очікування на введення пароля: %.1f хвилина"
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr "Кількість спроб введення пароля: %d"
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr "Потрібне значення umask або 0777 для користувачевого: 0%o"
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr "Шлях до файла журналу: %s"
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr "Шлях до програми ел. пошти: %s"
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr "Параметри програми ел. пошти: %s"
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr "Адреса, на яку надсилатимуться листи: %s"
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr "Адреса, з якої надсилатимуться листи: %s"
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr "Тема листів: %s"
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr "Повідомлення про помилковий пароль: %s"
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr "Шлях до каталогу часових штампів розпізнавання: %s"
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr "Власник каталогу часових штампів розпізнавання: %s"
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr "Користувачів цієї групи звільнено від потреби у введенні пароля і PATH: %s"
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr "Типовий запит пароля: %s"
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr "Якщо встановлено, запит щодо паролю замінюватиме запит системи."
+
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr "Типовий користувач для запуску команд: %s"
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr "Значення для заміни $PATH користувача: %s"
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr "Шлях до редактора, який використовуватиме visudo: %s"
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr "Умови запиту пароля для псевдокоманди «list»: %s"
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr "Умови запиту пароля для псевдокоманди «verify»: %s"
+
+#: plugins/sudoers/def_data.c:243
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr "Попередньо завантажувати фіктивні функції виконання з «noexec_file»"
+
+#: plugins/sudoers/def_data.c:247
+#, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr "Файл, що містить фіктивні функції виконання: %s"
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr "Чи слід ігнорувати локальний файл sudoers, якщо є доступ до каталогу LDAP"
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr "Дескриптори файлів >= %d буде закрито перед виконанням команди"
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr "Якщо встановлено, користувачі можуть перевизначати значення «closefrom» за допомогою параметра -C"
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr "Дозволити користувачам встановлювати значення довільних змінних середовища"
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr "Відновити типовий набір змінних середовища"
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr "Змінні середовища, коректність яких слід перевіряти:"
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr "Змінні середовища, які слід вилучити:"
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr "Змінні середовища, які слід зберегти:"
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr "Роль SELinux, яку слід використати у новому контексті захисту: %s"
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr "Тип SELinux, який слід використати у новому контексті захисту: %s"
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr "Шлях до специфічного для sudo файла середовища: %s"
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr "Локаль, яку слід використати під час обробки sudoers: %s"
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr "Дозволити sudo надсилати запит щодо пароля, навіть якщо цей запит не можна буде побачити"
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr "Супроводжувати введення користувачем пароля показом замінників символів пароля"
+
+#: plugins/sudoers/def_data.c:307
+msgid "Use faster globbing that is less accurate but does not access the filesystem"
+msgstr "Швидше встановлення відповідності, менш точне, але без доступу до файлової системи"
+
+#: plugins/sudoers/def_data.c:311
+msgid "The umask specified in sudoers will override the user's, even if it is more permissive"
+msgstr "Значення umask, вказане у sudoers, перевизначатиме значення користувача, навіть якщо це значення відкриває ширший доступ"
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr "Записувати дані, вказані користувачем під час виконання команди"
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr "Записувати дані, виведені командою під час виконання"
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr "Стискати журнали за допомогою zlib"
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr "Завжди запускати команди у псевдо-tty"
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr "Додаток для підтримки не-Unix груп"
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr "Каталог, у якому слід зберігати журнали введення/виведення"
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr "Файл, у якому слід зберігати журнал введення/виведення даних"
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr "Додати запис до файла utmp/utmpx під час розміщення pty"
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr "Встановити користувача у utmp у значення користувача, від імені якого виконується команда"
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+"Можливі параметри у рядку «Defaults» sudoers:\n"
+"\n"
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr "%s: %.*s\n"
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr "невідомий запис типових параметрів «%s»"
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr "значення «%s» є некоректним для параметра «%s»"
+
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr "не вказано значення для «%s»"
+
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr "значення для «%s» має починатися з «/»"
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr "параметру «%s» не потрібно передавати значення"
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr "внутрішня помилка, переповнення sudo_setenv()"
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr "sudo_putenv: помилкове значення envp, невідповідність довжин"
+
+#: plugins/sudoers/env.c:698
+#, c-format
+msgid "sorry, you are not allowed to set the following environment variables: %s"
+msgstr "вибачте, вам не дозволено встановлювати такі змінні середовища: %s"
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:899 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ">>> %s: %s поблизу рядка %d <<<"
+
+#: plugins/sudoers/group_plugin.c:90
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: plugins/sudoers/group_plugin.c:102
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s має належати користувачеві з uid %d"
+
+#: plugins/sudoers/group_plugin.c:106
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr "%s має бути доступним до запису лише для власника"
+
+#: plugins/sudoers/group_plugin.c:113
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "не вдалося виконати dlopen для %s: %s"
+
+#: plugins/sudoers/group_plugin.c:118
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr "не вдалося знайти символ «group_plugin» у %s"
+
+#: plugins/sudoers/group_plugin.c:123
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr "%s: несумісна основна версія додатка обробки груп %d, мало бути — %d"
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr "Пари локальних IP-адрес і масок мережі:\n"
+
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:977
+#, c-format
+msgid "unable to read %s"
+msgstr "не вдалося прочитати %s"
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr "некоректний номер у послідовності %s"
+
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr "не вдалося створити %s"
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:356
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr "не вдалося встановити локаль у значення «%s», використовуємо локаль «C»"
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr "sudo_ldap_conf_add_ports: занадто великий номер порту"
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr "sudo_ldap_conf_add_ports: вихід за межі розширеного буфера вузла"
+
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr "непідтримуваний тип адреси LDAP: %s"
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr "некоректна адреса: %s"
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr "не можна використовувати суміш з адрес ldap і ldaps"
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr "не можна використовувати суміш з ldaps і starttls"
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr "sudo_ldap_parse_uri: вихід за межі пам’яті під час побудови буфера вузла"
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr "не вдалося ініціалізувати базу даних сертифікатів і ключів SSL: %s"
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr "не вдалося отримати гринвіцький час"
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr "не вдалося виконати форматування часового штампа"
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr "не вдалося побудувати фільтр часу"
+
+#: plugins/sudoers/ldap.c:1047
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr "sudo_ldap_build_pass1: невідповідність розміщення"
+
+#: plugins/sudoers/ldap.c:1542
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+"\n"
+"Роль LDAP: %s\n"
+
+#: plugins/sudoers/ldap.c:1544
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+"\n"
+"Роль у LDAP: НЕВІДОМА\n"
+
+#: plugins/sudoers/ldap.c:1591
+#, c-format
+msgid "    Order: %s\n"
+msgstr "    Порядок: %s\n"
+
+#: plugins/sudoers/ldap.c:1599
+#, c-format
+msgid "    Commands:\n"
+msgstr "    Команди:\n"
+
+#: plugins/sudoers/ldap.c:1986
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr "не вдалося ініціалізувати LDAP: %s"
+
+#: plugins/sudoers/ldap.c:2017
+#, c-format
+msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"
+msgstr "start_tls вказано, але у бібліотеках LDAP не передбачено підтримки ldap_start_tls_s() або ldap_start_tls_s_np()"
+
+#: plugins/sudoers/ldap.c:2248
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr "некоректний атрибут sudoOrder: %s"
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr "не вдалося відкрити систему аудита"
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr "внутрішня помилка, переповнення linux_audit_command()"
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr "не вдалося надіслати повідомлення аудита"
+
+#: plugins/sudoers/logging.c:192
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr "не вдалося відкрити файл журналу: %s: %s"
+
+#: plugins/sudoers/logging.c:195
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr "не вдалося заблокувати файл журналу: %s: %s"
+
+#: plugins/sudoers/logging.c:249
+msgid "user NOT in sudoers"
+msgstr "користувача немає у списку sudoers"
+
+#: plugins/sudoers/logging.c:251
+msgid "user NOT authorized on host"
+msgstr "користувача не уповноважено на дії на вузлі"
+
+#: plugins/sudoers/logging.c:253
+msgid "command not allowed"
+msgstr "виконання команди заборонено"
+
+#: plugins/sudoers/logging.c:263
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr "%s немає у файлі sudoers. Запис про подію додано до звіту.\n"
+
+#: plugins/sudoers/logging.c:266
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr "%s заборонено виконувати sudo на %s. Запис про подію додано до звіту.\n"
+
+#: plugins/sudoers/logging.c:270
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr "Вибачте, користувач %s не має права виконувати sudo на %s.\n"
+
+#: plugins/sudoers/logging.c:273
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr "Вибачте, користувач %s не має права виконувати «%s%s%s» від імені %s%s%s на %s.\n"
+
+#: plugins/sudoers/logging.c:408
+#, c-format
+msgid "unable to fork"
+msgstr "не вдалося створити відгалуження"
+
+#: plugins/sudoers/logging.c:415 plugins/sudoers/logging.c:472
+#, c-format
+msgid "unable to fork: %m"
+msgstr "не вдалося створити відгалуження: %m"
+
+#: plugins/sudoers/logging.c:465
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr "не вдалося відкрити канал: %m"
+
+#: plugins/sudoers/logging.c:484
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr "не вдалося здублювати stdin: %m"
+
+#: plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr "не вдалося виконати %s: %m"
+
+#: plugins/sudoers/logging.c:728
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr "внутрішня помилка: недостатньо місця для рядка журналу"
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr "помилка обробки у %s поблизу рядка %d"
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+"\n"
+"Запис sudoers:\n"
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr "    Користувачі для запуску: "
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr "    Групи для запуску: "
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+"    Команди:\n"
+"\t"
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ": "
+
+#: plugins/sudoers/pwutil.c:251
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr "не вдалося кешувати uid %u (%s), запис вже існує"
+
+#: plugins/sudoers/pwutil.c:259
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr "не вдалося кешувати uid %u, запис вже існує"
+
+#: plugins/sudoers/pwutil.c:295 plugins/sudoers/pwutil.c:304
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr "не вдалося кешувати користувача %s, запис вже існує"
+
+#: plugins/sudoers/pwutil.c:607
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr "не вдалося кешувати gid %u (%s), запис вже існує"
+
+#: plugins/sudoers/pwutil.c:615
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr "не вдалося кешувати gid %u, запис вже існує"
+
+#: plugins/sudoers/pwutil.c:644 plugins/sudoers/pwutil.c:653
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr "не вдалося кешувати групу %s, запис вже існує"
+
+#: plugins/sudoers/set_perms.c:109 plugins/sudoers/set_perms.c:355
+#: plugins/sudoers/set_perms.c:587 plugins/sudoers/set_perms.c:821
+msgid "perm stack overflow"
+msgstr "переповнення стека доступу"
+
+#: plugins/sudoers/set_perms.c:117 plugins/sudoers/set_perms.c:363
+#: plugins/sudoers/set_perms.c:595 plugins/sudoers/set_perms.c:829
+msgid "perm stack underflow"
+msgstr "вичерпання стека доступу"
+
+#: plugins/sudoers/set_perms.c:223 plugins/sudoers/set_perms.c:455
+#: plugins/sudoers/set_perms.c:692
+msgid "unable to change to runas gid"
+msgstr "не вдалося змінити gid на runas"
+
+#: plugins/sudoers/set_perms.c:231 plugins/sudoers/set_perms.c:462
+#: plugins/sudoers/set_perms.c:699
+msgid "unable to change to runas uid"
+msgstr "не вдалося змінити uid на runas"
+
+#: plugins/sudoers/set_perms.c:245 plugins/sudoers/set_perms.c:475
+#: plugins/sudoers/set_perms.c:712
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr "не вдалося змінити gid на sudoers"
+
+#: plugins/sudoers/set_perms.c:286 plugins/sudoers/set_perms.c:513
+#: plugins/sudoers/set_perms.c:750 plugins/sudoers/set_perms.c:890
+msgid "too many processes"
+msgstr "забагато процесів"
+
+#: plugins/sudoers/set_perms.c:952
+msgid "unable to set runas group vector"
+msgstr "не вдалося встановити вектор групи виконання"
+
+#: plugins/sudoers/sudo_nss.c:238
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr "Відповідність записів Defaults для %s на цьому вузлі:\n"
+
+#: plugins/sudoers/sudo_nss.c:251
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr "Типові значення для запуску від імені і команд для %s:\n"
+
+#: plugins/sudoers/sudo_nss.c:264
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr "Користувач %s має право виконувати на цьому вузлі такі команди:\n"
+
+#: plugins/sudoers/sudo_nss.c:274
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr "Користувач %s не має права виконувати sudo на %s.\n"
+
+#: plugins/sudoers/sudoers.c:198 plugins/sudoers/sudoers.c:233
+#: plugins/sudoers/sudoers.c:907
+msgid "problem with defaults entries"
+msgstr "проблема з типовими записами"
+
+#: plugins/sudoers/sudoers.c:202
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr "не знайдено коректних джерел даних sudoers, завершення роботи"
+
+#: plugins/sudoers/sudoers.c:256
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr "не вдалося виконати %s: %s"
+
+#: plugins/sudoers/sudoers.c:305
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr "sudoers вказує, що sudo не можна користуватися для виконання команд від  root"
+
+#: plugins/sudoers/sudoers.c:312
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr "вам не дозволено використовувати параметр -C"
+
+#: plugins/sudoers/sudoers.c:402
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr "власник часового штампа (%s): не знайдено користувача з таким іменем"
+
+#: plugins/sudoers/sudoers.c:418
+msgid "no tty"
+msgstr "немає tty"
+
+#: plugins/sudoers/sudoers.c:419
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr "вибачте, для виконання sudo вашому користувачеві потрібен tty"
+
+#: plugins/sudoers/sudoers.c:462
+msgid "No user or host"
+msgstr "Немає користувача або вузла"
+
+#: plugins/sudoers/sudoers.c:476 plugins/sudoers/sudoers.c:497
+#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:1452
+#: plugins/sudoers/sudoers.c:1453
+#, c-format
+msgid "%s: command not found"
+msgstr "%s: команду не знайдено"
+
+#: plugins/sudoers/sudoers.c:478 plugins/sudoers/sudoers.c:494
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+"пропущено «%s» знайдений у «.»\n"
+"Скористайтеся командою «sudo ./%s», якщо вам потрібно виконати саме «%s»."
+
+#: plugins/sudoers/sudoers.c:483
+msgid "validation failure"
+msgstr "помилка під час спроби перевірки"
+
+#: plugins/sudoers/sudoers.c:493
+msgid "command in current directory"
+msgstr "команда у поточному каталозі"
+
+#: plugins/sudoers/sudoers.c:505
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr "вибачте, вам не дозволено зберігати середовище"
+
+#: plugins/sudoers/sudoers.c:890
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr "внутрішня помилка, переповнення set_cmnd()"
+
+#: plugins/sudoers/sudoers.c:935
+#, c-format
+msgid "fixed mode on %s"
+msgstr "виправлено режим на %s"
+
+#: plugins/sudoers/sudoers.c:939
+#, c-format
+msgid "set group on %s"
+msgstr "встановлено групу у %s"
+
+#: plugins/sudoers/sudoers.c:942
+#, c-format
+msgid "unable to set group on %s"
+msgstr "не вдалося встановити групу на %s"
+
+#: plugins/sudoers/sudoers.c:945
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr "не вдалося виправити режим на %s"
+
+#: plugins/sudoers/sudoers.c:958
+#, c-format
+msgid "%s is not a regular file"
+msgstr "%s не є звичайним файлом"
+
+#: plugins/sudoers/sudoers.c:960
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr "%s має режим доступу 0%o, має бути 0%o"
+
+#: plugins/sudoers/sudoers.c:964
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr "%s належить uid %u, має належати %u"
+
+#: plugins/sudoers/sudoers.c:967
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr "%s належить gid %u, має належати %u"
+
+#: plugins/sudoers/sudoers.c:1011
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr "використовувати «-c %s» може лише root"
+
+#: plugins/sudoers/sudoers.c:1021
+#, c-format
+msgid "unknown login class: %s"
+msgstr "невідомий клас входу: %s"
+
+#: plugins/sudoers/sudoers.c:1055
+#, c-format
+msgid "unable to resolve host %s"
+msgstr "не вдалося визначити адресу вузла %s"
+
+#: plugins/sudoers/sudoers.c:1105 plugins/sudoers/testsudoers.c:342
+#, c-format
+msgid "unknown group: %s"
+msgstr "невідома група: %s"
+
+#: plugins/sudoers/sudoers.c:1137
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr "Додаток правил sudoers версії %s\n"
+
+#: plugins/sudoers/sudoers.c:1139
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr "Граматична перевірка файла sudoers версії %d\n"
+
+#: plugins/sudoers/sudoers.c:1143
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+"\n"
+"Шлях до sudoers: %s\n"
+
+#: plugins/sudoers/sudoers.c:1146
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr "Шлях до nsswitch: %s\n"
+
+#: plugins/sudoers/sudoers.c:1148
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr "Шлях до ldap.conf: %s\n"
+
+#: plugins/sudoers/sudoers.c:1149
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr "Шлях до ldap.secret: %s\n"
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr "некоректний параметр фільтрування: %s"
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr "некоректне значення макс. очікування: %s"
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr "некоректний коефіцієнт швидкості: %s"
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr "%s, версія %s\n"
+
+#: plugins/sudoers/sudoreplay.c:310
+#, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr "%s/%.2s/%.2s/%.2s/timing: %s"
+
+#: plugins/sudoers/sudoreplay.c:316
+#, c-format
+msgid "%s/%s/timing: %s"
+msgstr "%s/%s/timing: %s"
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr "некоректний файл журналу %s"
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr "Відтворення сеансу sudo: %s"
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr "не вдалося перевести tty у режим без обробки даних"
+
+#: plugins/sudoers/sudoreplay.c:383
+#, c-format
+msgid "invalid timing file line: %s"
+msgstr "некоректний рядок у файлі timing: %s"
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr "запис до стандартного виводу даних"
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr "nanosleep: tv_sec %ld, tv_nsec %ld"
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr "неоднозначний вираз «%s»"
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr "забагато виразів у дужках, максимальна можлива кількість — %d"
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr "зайва дужка, «)», у виразі"
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr "невідомий ключ пошуку «%s»"
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr "%s потребує визначення аргументу"
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr "некоректний формальний вираз: %s"
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr "не вдалося обробити дату «%s»"
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr "зайва дужка, «(», у виразі"
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr "помилкове завершальне «or»"
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr "помилкове завершальне «!»"
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr "некоректний формальний вираз: %s"
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr "використання: %s [-h] [-d каталог] [-m макс_очік] [-s коеф_швидкості] ідентифікатор\n"
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr "використання: %s [-h] [-d каталог] -l [вираз для пошуку]\n"
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+"%s — відтворення журналів сеансів sudo\n"
+"\n"
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+"\n"
+"Параметри:\n"
+"  -d каталог       вказати каталог для журналів сеансу\n"
+"  -f фільтр        вказати, який тип вводу-виводу слід показувати\n"
+"  -h               показати довідкове повідомлення і завершити роботу\n"
+"  -l [вираз]       показати список можливих ідентифікаторів сеансів, відповідних до виразу\n"
+"  -m макс_очік     максимальний час (у секундах) очікування між подіями\n"
+"  -s коеф_швидк    коефіцієнт прискорення або сповільнення виводу даних\n"
+"  -V               показати дані щодо версії і завершити роботу"
+
+#: plugins/sudoers/testsudoers.c:228
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr "внутрішня помилка, переповнення init_vars()"
+
+#: plugins/sudoers/testsudoers.c:304
+msgid "\thost  unmatched"
+msgstr "\tвідповідника вузла не знайдено"
+
+#: plugins/sudoers/testsudoers.c:307
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+"\n"
+"Команду дозволено"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+"\n"
+"Команду заборонено"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+"\n"
+"Не знайдено відповідника команди"
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr "не вдалося отримати потрібний об’єм пам’яті"
+
+#: toke.l:786
+msgid "too many levels of includes"
+msgstr "занадто високий рівень вкладеності"
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr "fill_args: переповнення буфера"
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr "Граматична перевірка %s, версія %d\n"
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr "вас немає у базі даних %s"
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr "натисніть Enter для редагування %s: "
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr "помилка запису"
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr "не вдалося обробити stat файл тимчасових даних (%s), %s не змінено"
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr "файл тимчасових даних має нульовий об’єм (%s), %s не змінено"
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr "помилка редактора (%s), %s не змінено"
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr "%s не змінено"
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr "не вдалося повторно відкрити файл тимчасових даних (%s), %s не змінено."
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr "не вдалося обробити файл тимчасових даних (%s), невідома помилка"
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr "внутрішня помилка, не вдалося знайти %s у списку!"
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr "не вдалося встановити (uid, gid) %s у значення (%d, %d)"
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr "не вдалося змінити режим доступу до %s на значення 0%o"
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr "%s і %s не перебувають у одній файловій системі, використовуємо mv для перейменування"
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr "помилка команди: «%s %s %s», %s не змінено"
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr "помилка перейменування %s, %s не змінено"
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr "А зараз що? "
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+"Параметри:\n"
+"  (e) — повторне редагування файла sudoers\n"
+"  (x) — вийти без внесення змін до файла sudoers\n"
+"  (Q) — вийти зі збереженням файла sudoers (НЕБЕЗПЕЧНО!)\n"
+
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr "не вдалося виконати %s"
+
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr "не вдалося виконати %s"
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr "не вдалося обробити файл %s, невідома помилка"
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr "помилка обробки у %s поблизу рядка %d\n"
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr "помилка обробки у %s\n"
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr "%s: вдала обробка\n"
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr "%s: помилковий власник (uid, gid), має бути (%d, %d)\n"
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr "%s: помилкові права доступу, режим доступу має бути 0%o\n"
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr "%s зайнято, повторіть спробу пізніше"
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr "вказаного редактора (%s) не існує"
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr "не вдалося виконати stat для редактора (%s)"
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr "не знайдено жодного редактора (шлях до редактора = %s)"
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr "Помилка: цикл у %s_Alias «%s»"
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr "Попередження: цикл у %s_Alias «%s»"
+
+#: plugins/sudoers/visudo.c:990
+#, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr "Помилка: виявлено посилання %s_Alias «%s», яке не визначено"
+
+#: plugins/sudoers/visudo.c:991
+#, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr "Попередження: виявлено посилання %s_Alias «%s», яке не визначено"
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr "%s: невикористаний %s_Alias %s"
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+"%s — безпечне редагування файла sudoers\n"
+"\n"
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+"\n"
+"Параметри:\n"
+"  -c          режим лише перевірки\n"
+"  -f sudoers  вказати розташування файла sudoers\n"
+"  -h          показати довідкове повідомлення і завершити роботу\n"
+"  -q          стислі повідомлення щодо синтаксичних помилок\n"
+"  -s          строга перевірка синтаксису\n"
+"  -V          показати дані щодо версії і завершити роботу"
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr "не вдалося розпочати розпізнавання за BSD"
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr "некоректний тип розпізнавання"
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr "не вдалося налаштувати розпізнавання"
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr "не вдалося прочитати налаштування fwtk"
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr "не вдалося встановити з’єднання з сервером розпізнавання"
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr "втрачено зв’язок з сервером розпізнавання"
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+"помилка сервера розпізнавання:\n"
+"%s"
+
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr "%s: не вдалося обробити «%s»: %s"
+
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr "%s: не вдалося зібрати princ ('%s'): %s"
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr "%s: не вдалося визначити ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr "%s: не вдалося розмістити параметри: %s"
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr "%s: не вдалося отримати реєстраційні дані: %s"
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr "%s: не вдалося ініціалізувати ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr "%s: не вдалося зберегти реєстраційні дані у ccache: %s"
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr "%s: не вдалося отримати реєстраційний запис вузла: %s"
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr "%s: спроба перевірки TGT зазнала невдачі! Ймовірно, вас атаковано: %s"
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr "не вдалося ініціалізувати PAM"
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr "помилка під час спроби перевірки облікового запису. Ваш обліковий запис заблоковано?"
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr "Строк дії облікового запису або пароля збіг, визначте новий пароль і повторіть спробу"
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr "pam_chauthtok: %s"
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr "Строк дії пароля збіг, зверніться до адміністратора вашої системи щодо поновлення пароля"
+
+#: plugins/sudoers/auth/pam.c:161
+msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator"
+msgstr "Строк дії облікового запису збіг або у файлі налаштувань PAM немає розділу \"account\" для sudo. Повідомте про це адміністратора вашої системи."
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr "pam_authenticate: %s"
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr "Пароль: "
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr "Пароль:"
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr "не вдалося встановити зв’язок з сервером SecurID"
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr "не вдалося ініціалізувати бібліотеку програмного інтерфейсу до ACE"
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr "Ідентифікатор користувача заблоковано для розпізнавання SecurID"
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr "некоректна довжина імені користувача для SecurID"
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr "некоректний дескриптор розпізнавання для SecurID"
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr "спроба обміну даними з SecurID зазнала невдачі"
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr "невідома помилка SecurID"
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr "некоректна довжина коду пароля для SecurID"
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr "не вдалося ініціалізувати сеанс SIA"
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid "There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option."
+msgstr "sudo зібрано без можливостей з взаємодії з інструментами розпізнавання! Якщо ви хочете вимкнути розпізнавання, скористайтеся параметром налаштування --disable-authentication."
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+msgid "Invalid authentication methods compiled into sudo!  You may mix standalone and non-standalone authentication."
+msgstr "sudo зібрано з підтримкою некоректних способів розпізнавання! Можливе змішування власних і зовнішніх способів розпізнавання."
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] "%d невдала спроба введення пароля"
+msgstr[1] "%d невдалих спроби введення пароля"
+msgstr[2] "%d невдалих спроб введення пароля"
+msgstr[3] "одна невдала спроба введення пароля"
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr "Способи розпізнавання:"
+
+#~ msgid "unable to get runas group vector"
+#~ msgstr "не вдалося отримати вектор групи виконання"
+
+#~ msgid "unable to reset group vector"
+#~ msgstr "не вдалося відновити початкове значення вектора групи"
+
+#~ msgid "unable to get group vector"
+#~ msgstr "не вдалося отримати вектор групи"
+
+#~ msgid "%s: %s_Alias `%s' references self"
+#~ msgstr "%s: %s_Alias «%s» рекурсивно посилається на себе"
diff --git a/plugins/sudoers/po/zh_CN.mo b/plugins/sudoers/po/zh_CN.mo
new file mode 100644 (file)
index 0000000..a569b80
Binary files /dev/null and b/plugins/sudoers/po/zh_CN.mo differ
diff --git a/plugins/sudoers/po/zh_CN.po b/plugins/sudoers/po/zh_CN.po
new file mode 100644 (file)
index 0000000..55b7206
--- /dev/null
@@ -0,0 +1,1740 @@
+# Chinese simplified translation for sudoers.
+# This file is put in the public domain.
+# Wylmer Wang <wantinghard@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudoers 1.8.2-rc8\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-07-27 14:21-0400\n"
+"PO-Revision-Date: 2011-07-28 19:21+0800\n"
+"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.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"
+
+#: plugins/sudoers/alias.c:122
+#, c-format
+msgid "Alias `%s' already defined"
+msgstr "别名“%s”已定义"
+
+#: plugins/sudoers/bsm_audit.c:58 plugins/sudoers/bsm_audit.c:61
+#: plugins/sudoers/bsm_audit.c:109 plugins/sudoers/bsm_audit.c:113
+#: plugins/sudoers/bsm_audit.c:163 plugins/sudoers/bsm_audit.c:167
+msgid "getaudit: failed"
+msgstr "getaudit:失败"
+
+#: plugins/sudoers/bsm_audit.c:87 plugins/sudoers/bsm_audit.c:148
+msgid "Could not determine audit condition"
+msgstr "无法确定审核条件"
+
+#: plugins/sudoers/bsm_audit.c:98
+msgid "getauid failed"
+msgstr "getauid 失败"
+
+#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:157
+msgid "au_open: failed"
+msgstr "au_open:失败"
+
+#: plugins/sudoers/bsm_audit.c:115 plugins/sudoers/bsm_audit.c:169
+msgid "au_to_subject: failed"
+msgstr "au_to_subject:失败"
+
+#: plugins/sudoers/bsm_audit.c:119 plugins/sudoers/bsm_audit.c:173
+msgid "au_to_exec_args: failed"
+msgstr "au_to_exec_args:失败"
+
+#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:182
+msgid "au_to_return32: failed"
+msgstr "au_to_return32:失败"
+
+#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:185
+msgid "unable to commit audit record"
+msgstr "无法提交审核记录"
+
+#: plugins/sudoers/bsm_audit.c:155
+msgid "getauid: failed"
+msgstr "getauid:失败"
+
+#: plugins/sudoers/bsm_audit.c:178
+msgid "au_to_text: failed"
+msgstr "au_to_text:失败"
+
+#: plugins/sudoers/check.c:141
+#, c-format
+msgid "sorry, a password is required to run %s"
+msgstr "抱歉,执行 %s 需要密码"
+
+#: plugins/sudoers/check.c:225 plugins/sudoers/iolog.c:169
+#: plugins/sudoers/sudoers.c:953 plugins/sudoers/sudoreplay.c:325
+#: plugins/sudoers/sudoreplay.c:334 plugins/sudoers/sudoreplay.c:675
+#: plugins/sudoers/sudoreplay.c:767 plugins/sudoers/visudo.c:700
+#, c-format
+msgid "unable to open %s"
+msgstr "无法打开 %s"
+
+#: plugins/sudoers/check.c:229 plugins/sudoers/iolog.c:199
+#, c-format
+msgid "unable to write to %s"
+msgstr "无法写入 %s"
+
+#: plugins/sudoers/check.c:237 plugins/sudoers/check.c:475
+#: plugins/sudoers/check.c:525 plugins/sudoers/iolog.c:122
+#: plugins/sudoers/iolog.c:153
+#, c-format
+msgid "unable to mkdir %s"
+msgstr "无法创建目录 %s"
+
+#: plugins/sudoers/check.c:370
+#, c-format
+msgid "internal error, expand_prompt() overflow"
+msgstr "内部错误,expand_prompt() 溢出"
+
+#: plugins/sudoers/check.c:426
+#, c-format
+msgid "timestamp path too long: %s"
+msgstr "时间戳路径过长:%s"
+
+#: plugins/sudoers/check.c:454 plugins/sudoers/check.c:498
+#: plugins/sudoers/iolog.c:155
+#, c-format
+msgid "%s exists but is not a directory (0%o)"
+msgstr "%s 存在,但不是目录(0%o)"
+
+#: plugins/sudoers/check.c:457 plugins/sudoers/check.c:501
+#: plugins/sudoers/check.c:546
+#, c-format
+msgid "%s owned by uid %u, should be uid %u"
+msgstr "%s 属于用户 ID %u,应为用户 ID %u"
+
+#: plugins/sudoers/check.c:462 plugins/sudoers/check.c:506
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0700"
+msgstr "%s 对非所有者可写(0%o),模式应该为 0700"
+
+#: plugins/sudoers/check.c:470 plugins/sudoers/check.c:514
+#: plugins/sudoers/check.c:582 plugins/sudoers/sudoers.c:939
+#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:500
+#, c-format
+msgid "unable to stat %s"
+msgstr "无法 stat %s"
+
+#: plugins/sudoers/check.c:540
+#, c-format
+msgid "%s exists but is not a regular file (0%o)"
+msgstr "%s 存在,但不是常规文件(0%o)"
+
+#: plugins/sudoers/check.c:552
+#, c-format
+msgid "%s writable by non-owner (0%o), should be mode 0600"
+msgstr "%s 对非所有者可写(0%o),模式应该为 0600"
+
+#: plugins/sudoers/check.c:606
+#, c-format
+msgid "timestamp too far in the future: %20.20s"
+msgstr "时间戳太超前:%20.20s"
+
+#: plugins/sudoers/check.c:652
+#, c-format
+msgid "unable to remove %s (%s), will reset to the epoch"
+msgstr "无法移除 %s (%s),将重设为戳记"
+
+#: plugins/sudoers/check.c:659
+#, c-format
+msgid "unable to reset %s to the epoch"
+msgstr "无法将 %s 重设为戳记"
+
+#: plugins/sudoers/check.c:713 plugins/sudoers/check.c:719
+#, c-format
+msgid "unknown uid: %u"
+msgstr "未知的用户 ID:%u"
+
+#: plugins/sudoers/check.c:716 plugins/sudoers/sudoers.c:747
+#: plugins/sudoers/sudoers.c:813 plugins/sudoers/sudoers.c:814
+#: plugins/sudoers/sudoers.c:1070 plugins/sudoers/testsudoers.c:200
+#: plugins/sudoers/testsudoers.c:330
+#, c-format
+msgid "unknown user: %s"
+msgstr "未知用户:%s"
+
+#: plugins/sudoers/def_data.c:27
+#, c-format
+msgid "Syslog facility if syslog is being used for logging: %s"
+msgstr "若使用了 syslog,用于记录日志的 syslog 设施:%s"
+
+#: plugins/sudoers/def_data.c:31
+#, c-format
+msgid "Syslog priority to use when user authenticates successfully: %s"
+msgstr "用户认证成功时使用的 syslog 优先级:%s"
+
+#: plugins/sudoers/def_data.c:35
+#, c-format
+msgid "Syslog priority to use when user authenticates unsuccessfully: %s"
+msgstr "用户认证不成功时使用的 syslog 优先级:%s"
+
+#: plugins/sudoers/def_data.c:39
+msgid "Put OTP prompt on its own line"
+msgstr "将 OPT 提示放在独自的行中"
+
+#: plugins/sudoers/def_data.c:43
+msgid "Ignore '.' in $PATH"
+msgstr "忽略 $PATH 中的“.”"
+
+#: plugins/sudoers/def_data.c:47
+msgid "Always send mail when sudo is run"
+msgstr "在运行 sudo 时总是发送邮件"
+
+#: plugins/sudoers/def_data.c:51
+msgid "Send mail if user authentication fails"
+msgstr "在用户认证失败时发送邮件"
+
+#: plugins/sudoers/def_data.c:55
+msgid "Send mail if the user is not in sudoers"
+msgstr "在用户不在 sudoers 列表中时发送邮件"
+
+#: plugins/sudoers/def_data.c:59
+msgid "Send mail if the user is not in sudoers for this host"
+msgstr "在用户不在此主机的 sudoers 列表中时发送邮件"
+
+#: plugins/sudoers/def_data.c:63
+msgid "Send mail if the user is not allowed to run a command"
+msgstr "在用户不允许执行某个命令时发送邮件"
+
+#: plugins/sudoers/def_data.c:67
+msgid "Use a separate timestamp for each user/tty combo"
+msgstr "对每个用户/终端组合使用独立的时间戳"
+
+#: plugins/sudoers/def_data.c:71
+msgid "Lecture user the first time they run sudo"
+msgstr "在用户第一次运行 sudo 时向他致辞"
+
+#: plugins/sudoers/def_data.c:75
+#, c-format
+msgid "File containing the sudo lecture: %s"
+msgstr "包含 sudo 致辞的文件:%s"
+
+#: plugins/sudoers/def_data.c:79
+msgid "Require users to authenticate by default"
+msgstr "默认要求用户认证"
+
+#: plugins/sudoers/def_data.c:83
+msgid "Root may run sudo"
+msgstr "root 可以运行 sudo"
+
+#: plugins/sudoers/def_data.c:87
+msgid "Log the hostname in the (non-syslog) log file"
+msgstr "将主机名记录在(非 syslog)的日志文件中"
+
+#: plugins/sudoers/def_data.c:91
+msgid "Log the year in the (non-syslog) log file"
+msgstr "将年份记录在(非 syslog)的日志文件中"
+
+#: plugins/sudoers/def_data.c:95
+msgid "If sudo is invoked with no arguments, start a shell"
+msgstr "如果不带参数调用 sudo,启动一个 shell"
+
+#: plugins/sudoers/def_data.c:99
+msgid "Set $HOME to the target user when starting a shell with -s"
+msgstr "若使用 -s 选项启动 shell,将 $HOME 设为目标用户的主目录"
+
+#: plugins/sudoers/def_data.c:103
+msgid "Always set $HOME to the target user's home directory"
+msgstr "总是将 $HOME 设为目标用户的主目录"
+
+#: plugins/sudoers/def_data.c:107
+msgid "Allow some information gathering to give useful error messages"
+msgstr "允许收集一些信息,以提供有用的错误消息"
+
+#: plugins/sudoers/def_data.c:111
+msgid "Require fully-qualified hostnames in the sudoers file"
+msgstr "要求 sudoers 文件中包含完全限定的主机名"
+
+#: plugins/sudoers/def_data.c:115
+#, fuzzy
+msgid "Insult the user when they enter an incorrect password"
+msgstr "在用户输入错误密码时对其警告"
+
+#: plugins/sudoers/def_data.c:119
+msgid "Only allow the user to run sudo if they have a tty"
+msgstr "只允许拥有终端的用户执行 sudo"
+
+#: plugins/sudoers/def_data.c:123
+msgid "Visudo will honor the EDITOR environment variable"
+msgstr "Visudo 将优先考虑 EDITOR 环境变量"
+
+#: plugins/sudoers/def_data.c:127
+msgid "Prompt for root's password, not the users's"
+msgstr "询问 root 用户的密码而非用户的密码"
+
+#: plugins/sudoers/def_data.c:131
+msgid "Prompt for the runas_default user's password, not the users's"
+msgstr "询问 runas_default 用户的密码,而非用户密码"
+
+#: plugins/sudoers/def_data.c:135
+msgid "Prompt for the target user's password, not the users's"
+msgstr "询问目标用户的密码,而非用户密码"
+
+#: plugins/sudoers/def_data.c:139
+msgid "Apply defaults in the target user's login class if there is one"
+msgstr "应用目标用户登录类别中的默认设置,如果没有设置的话"
+
+#: plugins/sudoers/def_data.c:143
+msgid "Set the LOGNAME and USER environment variables"
+msgstr "设置 LOGNAME 和 USER 环境变量"
+
+#: plugins/sudoers/def_data.c:147
+msgid "Only set the effective uid to the target user, not the real uid"
+msgstr "只将有效用户 ID 设为目标用户的,而不是实际用户 ID"
+
+#: plugins/sudoers/def_data.c:151
+msgid "Don't initialize the group vector to that of the target user"
+msgstr "不将组向量初始化为目标用户的"
+
+#: plugins/sudoers/def_data.c:155
+#, c-format
+msgid "Length at which to wrap log file lines (0 for no wrap): %d"
+msgstr "日志文件折行的长度(0 则不折行):%d"
+
+#: plugins/sudoers/def_data.c:159
+#, c-format
+msgid "Authentication timestamp timeout: %.1f minutes"
+msgstr "认证时间戳延时:%.1f 分钟"
+
+#: plugins/sudoers/def_data.c:163
+#, c-format
+msgid "Password prompt timeout: %.1f minutes"
+msgstr "密码提示延时:%.1f 分钟"
+
+#: plugins/sudoers/def_data.c:167
+#, c-format
+msgid "Number of tries to enter a password: %d"
+msgstr "输入密码的尝试次数:%d"
+
+#: plugins/sudoers/def_data.c:171
+#, c-format
+msgid "Umask to use or 0777 to use user's: 0%o"
+msgstr "要使用的 umask,或 0777 使用用户的:0%o"
+
+#: plugins/sudoers/def_data.c:175
+#, c-format
+msgid "Path to log file: %s"
+msgstr "日志文件路径:%s"
+
+#: plugins/sudoers/def_data.c:179
+#, c-format
+msgid "Path to mail program: %s"
+msgstr "邮件程序路径:%s"
+
+#: plugins/sudoers/def_data.c:183
+#, c-format
+msgid "Flags for mail program: %s"
+msgstr "邮件程序标志:%s"
+
+#: plugins/sudoers/def_data.c:187
+#, c-format
+msgid "Address to send mail to: %s"
+msgstr "发送邮件的地址:%s"
+
+#: plugins/sudoers/def_data.c:191
+#, c-format
+msgid "Address to send mail from: %s"
+msgstr "接收邮件的地址:%s"
+
+#: plugins/sudoers/def_data.c:195
+#, c-format
+msgid "Subject line for mail messages: %s"
+msgstr "邮件消息的主题行:%s"
+
+#: plugins/sudoers/def_data.c:199
+#, c-format
+msgid "Incorrect password message: %s"
+msgstr "密码错误消息:%s"
+
+#: plugins/sudoers/def_data.c:203
+#, c-format
+msgid "Path to authentication timestamp dir: %s"
+msgstr "认证时间戳文件夹的路径:%s"
+
+#: plugins/sudoers/def_data.c:207
+#, c-format
+msgid "Owner of the authentication timestamp dir: %s"
+msgstr "认证时间戳的所有者:%s"
+
+#: plugins/sudoers/def_data.c:211
+#, c-format
+msgid "Users in this group are exempt from password and PATH requirements: %s"
+msgstr "此组的用户不要求密码和 PATH:%s"
+
+#: plugins/sudoers/def_data.c:215
+#, c-format
+msgid "Default password prompt: %s"
+msgstr "默认密码提示:%s"
+
+#: plugins/sudoers/def_data.c:219
+msgid "If set, passprompt will override system prompt in all cases."
+msgstr "如果设置,密码提示将覆盖各种情况下的系统提示。"
+
+#: plugins/sudoers/def_data.c:223
+#, c-format
+msgid "Default user to run commands as: %s"
+msgstr "运行命令的默认用户:%s"
+
+#: plugins/sudoers/def_data.c:227
+#, c-format
+msgid "Value to override user's $PATH with: %s"
+msgstr "覆盖用户的 $PATH 变量的值:%s"
+
+#: plugins/sudoers/def_data.c:231
+#, c-format
+msgid "Path to the editor for use by visudo: %s"
+msgstr "visudo 所使用的编辑器的路径:%s"
+
+#: plugins/sudoers/def_data.c:235
+#, c-format
+msgid "When to require a password for 'list' pseudocommand: %s"
+msgstr "何时为“list”伪命令请求密码:%s"
+
+#: plugins/sudoers/def_data.c:239
+#, c-format
+msgid "When to require a password for 'verify' pseudocommand: %s"
+msgstr "何时为“verify”伪命令请求密码:%s"
+
+#: plugins/sudoers/def_data.c:243
+#, fuzzy
+msgid "Preload the dummy exec functions contained in 'noexec_file'"
+msgstr "预加载“noexec_file”中包含的哑 exec 函数"
+
+#: plugins/sudoers/def_data.c:247
+#, fuzzy, c-format
+msgid "File containing dummy exec functions: %s"
+msgstr "含有哑 exec 函数的文件:%s"
+
+#: plugins/sudoers/def_data.c:251
+msgid "If LDAP directory is up, do we ignore local sudoers file"
+msgstr "如果 LDAP 目录有效,是不是忽略本地的 sudoers 文件"
+
+#: plugins/sudoers/def_data.c:255
+#, c-format
+msgid "File descriptors >= %d will be closed before executing a command"
+msgstr ">= %d 的文件描述符将会在执行命令前关闭"
+
+#: plugins/sudoers/def_data.c:259
+msgid "If set, users may override the value of `closefrom' with the -C option"
+msgstr "如果设置,用户可以通过 -C 选项覆盖“closefrom”的值"
+
+#: plugins/sudoers/def_data.c:263
+msgid "Allow users to set arbitrary environment variables"
+msgstr "允许用户设置任意的环境变量"
+
+#: plugins/sudoers/def_data.c:267
+msgid "Reset the environment to a default set of variables"
+msgstr "将环境重设为默认的变量集"
+
+#: plugins/sudoers/def_data.c:271
+msgid "Environment variables to check for sanity:"
+msgstr "要检查完整性的环境变量:"
+
+#: plugins/sudoers/def_data.c:275
+msgid "Environment variables to remove:"
+msgstr "要移除的环境变量:"
+
+#: plugins/sudoers/def_data.c:279
+msgid "Environment variables to preserve:"
+msgstr "要保留的环境变量:"
+
+#: plugins/sudoers/def_data.c:283
+#, c-format
+msgid "SELinux role to use in the new security context: %s"
+msgstr "在新的安全环境中使用的 SELinux 角色:%s"
+
+#: plugins/sudoers/def_data.c:287
+#, c-format
+msgid "SELinux type to use in the new security context: %s"
+msgstr "在新的安全环境中使用的 SELinux 类型:%s"
+
+#: plugins/sudoers/def_data.c:291
+#, c-format
+msgid "Path to the sudo-specific environment file: %s"
+msgstr "sudo 特定环境文件的路径:%s"
+
+#: plugins/sudoers/def_data.c:295
+#, c-format
+msgid "Locale to use while parsing sudoers: %s"
+msgstr "解析 sudoers 时使用的区域设置:%s"
+
+#: plugins/sudoers/def_data.c:299
+msgid "Allow sudo to prompt for a password even if it would be visisble"
+msgstr "允许 sudo 询问密码,即使它不可见"
+
+#: plugins/sudoers/def_data.c:303
+msgid "Provide visual feedback at the password prompt when there is user input"
+msgstr "用户在询问密码窗口输入时提供视觉反馈"
+
+#: plugins/sudoers/def_data.c:307
+msgid "Use faster globbing that is less accurate but does not access the filesystem"
+msgstr "使用不太精确但不访问文件系统的较快通配方法"
+
+#: plugins/sudoers/def_data.c:311
+msgid "The umask specified in sudoers will override the user's, even if it is more permissive"
+msgstr "sudoers 中指定的 umask 会覆盖用户的,即使它允许的权限更多"
+
+#: plugins/sudoers/def_data.c:315
+msgid "Log user's input for the command being run"
+msgstr "记录用户在所执行命令中的输入"
+
+#: plugins/sudoers/def_data.c:319
+msgid "Log the output of the command being run"
+msgstr "记录所执行命令的输出"
+
+#: plugins/sudoers/def_data.c:323
+msgid "Compress I/O logs using zlib"
+msgstr "使用 zlib 压缩 I/O 日志"
+
+#: plugins/sudoers/def_data.c:327
+msgid "Always run commands in a pseudo-tty"
+msgstr "总是在伪终端中运行命令"
+
+#: plugins/sudoers/def_data.c:331
+msgid "Plugin for non-Unix group support"
+msgstr "用于非 Unix 组支持的插件"
+
+#: plugins/sudoers/def_data.c:335
+msgid "Directory in which to store input/output logs"
+msgstr "用于保存输入/输出日志的目录"
+
+#: plugins/sudoers/def_data.c:339
+msgid "File in which to store the input/output log"
+msgstr "用于保存输入/输出日志的文件"
+
+#: plugins/sudoers/def_data.c:343
+msgid "Add an entry to the utmp/utmpx file when allocating a pty"
+msgstr "在分配伪终端时向 utmp/utmpx 文件中添加一条记录"
+
+#: plugins/sudoers/def_data.c:347
+msgid "Set the user in utmp to the runas user, not the invoking user"
+msgstr "将 utmp 中的用户设为 runas 用户,而不是调用用户"
+
+#: plugins/sudoers/defaults.c:197
+msgid ""
+"Available options in a sudoers ``Defaults'' line:\n"
+"\n"
+msgstr ""
+"sudoers 中“Defaults”行中的可用选项:\n"
+"\n"
+
+#: plugins/sudoers/defaults.c:204 plugins/sudoers/defaults.c:215
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s:%s\n"
+
+#: plugins/sudoers/defaults.c:211
+#, c-format
+msgid "%s: %.*s\n"
+msgstr "%s:%.*s\n"
+
+#: plugins/sudoers/defaults.c:241
+#, c-format
+msgid "unknown defaults entry `%s'"
+msgstr "未知的默认条目“%s”"
+
+#: plugins/sudoers/defaults.c:249 plugins/sudoers/defaults.c:259
+#: plugins/sudoers/defaults.c:279 plugins/sudoers/defaults.c:292
+#: plugins/sudoers/defaults.c:305 plugins/sudoers/defaults.c:318
+#: plugins/sudoers/defaults.c:331 plugins/sudoers/defaults.c:351
+#: plugins/sudoers/defaults.c:361
+#, c-format
+msgid "value `%s' is invalid for option `%s'"
+msgstr "值“%s”对选项“%s”无效"
+
+#: plugins/sudoers/defaults.c:252 plugins/sudoers/defaults.c:262
+#: plugins/sudoers/defaults.c:270 plugins/sudoers/defaults.c:287
+#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:313
+#: plugins/sudoers/defaults.c:326 plugins/sudoers/defaults.c:346
+#: plugins/sudoers/defaults.c:357
+#, c-format
+msgid "no value specified for `%s'"
+msgstr "没有给“%s”指定值"
+
+#: plugins/sudoers/defaults.c:275
+#, c-format
+msgid "values for `%s' must start with a '/'"
+msgstr "“%s”的值必须以“/”开头"
+
+#: plugins/sudoers/defaults.c:337
+#, c-format
+msgid "option `%s' does not take a value"
+msgstr "“%s”选项不带值"
+
+#: plugins/sudoers/env.c:259
+#, c-format
+msgid "internal error, sudo_setenv() overflow"
+msgstr "内部错误,sudo_setenv()溢出"
+
+#: plugins/sudoers/env.c:289
+#, c-format
+msgid "sudo_putenv: corrupted envp, length mismatch"
+msgstr "sudo_putenv:envp 损坏,长度不符"
+
+#: plugins/sudoers/env.c:698
+#, c-format
+msgid "sorry, you are not allowed to set the following environment variables: %s"
+msgstr "对不起,您无权设置以下环境变量:%s"
+
+#: plugins/sudoers/find_path.c:68 plugins/sudoers/find_path.c:107
+#: plugins/sudoers/find_path.c:122 plugins/sudoers/iolog.c:124
+#: plugins/sudoers/sudoers.c:882 toke.l:663 toke.l:814
+#, c-format
+msgid "%s: %s"
+msgstr "%s:%s"
+
+#: gram.y:103
+#, c-format
+msgid ">>> %s: %s near line %d <<<"
+msgstr ">>> %s:%s 在行 %d 附近<<<"
+
+#: plugins/sudoers/group_plugin.c:91
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s:%s"
+
+#: plugins/sudoers/group_plugin.c:103
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s 必须属于用户 ID %d"
+
+#: plugins/sudoers/group_plugin.c:107
+#, c-format
+msgid "%s must only be writable by owner"
+msgstr "%s 必须只对所有者可写"
+
+#: plugins/sudoers/group_plugin.c:114
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "无法执行 dlopen %s:%s"
+
+#: plugins/sudoers/group_plugin.c:119
+#, c-format
+msgid "unable to find symbol \"group_plugin\" in %s"
+msgstr "无法在 %s 中找到符号“group_plugin”"
+
+#: plugins/sudoers/group_plugin.c:124
+#, c-format
+msgid "%s: incompatible group plugin major version %d, expected %d"
+msgstr "%s:不兼容的组插件主版本号 %d,应为 %d"
+
+#: plugins/sudoers/interfaces.c:109
+msgid "Local IP address and netmask pairs:\n"
+msgstr "本地 IP 地址和网络掩码对:\n"
+
+#: plugins/sudoers/iolog.c:176 plugins/sudoers/sudoers.c:960
+#, c-format
+msgid "unable to read %s"
+msgstr "无法读取 %s"
+
+#: plugins/sudoers/iolog.c:179
+#, c-format
+msgid "invalid sequence number %s"
+msgstr "无效的序列号:%s"
+
+#: plugins/sudoers/iolog.c:225 plugins/sudoers/iolog.c:228
+#: plugins/sudoers/iolog.c:478 plugins/sudoers/iolog.c:483
+#: plugins/sudoers/iolog.c:489 plugins/sudoers/iolog.c:497
+#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:513
+#: plugins/sudoers/iolog.c:521
+#, c-format
+msgid "unable to create %s"
+msgstr "无法创建 %s"
+
+#: plugins/sudoers/iolog_path.c:245 plugins/sudoers/sudoers.c:356
+#, c-format
+msgid "unable to set locale to \"%s\", using \"C\""
+msgstr "无法将区域设置为“%s”,将使用“C”"
+
+#: plugins/sudoers/ldap.c:363
+#, c-format
+msgid "sudo_ldap_conf_add_ports: port too large"
+msgstr "sudo_ldap_conf_add_ports:端口太大"
+
+#: plugins/sudoers/ldap.c:386
+#, c-format
+msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf"
+msgstr "sudo_ldap_conf_add_ports:扩展主机缓存时空间不足"
+
+#: plugins/sudoers/ldap.c:415
+#, c-format
+msgid "unsupported LDAP uri type: %s"
+msgstr "不支持的 LDAP URI 类型:%s"
+
+#: plugins/sudoers/ldap.c:444
+#, c-format
+msgid "invalid uri: %s"
+msgstr "无效的 URI:%s"
+
+#: plugins/sudoers/ldap.c:450
+#, c-format
+msgid "unable to mix ldap and ldaps URIs"
+msgstr "无法混合 ldap 和 ldaps URI"
+
+#: plugins/sudoers/ldap.c:454
+#, c-format
+msgid "unable to mix ldaps and starttls"
+msgstr "无法混合 ldaps 和 starttls"
+
+#: plugins/sudoers/ldap.c:473
+#, c-format
+msgid "sudo_ldap_parse_uri: out of space building hostbuf"
+msgstr "sudo_ldap_parse_uri:构建主机缓存时空间不足"
+
+#: plugins/sudoers/ldap.c:536
+#, c-format
+msgid "unable to initialize SSL cert and key db: %s"
+msgstr "无法初始化 SSL 证书和密钥数据库:%s"
+
+#: plugins/sudoers/ldap.c:932
+#, c-format
+msgid "unable to get GMT time"
+msgstr "无法获取 GMT 时间"
+
+#: plugins/sudoers/ldap.c:938
+#, c-format
+msgid "unable to format timestamp"
+msgstr "无法格式化时间戳"
+
+#: plugins/sudoers/ldap.c:946
+#, c-format
+msgid "unable to build time filter"
+msgstr "无法构建时间过滤器"
+
+#: plugins/sudoers/ldap.c:1047
+#, c-format
+msgid "sudo_ldap_build_pass1 allocation mismatch"
+msgstr "sudo_ldap_build_pass1 分配不匹配"
+
+#: plugins/sudoers/ldap.c:1542
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: %s\n"
+msgstr ""
+"\n"
+"LDAP 角色:%s\n"
+
+#: plugins/sudoers/ldap.c:1544
+#, c-format
+msgid ""
+"\n"
+"LDAP Role: UNKNOWN\n"
+msgstr ""
+"\n"
+"LDAP 角色:未知\n"
+
+#: plugins/sudoers/ldap.c:1591
+#, c-format
+msgid "    Order: %s\n"
+msgstr "    顺序:%s\n"
+
+#: plugins/sudoers/ldap.c:1599
+#, c-format
+msgid "    Commands:\n"
+msgstr "    命令:\n"
+
+#: plugins/sudoers/ldap.c:1986
+#, c-format
+msgid "unable to initialize LDAP: %s"
+msgstr "无法初始化 LDAP:%s"
+
+#: plugins/sudoers/ldap.c:2017
+#, c-format
+msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()"
+msgstr "指定了 start_tls,但 LDAP 库不支持 ldap_start_tls_s() 或 ldap_start_tls_s_np()"
+
+#: plugins/sudoers/ldap.c:2248
+#, c-format
+msgid "invalid sudoOrder attribute: %s"
+msgstr "无效的 sudoOrder 属性:%s"
+
+#: plugins/sudoers/linux_audit.c:55
+#, c-format
+msgid "unable to open audit system"
+msgstr "无法打开审核系统"
+
+#: plugins/sudoers/linux_audit.c:79
+#, c-format
+msgid "internal error, linux_audit_command() overflow"
+msgstr "内部错误,linux_audit_command() 溢出"
+
+#: plugins/sudoers/linux_audit.c:88
+#, c-format
+msgid "unable to send audit message"
+msgstr "无法发送审核消息"
+
+#: plugins/sudoers/logging.c:192
+#, c-format
+msgid "unable to open log file: %s: %s"
+msgstr "无法打开日志文件:%s:%s"
+
+#: plugins/sudoers/logging.c:195
+#, c-format
+msgid "unable to lock log file: %s: %s"
+msgstr "无法锁定日志文件:%s:%s"
+
+#: plugins/sudoers/logging.c:249
+msgid "user NOT in sudoers"
+msgstr "用户不在 sudoers 中"
+
+#: plugins/sudoers/logging.c:251
+msgid "user NOT authorized on host"
+msgstr "用户未获得此主机上的授权"
+
+#: plugins/sudoers/logging.c:253
+msgid "command not allowed"
+msgstr "命令禁止使用"
+
+#: plugins/sudoers/logging.c:263
+#, c-format
+msgid "%s is not in the sudoers file.  This incident will be reported.\n"
+msgstr "%s 不在 sudoers 文件中。此事将被报告。\n"
+
+#: plugins/sudoers/logging.c:266
+#, c-format
+msgid "%s is not allowed to run sudo on %s.  This incident will be reported.\n"
+msgstr "%s 无权在 %s 上运行 sudo。此事将被报告。\n"
+
+#: plugins/sudoers/logging.c:270
+#, c-format
+msgid "Sorry, user %s may not run sudo on %s.\n"
+msgstr "对不起,用户 %s 不能在 %s 上运行 sudo。\n"
+
+#: plugins/sudoers/logging.c:273
+#, c-format
+msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n"
+msgstr "对不起,用户 %1$s 无权以 %5$s%6$s%7$s 的身份在 %8$s 上执行 %2$s%3$s%4$s。\n"
+
+#: plugins/sudoers/logging.c:408
+#, c-format
+msgid "unable to fork"
+msgstr "无法执行 fork"
+
+#: plugins/sudoers/logging.c:415 plugins/sudoers/logging.c:472
+#, c-format
+msgid "unable to fork: %m"
+msgstr "无法执行 fork:%m"
+
+#: plugins/sudoers/logging.c:465
+#, c-format
+msgid "unable to open pipe: %m"
+msgstr "无法打开管道:%m"
+
+#: plugins/sudoers/logging.c:484
+#, c-format
+msgid "unable to dup stdin: %m"
+msgstr "无法 dup stdin:%m"
+
+#: plugins/sudoers/logging.c:518
+#, c-format
+msgid "unable to execute %s: %m"
+msgstr "无法执行 %s:%m"
+
+#: plugins/sudoers/logging.c:728
+#, c-format
+msgid "internal error: insufficient space for log line"
+msgstr "内部错误:没有足够的空间存放日志行"
+
+#: plugins/sudoers/parse.c:115
+#, c-format
+msgid "parse error in %s near line %d"
+msgstr "%s 中第 %d 行附近有解析错误"
+
+#: plugins/sudoers/parse.c:369
+#, c-format
+msgid ""
+"\n"
+"Sudoers entry:\n"
+msgstr ""
+"\n"
+"Sudoers 条目:\n"
+
+#: plugins/sudoers/parse.c:371
+#, c-format
+msgid "    RunAsUsers: "
+msgstr "    RunAs 用户:"
+
+#: plugins/sudoers/parse.c:386
+#, c-format
+msgid "    RunAsGroups: "
+msgstr "    RunAs 组:"
+
+#: plugins/sudoers/parse.c:395
+#, c-format
+msgid ""
+"    Commands:\n"
+"\t"
+msgstr ""
+"    命令:\n"
+"\t"
+
+#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105
+msgid ": "
+msgstr ":"
+
+#: plugins/sudoers/pwutil.c:251
+#, c-format
+msgid "unable to cache uid %u (%s), already exists"
+msgstr "无法缓存用户 ID %u(%s),已存在"
+
+#: plugins/sudoers/pwutil.c:259
+#, c-format
+msgid "unable to cache uid %u, already exists"
+msgstr "无法缓存用户 ID %u,已存在"
+
+#: plugins/sudoers/pwutil.c:295 plugins/sudoers/pwutil.c:304
+#, c-format
+msgid "unable to cache user %s, already exists"
+msgstr "无法缓存用户 %s,已存在"
+
+#: plugins/sudoers/pwutil.c:607
+#, c-format
+msgid "unable to cache gid %u (%s), already exists"
+msgstr "无法缓存组 ID %u(%s),已存在"
+
+#: plugins/sudoers/pwutil.c:615
+#, c-format
+msgid "unable to cache gid %u, already exists"
+msgstr "无法缓存组 ID %u,已存在"
+
+#: plugins/sudoers/pwutil.c:644 plugins/sudoers/pwutil.c:653
+#, c-format
+msgid "unable to cache group %s, already exists"
+msgstr "无法缓存组 %s,已存在"
+
+#: plugins/sudoers/set_perms.c:109 plugins/sudoers/set_perms.c:350
+#: plugins/sudoers/set_perms.c:577 plugins/sudoers/set_perms.c:806
+msgid "perm stack overflow"
+msgstr ""
+
+#: plugins/sudoers/set_perms.c:218 plugins/sudoers/set_perms.c:445
+#: plugins/sudoers/set_perms.c:677
+msgid "unable to change to runas gid"
+msgstr "无法切换为 runas 组 ID"
+
+#: plugins/sudoers/set_perms.c:226 plugins/sudoers/set_perms.c:452
+#: plugins/sudoers/set_perms.c:684
+msgid "unable to change to runas uid"
+msgstr "无法切换为 runas 用户 ID"
+
+#: plugins/sudoers/set_perms.c:240 plugins/sudoers/set_perms.c:465
+#: plugins/sudoers/set_perms.c:697
+#, c-format
+msgid "unable to change to sudoers gid"
+msgstr "无法切换为 sudoers 组 ID"
+
+#: plugins/sudoers/set_perms.c:281 plugins/sudoers/set_perms.c:503
+#: plugins/sudoers/set_perms.c:735 plugins/sudoers/set_perms.c:870
+msgid "too many processes"
+msgstr "进程过多"
+
+#: plugins/sudoers/set_perms.c:932
+msgid "unable to set runas group vector"
+msgstr "无法设置 runas 组向量"
+
+#: plugins/sudoers/sudo_nss.c:238
+#, c-format
+msgid "Matching Defaults entries for %s on this host:\n"
+msgstr "匹配此主机上 %s 的默认条目:\n"
+
+#: plugins/sudoers/sudo_nss.c:251
+#, c-format
+msgid "Runas and Command-specific defaults for %s:\n"
+msgstr "%s Runas 和命令特定的默认值:\n"
+
+#: plugins/sudoers/sudo_nss.c:264
+#, c-format
+msgid "User %s may run the following commands on this host:\n"
+msgstr "用户 %s 可以在该主机上运行以下命令:\n"
+
+#: plugins/sudoers/sudo_nss.c:274
+#, c-format
+msgid "User %s is not allowed to run sudo on %s.\n"
+msgstr "用户 %s 无权在 %s 上运行 sudo。\n"
+
+#: plugins/sudoers/sudoers.c:198 plugins/sudoers/sudoers.c:233
+#: plugins/sudoers/sudoers.c:890
+msgid "problem with defaults entries"
+msgstr "默认条目有问题"
+
+#: plugins/sudoers/sudoers.c:202
+#, c-format
+msgid "no valid sudoers sources found, quitting"
+msgstr "没有找到有效的 sudoers 资源,退出"
+
+#: plugins/sudoers/sudoers.c:256
+#, c-format
+msgid "unable to execute %s: %s"
+msgstr "无法执行 %s:%s"
+
+#: plugins/sudoers/sudoers.c:305
+#, c-format
+msgid "sudoers specifies that root is not allowed to sudo"
+msgstr "sudoers 指定 root 不允许执行 sudo"
+
+#: plugins/sudoers/sudoers.c:312
+#, c-format
+msgid "you are not permitted to use the -C option"
+msgstr "您无权使用 -C 选项"
+
+#: plugins/sudoers/sudoers.c:402
+#, c-format
+msgid "timestamp owner (%s): No such user"
+msgstr "时间戳所有者(%s):无此用户"
+
+#: plugins/sudoers/sudoers.c:418
+msgid "no tty"
+msgstr "无终端"
+
+#: plugins/sudoers/sudoers.c:419
+#, c-format
+msgid "sorry, you must have a tty to run sudo"
+msgstr "抱歉,您必须拥有一个终端来执行 sudo"
+
+#: plugins/sudoers/sudoers.c:462
+msgid "No user or host"
+msgstr "无用户或主机"
+
+#: plugins/sudoers/sudoers.c:476 plugins/sudoers/sudoers.c:497
+#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:1435
+#: plugins/sudoers/sudoers.c:1436
+#, c-format
+msgid "%s: command not found"
+msgstr "%s:找不到命令"
+
+#: plugins/sudoers/sudoers.c:478 plugins/sudoers/sudoers.c:494
+#, c-format
+msgid ""
+"ignoring `%s' found in '.'\n"
+"Use `sudo ./%s' if this is the `%s' you wish to run."
+msgstr ""
+"忽略在“.”中找到的“%s”\n"
+"请使用“sudo ./%s”,如果这是您想运行的“%s”。"
+
+#: plugins/sudoers/sudoers.c:483
+msgid "validation failure"
+msgstr "校验失败"
+
+#: plugins/sudoers/sudoers.c:493
+msgid "command in current directory"
+msgstr "当前目录中的命令"
+
+#: plugins/sudoers/sudoers.c:505
+#, c-format
+msgid "sorry, you are not allowed to preserve the environment"
+msgstr "抱歉,您无权保留环境"
+
+#: plugins/sudoers/sudoers.c:874
+#, c-format
+msgid "internal error, set_cmnd() overflow"
+msgstr "内部错误:set_cmnd() 溢出"
+
+#: plugins/sudoers/sudoers.c:918
+#, fuzzy, c-format
+msgid "fixed mode on %s"
+msgstr "对 %s 修正了模式"
+
+#: plugins/sudoers/sudoers.c:922
+#, c-format
+msgid "set group on %s"
+msgstr "对 %s 设置组"
+
+#: plugins/sudoers/sudoers.c:925
+#, c-format
+msgid "unable to set group on %s"
+msgstr "无法对 %s 设置组"
+
+#: plugins/sudoers/sudoers.c:928
+#, c-format
+msgid "unable to fix mode on %s"
+msgstr "无法对 %s 修正模式"
+
+#: plugins/sudoers/sudoers.c:941
+#, c-format
+msgid "%s is not a regular file"
+msgstr "%s 不是常规文件"
+
+#: plugins/sudoers/sudoers.c:943
+#, c-format
+msgid "%s is mode 0%o, should be 0%o"
+msgstr "%s 的模式为 0%o,应为 0%o"
+
+#: plugins/sudoers/sudoers.c:947
+#, c-format
+msgid "%s is owned by uid %u, should be %u"
+msgstr "%s 属于用户 ID %u,应为 %u"
+
+#: plugins/sudoers/sudoers.c:950
+#, c-format
+msgid "%s is owned by gid %u, should be %u"
+msgstr "%s 属于组 ID %u,应为 %u"
+
+#: plugins/sudoers/sudoers.c:994
+#, c-format
+msgid "only root can use `-c %s'"
+msgstr "只有 root 才能使用“-c %s”"
+
+#: plugins/sudoers/sudoers.c:1004
+#, c-format
+msgid "unknown login class: %s"
+msgstr "未知的登录类别:%s"
+
+#: plugins/sudoers/sudoers.c:1038
+#, c-format
+msgid "unable to resolve host %s"
+msgstr "无法解析主机:%s"
+
+#: plugins/sudoers/sudoers.c:1088 plugins/sudoers/testsudoers.c:342
+#, c-format
+msgid "unknown group: %s"
+msgstr "未知组:%s"
+
+#: plugins/sudoers/sudoers.c:1120
+#, c-format
+msgid "Sudoers policy plugin version %s\n"
+msgstr "Sudoers 策略插件版本 %s\n"
+
+#: plugins/sudoers/sudoers.c:1122
+#, c-format
+msgid "Sudoers file grammar version %d\n"
+msgstr "Sudoers 文件语法版本 %d\n"
+
+#: plugins/sudoers/sudoers.c:1126
+#, c-format
+msgid ""
+"\n"
+"Sudoers path: %s\n"
+msgstr ""
+"\n"
+"Sudoers 路径:%s\n"
+
+#: plugins/sudoers/sudoers.c:1129
+#, c-format
+msgid "nsswitch path: %s\n"
+msgstr "nsswitch 路径:%s\n"
+
+#: plugins/sudoers/sudoers.c:1131
+#, c-format
+msgid "ldap.conf path: %s\n"
+msgstr "ldap.conf 路径:%s\n"
+
+#: plugins/sudoers/sudoers.c:1132
+#, c-format
+msgid "ldap.secret path: %s\n"
+msgstr "ldap.secret 路径:%s\n"
+
+#: plugins/sudoers/sudoreplay.c:265
+#, c-format
+msgid "invalid filter option: %s"
+msgstr "无效的过滤器选项:%s"
+
+#: plugins/sudoers/sudoreplay.c:278
+#, c-format
+msgid "invalid max wait: %s"
+msgstr "无效的最大等待:%s"
+
+#: plugins/sudoers/sudoreplay.c:284
+#, c-format
+msgid "invalid speed factor: %s"
+msgstr "无法的速度系数:%s"
+
+#: plugins/sudoers/sudoreplay.c:287 plugins/sudoers/visudo.c:174
+#, c-format
+msgid "%s version %s\n"
+msgstr "%s 版本 %s\n"
+
+#: plugins/sudoers/sudoreplay.c:310
+#, fuzzy, c-format
+msgid "%s/%.2s/%.2s/%.2s/timing: %s"
+msgstr "%s/%.2s/%.2s/%.2s/时序:%s"
+
+#: plugins/sudoers/sudoreplay.c:316
+#, fuzzy, c-format
+msgid "%s/%s/timing: %s"
+msgstr "%s/%s/时序:%s"
+
+#: plugins/sudoers/sudoreplay.c:341
+#, c-format
+msgid "invalid log file %s"
+msgstr "无效的日志文件 %s"
+
+#: plugins/sudoers/sudoreplay.c:343
+#, c-format
+msgid "Replaying sudo session: %s"
+msgstr "回放 sudo 会话:%s"
+
+#: plugins/sudoers/sudoreplay.c:369
+#, c-format
+msgid "unable to set tty to raw mode"
+msgstr "无法将终端设为原始模式"
+
+#: plugins/sudoers/sudoreplay.c:383
+#, fuzzy, c-format
+msgid "invalid timing file line: %s"
+msgstr "无效的时序文件行:%s"
+
+#: plugins/sudoers/sudoreplay.c:425
+#, c-format
+msgid "writing to standard output"
+msgstr "写入标准输出"
+
+#: plugins/sudoers/sudoreplay.c:455
+#, c-format
+msgid "nanosleep: tv_sec %ld, tv_nsec %ld"
+msgstr "nanosleep:tv_sec %ld,tv_nsec %ld"
+
+#: plugins/sudoers/sudoreplay.c:503 plugins/sudoers/sudoreplay.c:528
+#, c-format
+msgid "ambiguous expression \"%s\""
+msgstr "有歧义的表达式“%s”"
+
+#: plugins/sudoers/sudoreplay.c:545
+#, c-format
+msgid "too many parenthesized expressions, max %d"
+msgstr "括号表达式过多,最多 %d"
+
+#: plugins/sudoers/sudoreplay.c:556
+#, c-format
+msgid "unmatched ')' in expression"
+msgstr "表达式中的“)”不匹配"
+
+#: plugins/sudoers/sudoreplay.c:562
+#, c-format
+msgid "unknown search term \"%s\""
+msgstr "未知的搜索词“%s”"
+
+#: plugins/sudoers/sudoreplay.c:576
+#, c-format
+msgid "%s requires an argument"
+msgstr "%s 需要参数"
+
+#: plugins/sudoers/sudoreplay.c:580
+#, c-format
+msgid "invalid regular expression: %s"
+msgstr "无效的正则表达式:%s"
+
+#: plugins/sudoers/sudoreplay.c:586
+#, c-format
+msgid "could not parse date \"%s\""
+msgstr "无法解析日期“%s”"
+
+#: plugins/sudoers/sudoreplay.c:599
+#, c-format
+msgid "unmatched '(' in expression"
+msgstr "表达式中的“(”不匹配"
+
+#: plugins/sudoers/sudoreplay.c:601
+#, c-format
+msgid "illegal trailing \"or\""
+msgstr "非法的结尾字符“or”"
+
+#: plugins/sudoers/sudoreplay.c:603
+#, c-format
+msgid "illegal trailing \"!\""
+msgstr "非法的结尾字符“!”"
+
+#: plugins/sudoers/sudoreplay.c:819
+#, c-format
+msgid "invalid regex: %s"
+msgstr "无效的正则表达式:%s"
+
+#: plugins/sudoers/sudoreplay.c:941
+#, c-format
+msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"
+msgstr "用法:%s [-h] [-d 目录] [-m 最长等待] [-s 速度系数] ID\n"
+
+#: plugins/sudoers/sudoreplay.c:944
+#, c-format
+msgid "usage: %s [-h] [-d directory] -l [search expression]\n"
+msgstr "用法:%s [-h] [-d 目录] -l [搜索表达式]\n"
+
+#: plugins/sudoers/sudoreplay.c:953
+#, c-format
+msgid ""
+"%s - replay sudo session logs\n"
+"\n"
+msgstr ""
+"%s - 回放 sudo 会话记录\n"
+"\n"
+
+#: plugins/sudoers/sudoreplay.c:955
+msgid ""
+"\n"
+"Options:\n"
+"  -d directory     specify directory for session logs\n"
+"  -f filter        specify which I/O type to display\n"
+"  -h               display help message and exit\n"
+"  -l [expression]  list available session IDs that match expression\n"
+"  -m max_wait      max number of seconds to wait between events\n"
+"  -s speed_factor  speed up or slow down output\n"
+"  -V               display version information and exit"
+msgstr ""
+"\n"
+"选项:\n"
+"  -d 目录          指定会话日志目录\n"
+"  -f 过滤器        指定要显示的 I/O 类型\n"
+"  -h               显示帮助信息并退出\n"
+"  -l [表达式]      列出与表达式匹配的可用会话 ID\n"
+"  -m 最长等待      事件间等待的最大秒数\n"
+"  -s 速度系数      加速或减慢输出\n"
+"  -V               显示版本信息并退出"
+
+#: plugins/sudoers/testsudoers.c:228
+#, c-format
+msgid "internal error, init_vars() overflow"
+msgstr "内部错误,init_vars() 溢出"
+
+#: plugins/sudoers/testsudoers.c:304
+msgid "\thost  unmatched"
+msgstr "\t主机不匹配"
+
+#: plugins/sudoers/testsudoers.c:307
+msgid ""
+"\n"
+"Command allowed"
+msgstr ""
+"\n"
+"命令允许"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command denied"
+msgstr ""
+"\n"
+"命令被拒"
+
+#: plugins/sudoers/testsudoers.c:308
+msgid ""
+"\n"
+"Command unmatched"
+msgstr ""
+"\n"
+"命令不匹配"
+
+#: toke.l:667 toke.l:793 toke.l:818 toke.l:904 plugins/sudoers/toke_util.c:111
+#: plugins/sudoers/toke_util.c:163 plugins/sudoers/toke_util.c:202
+msgid "unable to allocate memory"
+msgstr "无法分配内存"
+
+#: toke.l:786
+#, fuzzy
+msgid "too many levels of includes"
+msgstr "include 嵌套层数过多"
+
+#: plugins/sudoers/toke_util.c:213
+msgid "fill_args: buffer overflow"
+msgstr "fill_args:缓存溢出"
+
+#: plugins/sudoers/visudo.c:175
+#, c-format
+msgid "%s grammar version %d\n"
+msgstr "%s 语法版本 %d\n"
+
+#: plugins/sudoers/visudo.c:208 plugins/sudoers/auth/rfc1938.c:103
+#, c-format
+msgid "you do not exist in the %s database"
+msgstr "%s 数据库中没有您"
+
+#: plugins/sudoers/visudo.c:238 plugins/sudoers/visudo.c:470
+#, c-format
+msgid "press return to edit %s: "
+msgstr "按回车键编辑 %s:"
+
+#: plugins/sudoers/visudo.c:300 plugins/sudoers/visudo.c:306
+#, c-format
+msgid "write error"
+msgstr "写错误"
+
+#: plugins/sudoers/visudo.c:360
+#, c-format
+msgid "unable to stat temporary file (%s), %s unchanged"
+msgstr "无法 stat 临时文件(%s),%s 未更改"
+
+#: plugins/sudoers/visudo.c:365
+#, c-format
+msgid "zero length temporary file (%s), %s unchanged"
+msgstr "零长度的临时文件(%s),%s 未更改"
+
+#: plugins/sudoers/visudo.c:371
+#, c-format
+msgid "editor (%s) failed, %s unchanged"
+msgstr "编辑器(%s)失败,%s 未更改"
+
+#: plugins/sudoers/visudo.c:394
+#, c-format
+msgid "%s unchanged"
+msgstr "%s 未更改"
+
+#: plugins/sudoers/visudo.c:418
+#, c-format
+msgid "unable to re-open temporary file (%s), %s unchanged."
+msgstr "无法重新打开临时文件(%s),%s 未更改"
+
+#: plugins/sudoers/visudo.c:428
+#, c-format
+msgid "unabled to parse temporary file (%s), unknown error"
+msgstr "无法解析临时文件(%s),未知错误"
+
+#: plugins/sudoers/visudo.c:463
+#, c-format
+msgid "internal error, unable to find %s in list!"
+msgstr "内部错误,在列表中找不到 %s!"
+
+#: plugins/sudoers/visudo.c:502 plugins/sudoers/visudo.c:511
+#, c-format
+msgid "unable to set (uid, gid) of %s to (%d, %d)"
+msgstr "无法将 %s 的 (uid, gid) 设为 (%d, %d)"
+
+#: plugins/sudoers/visudo.c:506 plugins/sudoers/visudo.c:516
+#, c-format
+msgid "unable to change mode of %s to 0%o"
+msgstr "无法将 %s 的模式更改为 0%o"
+
+#: plugins/sudoers/visudo.c:533
+#, c-format
+msgid "%s and %s not on the same file system, using mv to rename"
+msgstr "%s 和 %s 不在同一个文件系统,使用 mv 进行重命名"
+
+#: plugins/sudoers/visudo.c:547
+#, c-format
+msgid "command failed: '%s %s %s', %s unchanged"
+msgstr "命令失败:“%s %s %s”,%s 未更改"
+
+#: plugins/sudoers/visudo.c:557
+#, c-format
+msgid "error renaming %s, %s unchanged"
+msgstr "重命名 %s 出错,%s 未更改"
+
+#: plugins/sudoers/visudo.c:617
+msgid "What now? "
+msgstr "现在做什么?"
+
+#: plugins/sudoers/visudo.c:631
+msgid ""
+"Options are:\n"
+"  (e)dit sudoers file again\n"
+"  e(x)it without saving changes to sudoers file\n"
+"  (Q)uit and save changes to sudoers file (DANGER!)\n"
+msgstr ""
+"选项有:\n"
+"  重新编辑 sudoers 文件(e)\n"
+"  退出,不保存对 sudoers 文件的更改(x)\n"
+"  退出并将更改保存到 sudoers 文件(危险!)(Q)\n"
+
+#: plugins/sudoers/visudo.c:668
+#, c-format
+msgid "unable to execute %s"
+msgstr "无法执行 %s"
+
+#: plugins/sudoers/visudo.c:675
+#, c-format
+msgid "unable to run %s"
+msgstr "无法运行 %s"
+
+#: plugins/sudoers/visudo.c:706
+#, c-format
+msgid "failed to parse %s file, unknown error"
+msgstr "解析 %s 文件失败,未知错误"
+
+#: plugins/sudoers/visudo.c:718
+#, c-format
+msgid "parse error in %s near line %d\n"
+msgstr "%s 中第 %d 行附近出现解析错误\n"
+
+#: plugins/sudoers/visudo.c:721
+#, c-format
+msgid "parse error in %s\n"
+msgstr "%s 中出现解析错误\n"
+
+#: plugins/sudoers/visudo.c:723
+#, c-format
+msgid "%s: parsed OK\n"
+msgstr "%s:解析正确\n"
+
+#: plugins/sudoers/visudo.c:737
+#, c-format
+msgid "%s: wrong owner (uid, gid) should be (%d, %d)\n"
+msgstr "%s:错误的所有者(uid, gid),应为(%d, %d)\n"
+
+#: plugins/sudoers/visudo.c:744
+#, c-format
+msgid "%s: bad permissions, should be mode 0%o\n"
+msgstr "%s:权限不正确,模式应该是 0%o\n"
+
+#: plugins/sudoers/visudo.c:783
+#, c-format
+msgid "%s busy, try again later"
+msgstr "%s 忙,请稍后重试"
+
+#: plugins/sudoers/visudo.c:826
+#, c-format
+msgid "specified editor (%s) doesn't exist"
+msgstr "指定的编辑器(%s)不存在"
+
+#: plugins/sudoers/visudo.c:849
+#, c-format
+msgid "unable to stat editor (%s)"
+msgstr "无法 stat 编辑器(%s)"
+
+#: plugins/sudoers/visudo.c:897
+#, c-format
+msgid "no editor found (editor path = %s)"
+msgstr "未找到编辑器(编辑器路径 = %s)"
+
+#: plugins/sudoers/visudo.c:986
+#, c-format
+msgid "Error: cycle in %s_Alias `%s'"
+msgstr "错误:在 %s_Alias “%s”中循环"
+
+#: plugins/sudoers/visudo.c:987
+#, c-format
+msgid "Warning: cycle in %s_Alias `%s'"
+msgstr "警告:在 %s_Alias “%s”中循环"
+
+#: plugins/sudoers/visudo.c:990
+#, fuzzy, c-format
+msgid "Error: %s_Alias `%s' referenced but not defined"
+msgstr "%s:引用了 %s_Alias “%s”但未定义"
+
+#: plugins/sudoers/visudo.c:991
+#, fuzzy, c-format
+msgid "Warning: %s_Alias `%s' referenced but not defined"
+msgstr "%s:引用了 %s_Alias “%s”但未定义"
+
+#: plugins/sudoers/visudo.c:1128
+#, c-format
+msgid "%s: unused %s_Alias %s"
+msgstr "%s:未使用的 %s_Alias %s"
+
+#: plugins/sudoers/visudo.c:1185
+#, c-format
+msgid ""
+"%s - safely edit the sudoers file\n"
+"\n"
+msgstr ""
+"%s - 安全地编辑 sudoers 文件\n"
+"\n"
+
+#: plugins/sudoers/visudo.c:1187
+msgid ""
+"\n"
+"Options:\n"
+"  -c          check-only mode\n"
+"  -f sudoers  specify sudoers file location\n"
+"  -h          display help message and exit\n"
+"  -q          less verbose (quiet) syntax error messages\n"
+"  -s          strict syntax checking\n"
+"  -V          display version information and exit"
+msgstr ""
+"\n"
+"选项:\n"
+"  -c          纯检查模式\n"
+"  -f sudoers  指定 sudoers 文件的位置\n"
+"  -h          显示帮助信息并退出\n"
+"  -q          较简略(安静)的语法错误信息\n"
+"  -s          严格语法检查\n"
+"  -V          显示版本信息并退出"
+
+#: plugins/sudoers/auth/bsdauth.c:64
+msgid "unable to begin bsd authentication"
+msgstr "无法开始 bsd 认证"
+
+#: plugins/sudoers/auth/bsdauth.c:71
+msgid "invalid authentication type"
+msgstr "无效的认证类型"
+
+#: plugins/sudoers/auth/bsdauth.c:79
+msgid "unable to setup authentication"
+msgstr "无法设置认证"
+
+#: plugins/sudoers/auth/fwtk.c:59
+#, c-format
+msgid "unable to read fwtk config"
+msgstr "无法读取 fwtk 配置"
+
+#: plugins/sudoers/auth/fwtk.c:64
+#, c-format
+msgid "unable to connect to authentication server"
+msgstr "无法连接到认证服务器"
+
+#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:93
+#: plugins/sudoers/auth/fwtk.c:126
+#, c-format
+msgid "lost connection to authentication server"
+msgstr "丢失了到认证服务器的连接"
+
+#: plugins/sudoers/auth/fwtk.c:74
+#, c-format
+msgid ""
+"authentication server error:\n"
+"%s"
+msgstr ""
+"认证服务器错误:\n"
+"%s"
+
+#: plugins/sudoers/auth/kerb5.c:114
+#, c-format
+msgid "%s: unable to parse '%s': %s"
+msgstr "%s:无法解析“%s”:%s"
+
+#: plugins/sudoers/auth/kerb5.c:127
+#, c-format
+msgid "%s: unable to unparse princ ('%s'): %s"
+msgstr "%s:无法解析 princ(“%s”):%s"
+
+#: plugins/sudoers/auth/kerb5.c:144
+#, c-format
+msgid "%s: unable to resolve ccache: %s"
+msgstr "%s:无法解析 ccache:%s"
+
+#: plugins/sudoers/auth/kerb5.c:188
+#, c-format
+msgid "%s: unable to allocate options: %s"
+msgstr "%s:无法分配选项:%s"
+
+#: plugins/sudoers/auth/kerb5.c:204
+#, c-format
+msgid "%s: unable to get credentials: %s"
+msgstr "%s:无法获取凭据:%s"
+
+#: plugins/sudoers/auth/kerb5.c:217
+#, c-format
+msgid "%s: unable to initialize ccache: %s"
+msgstr "%s:无法初始化 ccache:%s"
+
+#: plugins/sudoers/auth/kerb5.c:221
+#, fuzzy, c-format
+msgid "%s: unable to store cred in ccache: %s"
+msgstr "%s:无法储存 ccache 中的凭据"
+
+#: plugins/sudoers/auth/kerb5.c:284
+#, c-format
+msgid "%s: unable to get host principal: %s"
+msgstr ""
+
+#: plugins/sudoers/auth/kerb5.c:299
+#, fuzzy, c-format
+msgid "%s: Cannot verify TGT! Possible attack!: %s"
+msgstr "%s:无法验证目标!可能遭到了攻击!:%s"
+
+#: plugins/sudoers/auth/pam.c:99
+msgid "unable to initialize PAM"
+msgstr "无法初始化 PAM"
+
+#: plugins/sudoers/auth/pam.c:142
+msgid "account validation failure, is your account locked?"
+msgstr "账户验证失败,您的账户是不是上锁了?"
+
+#: plugins/sudoers/auth/pam.c:146
+msgid "Account or password is expired, reset your password and try again"
+msgstr "账户或密码过期,重置您的密码并重试"
+
+#: plugins/sudoers/auth/pam.c:153
+#, c-format
+msgid "pam_chauthtok: %s"
+msgstr "pam_chauthtok:%s"
+
+#: plugins/sudoers/auth/pam.c:157
+msgid "Password expired, contact your system administrator"
+msgstr "密码过期,联系您的系统管理员"
+
+#: plugins/sudoers/auth/pam.c:161
+msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator"
+msgstr "账户过期,或 PAM 配置缺少 sudo 使用的“account”节,联系您的系统管理员"
+
+#: plugins/sudoers/auth/pam.c:176
+#, c-format
+msgid "pam_authenticate: %s"
+msgstr "pam_authenticate:%s"
+
+#: plugins/sudoers/auth/pam.c:296
+msgid "Password: "
+msgstr "密码:"
+
+#: plugins/sudoers/auth/pam.c:297
+msgid "Password:"
+msgstr "密码:"
+
+#: plugins/sudoers/auth/securid.c:82 plugins/sudoers/auth/securid5.c:106
+#, c-format
+msgid "unable to contact the SecurID server"
+msgstr "无法联络 SecurID 服务器"
+
+#: plugins/sudoers/auth/securid5.c:81
+#, c-format
+msgid "failed to initialise the ACE API library"
+msgstr "初始化 ACE API 库失败"
+
+#: plugins/sudoers/auth/securid5.c:115
+#, c-format
+msgid "User ID locked for SecurID Authentication"
+msgstr "为进行 SecurID 认证,已锁定用户 ID"
+
+#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:169
+#, c-format
+msgid "invalid username length for SecurID"
+msgstr "SecurID 的用户名长度无效"
+
+#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:174
+#, fuzzy, c-format
+msgid "invalid Authentication Handle for SecurID"
+msgstr "SecurID 的认证句柄无效"
+
+#: plugins/sudoers/auth/securid5.c:127
+#, c-format
+msgid "SecurID communication failed"
+msgstr "SecurID 通讯失败"
+
+#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:213
+#, c-format
+msgid "unknown SecurID error"
+msgstr "未知的 SecurID 错误"
+
+#: plugins/sudoers/auth/securid5.c:164
+#, c-format
+msgid "invalid passcode length for SecurID"
+msgstr "无效的 SecurID 密码长度"
+
+#: plugins/sudoers/auth/sia.c:106
+msgid "unable to initialize SIA session"
+msgstr "无法初始化 SIA 会话"
+
+#: plugins/sudoers/auth/sudo_auth.c:124
+msgid "There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option."
+msgstr "sudo 编译时没有加入任何认证方法!如果您想关闭认证,使用 --disable-authentication 配置选项。"
+
+#: plugins/sudoers/auth/sudo_auth.c:134
+#, fuzzy
+msgid "Invalid authentication methods compiled into sudo!  You may mix standalone and non-standalone authentication."
+msgstr "编译进 sudo 的认证方法无效!您可以混用独立和非独立认证。"
+
+#: plugins/sudoers/auth/sudo_auth.c:243
+#, c-format
+msgid "%d incorrect password attempt"
+msgid_plural "%d incorrect password attempts"
+msgstr[0] "%d 次错误密码尝试"
+
+#: plugins/sudoers/auth/sudo_auth.c:335
+msgid "Authentication methods:"
+msgstr "认证方法:"
+
+#~ msgid "unable to get runas group vector"
+#~ msgstr "无法获取 runas 组向量"
+
+#~ msgid "unable to reset group vector"
+#~ msgstr "无法重设组向量"
+
+#~ msgid "unable to get group vector"
+#~ msgstr "无法获取组向量"
+
+#~ msgid "%s: %s_Alias `%s' references self"
+#~ msgstr "%s:%s_Alias “%s”引用了自己"
index ac0d34ac404244f2931a8f6805d460501e0a5ded..b511472c3fdc2e79be62d0c38a85f591b90ebc63 100644 (file)
 #ifdef HAVE_SETAUTHDB
 # include <usersec.h>
 #endif /* HAVE_SETAUTHDB */
+#ifdef HAVE_UTMPX_H
+# include <utmpx.h>
+#else
+# include <utmp.h>
+#endif /* HAVE_UTMPX_H */
+#include <limits.h>
 #include <pwd.h>
 #include <grp.h>
 
@@ -59,6 +65,7 @@
  */
 static struct rbtree *pwcache_byuid, *pwcache_byname;
 static struct rbtree *grcache_bygid, *grcache_byname;
+static struct rbtree *grlist_cache;
 
 static int  cmp_pwuid(const void *, const void *);
 static int  cmp_pwnam(const void *, const void *);
@@ -80,6 +87,7 @@ struct cache_item {
     union {
        struct passwd *pw;
        struct group *gr;
+       struct group_list *grlist;
     } d;
 };
 
@@ -160,8 +168,7 @@ make_pwitem(const struct passwd *pw, const char *name)
        total += strlen(name) + 1;
 
     /* Allocate space for struct item, struct passwd and the strings. */
-    if ((item = malloc(total)) == NULL)
-           return NULL;
+    item = emalloc(total);
     cp = (char *) item + sizeof(struct cache_item);
 
     /*
@@ -241,7 +248,7 @@ sudo_getpwuid(uid_t uid)
     if ((key.d.pw = getpwuid(uid)) != NULL) {
        item = make_pwitem(key.d.pw, NULL);
        if (rbinsert(pwcache_byuid, item) != NULL)
-           errorx(1, "unable to cache uid %u (%s), already exists",
+           errorx(1, _("unable to cache uid %u (%s), already exists"),
                (unsigned int) uid, item->d.pw->pw_name);
     } else {
        item = emalloc(sizeof(*item));
@@ -249,7 +256,7 @@ sudo_getpwuid(uid_t uid)
        item->k.uid = uid;
        item->d.pw = NULL;
        if (rbinsert(pwcache_byuid, item) != NULL)
-           errorx(1, "unable to cache uid %u, already exists",
+           errorx(1, _("unable to cache uid %u, already exists"),
                (unsigned int) uid);
     }
 #ifdef HAVE_SETAUTHDB
@@ -285,7 +292,7 @@ sudo_getpwnam(const char *name)
     if ((key.d.pw = getpwnam(name)) != NULL) {
        item = make_pwitem(key.d.pw, name);
        if (rbinsert(pwcache_byname, item) != NULL)
-           errorx(1, "unable to cache user %s, already exists", name);
+           errorx(1, _("unable to cache user %s, already exists"), name);
     } else {
        len = strlen(name) + 1;
        item = emalloc(sizeof(*item) + len);
@@ -294,7 +301,7 @@ sudo_getpwnam(const char *name)
        memcpy(item->k.name, name, len);
        item->d.pw = NULL;
        if (rbinsert(pwcache_byname, item) != NULL)
-           errorx(1, "unable to cache user %s, already exists", name);
+           errorx(1, _("unable to cache user %s, already exists"), name);
     }
 #ifdef HAVE_SETAUTHDB
     aix_restoreauthdb();
@@ -406,7 +413,7 @@ cmp_grgid(const void *v1, const void *v2)
  * elements.  If name is non-NULL it is used as the key, else the
  * gid is the key.  Fills in datum from struct group.
  */
-struct cache_item *
+static struct cache_item *
 make_gritem(const struct group *gr, const char *name)
 {
     char *cp;
@@ -428,8 +435,7 @@ make_gritem(const struct group *gr, const char *name)
     if (name != NULL)
        total += strlen(name) + 1;
 
-    if ((item = malloc(total)) == NULL)
-           return NULL;
+    item = emalloc(total);
     cp = (char *) item + sizeof(struct cache_item);
 
     /*
@@ -467,6 +473,96 @@ make_gritem(const struct group *gr, const char *name)
     return item;
 }
 
+#ifdef HAVE_UTMPX_H
+# define GROUPNAME_LEN (sizeof((struct utmpx *)0)->ut_user)
+#else
+# ifdef HAVE_STRUCT_UTMP_UT_USER
+#  define GROUPNAME_LEN        (sizeof((struct utmp *)0)->ut_user)
+# else
+#  define GROUPNAME_LEN        (sizeof((struct utmp *)0)->ut_name)
+# endif
+#endif /* HAVE_UTMPX_H */
+
+/*
+ * Dynamically allocate space for a struct item plus the key and data
+ * elements.  Fills in datum from the groups and gids arrays.
+ */
+static struct cache_item *
+make_grlist_item(const char *user, GETGROUPS_T *gids, int ngids)
+{
+    char *cp;
+    size_t i, nsize, ngroups = 0, total, len;
+    struct cache_item *item;
+    struct group_list *grlist;
+    struct group *grp;
+
+    /* Allocate in one big chunk for easy freeing. */
+    nsize = strlen(user) + 1;
+    total = sizeof(struct cache_item) + sizeof(struct group_list) + nsize;
+    total += sizeof(char *) * ngids;
+    total += sizeof(gid_t *) * ngids;
+    total += GROUPNAME_LEN * ngids;
+
+    item = emalloc(total);
+    cp = (char *) item + sizeof(struct cache_item);
+
+    /*
+     * Copy in group list and make pointers relative to space
+     * at the end of the buffer.  Note that the gids array must come
+     * immediately after struct group to guarantee proper alignment.
+     */
+    grlist = (struct group_list *)cp;
+    zero_bytes(grlist, sizeof(struct group_list));
+    cp += sizeof(struct group_list);
+    grlist->gids = (gid_t *)cp;
+    cp += sizeof(gid_t) * ngids;
+    grlist->groups = (char **)cp;
+    cp += sizeof(char *) * ngids;
+
+    /* Set key and datum. */
+    memcpy(cp, user, nsize);
+    item->k.name = cp;
+    item->d.grlist = grlist;
+    item->refcnt = 1;
+    cp += nsize;
+
+    /*
+     * Store group IDs.
+     */
+    for (i = 0; i < ngids; i++)
+       grlist->gids[i] = gids[i];
+    grlist->ngids = ngids;
+
+#ifdef HAVE_SETAUTHDB
+    aix_setauthdb((char *) user);
+#endif
+    /*
+     * Resolve group names by ID and store at the end.
+     */
+    for (i = 0; i < ngids; i++) {
+       if ((grp = sudo_getgrgid(gids[i])) != NULL) {
+           len = strlen(grp->gr_name) + 1;
+           if (cp - (char *)grlist + len > total) {
+               void *ptr = erealloc(grlist, total + len + GROUPNAME_LEN);
+               total += len + GROUPNAME_LEN;
+               cp = (char *)ptr + (cp - (char *)grlist);
+               grlist = ptr;
+           }
+           memcpy(cp, grp->gr_name, len);
+           grlist->groups[ngroups++] = cp;
+           cp += len;
+           gr_delref(grp);
+       }
+    }
+    grlist->ngroups = ngroups;
+
+#ifdef HAVE_SETAUTHDB
+    aix_restoreauthdb();
+#endif
+
+    return item;
+}
+
 void
 gr_addref(struct group *gr)
 {
@@ -508,7 +604,7 @@ sudo_getgrgid(gid_t gid)
     if ((key.d.gr = getgrgid(gid)) != NULL) {
        item = make_gritem(key.d.gr, NULL);
        if (rbinsert(grcache_bygid, item) != NULL)
-           errorx(1, "unable to cache gid %u (%s), already exists",
+           errorx(1, _("unable to cache gid %u (%s), already exists"),
                (unsigned int) gid, key.d.gr->gr_name);
     } else {
        item = emalloc(sizeof(*item));
@@ -516,7 +612,7 @@ sudo_getgrgid(gid_t gid)
        item->k.gid = gid;
        item->d.gr = NULL;
        if (rbinsert(grcache_bygid, item) != NULL)
-           errorx(1, "unable to cache gid %u, already exists",
+           errorx(1, _("unable to cache gid %u, already exists"),
                (unsigned int) gid);
     }
 done:
@@ -545,7 +641,7 @@ sudo_getgrnam(const char *name)
     if ((key.d.gr = getgrnam(name)) != NULL) {
        item = make_gritem(key.d.gr, name);
        if (rbinsert(grcache_byname, item) != NULL)
-           errorx(1, "unable to cache group %s, already exists", name);
+           errorx(1, _("unable to cache group %s, already exists"), name);
     } else {
        len = strlen(name) + 1;
        item = emalloc(sizeof(*item) + len);
@@ -554,7 +650,7 @@ sudo_getgrnam(const char *name)
        memcpy(item->k.name, name, len);
        item->d.gr = NULL;
        if (rbinsert(grcache_byname, item) != NULL)
-           errorx(1, "unable to cache group %s, already exists", name);
+           errorx(1, _("unable to cache group %s, already exists"), name);
     }
 done:
     item->refcnt++;
@@ -606,6 +702,27 @@ sudo_fakegrnam(const char *group)
     return gr;
 }
 
+void
+grlist_addref(struct group_list *grlist)
+{
+    ptr_to_item(grlist)->refcnt++;
+}
+
+static void
+grlist_delref_item(void *v)
+{
+    struct cache_item *item = v;
+
+    if (--item->refcnt == 0)
+       efree(item);
+}
+
+void
+grlist_delref(struct group_list *grlist)
+{
+    grlist_delref_item(ptr_to_item(grlist));
+}
+
 void
 sudo_setgrent(void)
 {
@@ -614,6 +731,8 @@ sudo_setgrent(void)
        grcache_bygid = rbcreate(cmp_grgid);
     if (grcache_byname == NULL)
        grcache_byname = rbcreate(cmp_grnam);
+    if (grlist_cache == NULL)
+       grlist_cache = rbcreate(cmp_grnam);
 }
 
 void
@@ -627,6 +746,10 @@ sudo_freegrcache(void)
        rbdestroy(grcache_byname, gr_delref_item);
        grcache_byname = NULL;
     }
+    if (grlist_cache != NULL) {
+       rbdestroy(grlist_cache, grlist_delref_item);
+       grlist_cache = NULL;
+    }
 }
 
 void
@@ -636,83 +759,127 @@ sudo_endgrent(void)
     sudo_freegrcache();
 }
 
-int
-user_in_group(struct passwd *pw, const char *group)
+struct group_list *
+get_group_list(struct passwd *pw)
 {
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-    uuid_t gu, uu;
-    int ismember;
-#else
-    char **gr_mem;
-    int i;
-#endif
-    struct group *grp;
-    int retval = FALSE;
-
-#ifdef HAVE_SETAUTHDB
-    aix_setauthdb(pw->pw_name);
-#endif
-    /* A group name that begins with a '#' may be a gid. */
-    if ((grp = sudo_getgrnam(group)) == NULL && *group == '#')
-       grp = sudo_getgrgid(atoi(group + 1));
-#ifdef HAVE_SETAUTHDB
-    aix_restoreauthdb();
-#endif
-    if (grp == NULL)
-       goto done;
+    struct cache_item key, *item;
+    struct rbnode *node;
+    size_t len;
+    GETGROUPS_T *gids;
+    int ngids;
 
-    /* check against user's primary (passwd file) gid */
-    if (grp->gr_gid == pw->pw_gid) {
-       retval = TRUE;
+    key.k.name = pw->pw_name;
+    if ((node = rbfind(grlist_cache, &key)) != NULL) {
+       item = (struct cache_item *) node->data;
        goto done;
     }
-
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-    /* If we are matching the invoking user use the stashed uuid. */
-    if (strcmp(pw->pw_name, user_name) == 0) {
-       if (mbr_gid_to_uuid(grp->gr_gid, gu) == 0 &&
-           mbr_check_membership(user_uuid, gu, &ismember) == 0 && ismember) {
-           retval = TRUE;
-           goto done;
+    /*
+     * Cache group db entry if it exists or a negative response if not.
+     */
+#if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX)
+    ngids = (int)sysconf(_SC_NGROUPS_MAX) * 2;
+    if (ngids < 0)
+#endif
+       ngids = NGROUPS_MAX * 2;
+    gids = emalloc2(ngids, sizeof(GETGROUPS_T));
+    if (getgrouplist(pw->pw_name, pw->pw_gid, gids, &ngids) == -1) {
+       efree(gids);
+       gids = emalloc2(ngids, sizeof(GETGROUPS_T));
+       if (getgrouplist(pw->pw_name, pw->pw_gid, gids, &ngids) == -1) {
+           efree(gids);
+           return NULL;
        }
+    }
+    if (ngids > 0) {
+       if ((item = make_grlist_item(pw->pw_name, gids, ngids)) == NULL)
+           errorx(1, "unable to parse group list for %s", pw->pw_name);
+       efree(gids);
+       if (rbinsert(grlist_cache, item) != NULL)
+           errorx(1, "unable to cache group list for %s, already exists",
+               pw->pw_name);
     } else {
-       if (mbr_uid_to_uuid(pw->pw_uid, uu) == 0 &&
-           mbr_gid_to_uuid(grp->gr_gid, gu) == 0 &&
-           mbr_check_membership(uu, gu, &ismember) == 0 && ismember) {
-           retval = TRUE;
-           goto done;
-       }
+       /* Should not happen. */
+       len = strlen(pw->pw_name) + 1;
+       item = emalloc(sizeof(*item) + len);
+       item->refcnt = 1;
+       item->k.name = (char *) item + sizeof(*item);
+       memcpy(item->k.name, pw->pw_name, len);
+       item->d.grlist = NULL;
+       if (rbinsert(grlist_cache, item) != NULL)
+           errorx(1, "unable to cache group list for %s, already exists",
+               pw->pw_name);
     }
-#else /* HAVE_MBR_CHECK_MEMBERSHIP */
-# ifdef HAVE_GETGROUPS
+done:
+    item->refcnt++;
+    return item->d.grlist;
+}
+
+void
+set_group_list(const char *user, GETGROUPS_T *gids, int ngids)
+{
+    struct cache_item key, *item;
+    struct rbnode *node;
+
     /*
-     * If we are matching the invoking or list user and that user has a
-     * supplementary group vector, check it.
+     * Cache group db entry if it doesn't already exist
      */
-    if (user_ngroups > 0 &&
-       strcmp(pw->pw_name, list_pw ? list_pw->pw_name : user_name) == 0) {
-       for (i = 0; i < user_ngroups; i++) {
-           if (grp->gr_gid == user_groups[i]) {
-               retval = TRUE;
+    key.k.name = (char *) user;
+    if ((node = rbfind(grlist_cache, &key)) == NULL) {
+       if ((item = make_grlist_item(user, gids, ngids)) == NULL)
+           errorx(1, "unable to parse group list for %s", user);
+       if (rbinsert(grlist_cache, item) != NULL)
+           errorx(1, "unable to cache group list for %s, already exists",
+               user);
+    }
+}
+
+int
+user_in_group(struct passwd *pw, const char *group)
+{
+    struct group_list *grlist;
+    struct group *grp = NULL;
+    int i, matched = FALSE;
+
+    if ((grlist = get_group_list(pw)) != NULL) {
+       /*
+        * If it could be a sudo-style group ID check gids first.
+        */
+       if (group[0] == '#') {
+           gid_t gid = atoi(group + 1);
+           if (gid == pw->pw_gid) {
+               matched = TRUE;
                goto done;
            }
-       }
-    } else
-# endif /* HAVE_GETGROUPS */
-    {
-       if (grp != NULL && grp->gr_mem != NULL) {
-           for (gr_mem = grp->gr_mem; *gr_mem; gr_mem++) {
-               if (strcmp(*gr_mem, pw->pw_name) == 0) {
-                   retval = TRUE;
+           for (i = 0; i < grlist->ngids; i++) {
+               if (gid == grlist->gids[i]) {
+                   matched = TRUE;
                    goto done;
                }
            }
        }
-    }
-#endif /* HAVE_MBR_CHECK_MEMBERSHIP */
 
+       /*
+        * Next check the supplementary group vector.
+        * It usually includes the password db group too.
+        */
+       for (i = 0; i < grlist->ngroups; i++) {
+           if (strcasecmp(group, grlist->groups[i]) == 0) {
+               matched = TRUE;
+               goto done;
+           }
+       }
+
+       /* Finally check against user's primary (passwd file) group. */
+       if ((grp = sudo_getgrgid(pw->pw_gid)) != NULL) {
+           if (strcasecmp(group, grp->gr_name) == 0) {
+               matched = TRUE;
+               goto done;
+           }
+       }
 done:
-    if (grp != NULL)
-       gr_delref(grp);
-    return retval;
+       if (grp != NULL)
+           gr_delref(grp);
+       grlist_delref(grlist);
+    }
+    return matched;
 }
diff --git a/plugins/sudoers/regress/logging/check_wrap.c b/plugins/sudoers/regress/logging/check_wrap.c
new file mode 100644 (file)
index 0000000..2b904d9
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif /* STDC_HEADERS */
+#ifdef HAVE_STRING_H
+# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS)
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif /* HAVE_STRING_H */
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif /* HAVE_STRINGS_H */
+
+#include "missing.h"
+#include "error.h"
+
+extern void writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen);
+
+static void
+usage(void)
+{
+    fprintf(stderr, "usage: check_wrap inputfile\n");
+    exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+    size_t len;
+    FILE *fp;
+    char *cp, *dash, *line, lines[2][2048];
+    int which = 0;
+
+    if (argc != 2)
+       usage();
+
+    fp = fopen(argv[1], "r");
+    if (fp == NULL)
+       errorx(1, "unable to open %s", argv[1]);
+
+    /*
+     * Each test record consists of a log entry on one line and a list of
+     * line lengths to test it with on the next.  E.g.
+     *
+     * Jun 30 14:49:51 : millert : TTY=ttypn ; PWD=/usr/src/local/millert/hg/sudo/trunk/plugins/sudoers ; USER=root ; TSID=0004LD ; COMMAND=/usr/local/sbin/visudo
+     * 60-80,40
+     */
+    while ((line = fgets(lines[which], sizeof(lines[which]), fp)) != NULL) {
+       len = strcspn(line, "\n");
+       line[len] = '\0';
+
+       /* If we read the 2nd line, parse list of line lengths and check. */
+       if (which) {
+           for (cp = strtok(lines[1], ","); cp != NULL; cp = strtok(NULL, ",")) {
+               size_t maxlen;
+               /* May be either a number or a range. */
+               len = maxlen = atoi(cp);
+               dash = strchr(cp, '-');
+               if (dash)
+                   maxlen = atoi(dash + 1);
+               while (len <= maxlen) {
+                   printf("# word wrap at %d characters\n", (int)len);
+                   writeln_wrap(stdout, lines[0], strlen(lines[0]), len);
+                   len++;
+               }
+           }
+       }
+       which = !which;
+    }
+
+    exit(0);
+}
+
+void
+cleanup(int gotsig)
+{
+    return;
+}
diff --git a/plugins/sudoers/regress/logging/check_wrap.in b/plugins/sudoers/regress/logging/check_wrap.in
new file mode 100644 (file)
index 0000000..a2d1f08
--- /dev/null
@@ -0,0 +1,4 @@
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ; PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list users
+60-80,120,140
+Jun 26 18:00:06 : millert : TTY=ttypm ; PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+60-80,120,140
diff --git a/plugins/sudoers/regress/logging/check_wrap.out.ok b/plugins/sudoers/regress/logging/check_wrap.out.ok
new file mode 100644 (file)
index 0000000..4842443
--- /dev/null
@@ -0,0 +1,175 @@
+# word wrap at 60 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1
+    ; PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 61 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1
+    ; PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 62 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 63 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 64 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 65 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 66 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 67 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool
+    list users
+# word wrap at 68 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool
+    list users
+# word wrap at 69 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool
+    list users
+# word wrap at 70 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool
+    list users
+# word wrap at 71 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool
+    list users
+# word wrap at 72 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list
+    users
+# word wrap at 73 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list
+    users
+# word wrap at 74 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list
+    users
+# word wrap at 75 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list
+    users
+# word wrap at 76 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list
+    users
+# word wrap at 77 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list
+    users
+# word wrap at 78 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 79 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 80 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ;
+    PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 120 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ; PWD=/home/tu2sp3-a ; USER=root ;
+    COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 140 characters
+Jul 11 11:30:17 : tu2sp3-a : command not allowed ; TTY=pts/1 ; PWD=/home/tu2sp3-a ; USER=root ; COMMAND=/opt/quest/bin/vastool list users
+# word wrap at 60 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 61 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 62 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 63 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 64 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 65 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 66 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 67 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 68 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 69 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ;
+    TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 70 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT
+    ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 71 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT
+    ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 72 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 73 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 74 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 75 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 76 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 77 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 78 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 79 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ;
+    PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 80 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ; PWD=/usr/src/local/millert/hg/sudo/build
+    ; USER=root ; TSID=0004KT ; COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 120 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ; PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ;
+    COMMAND=/bin/rm /root/.bash_profile
+# word wrap at 140 characters
+Jun 26 18:00:06 : millert : TTY=ttypm ; PWD=/usr/src/local/millert/hg/sudo/build ; USER=root ; TSID=0004KT ; COMMAND=/bin/rm
+    /root/.bash_profile
index 17c87b4a6dd9372ad802877b900419dc39a8a8e5..84215fb098764c3b430f95b20c5d1d494b265c07 100644 (file)
@@ -50,7 +50,7 @@
 /*
  * Prototypes
  */
-static void runas_setgroups(void);
+static struct group_list *runas_setgroups(void);
 
 /*
  * We keep track of the current permisstions and use a stack to restore
@@ -67,20 +67,13 @@ struct perm_state {
 #ifdef HAVE_SETRESUID
     gid_t sgid;
 #endif
-    GETGROUPS_T *groups;
-    int ngroups;
+    struct group_list *grlist;
 };
 
 #define PERM_STACK_MAX 16
 static struct perm_state perm_stack[PERM_STACK_MAX];
 static int perm_stack_depth = 0;
 
-/* XXX - make a runas_user struct? */
-int runas_ngroups = -1;
-#ifdef HAVE_GETGROUPS
-GETGROUPS_T *runas_groups;
-#endif
-
 #undef ID
 #define ID(x) (state->x == ostate->x ? -1 : state->x)
 #undef OID
@@ -91,6 +84,7 @@ rewind_perms(void)
 {
     while (perm_stack_depth > 1)
        restore_perms();
+    grlist_delref(perm_stack[0].grlist);
 }
 
 #ifdef HAVE_SETRESUID
@@ -104,7 +98,7 @@ rewind_perms(void)
 int
 set_perms(int perm)
 {
-    struct perm_state *state, *ostate = NULL;
+    struct perm_state *state, *ostate;
     const char *errstr;
     int noexit;
 
@@ -112,17 +106,22 @@ set_perms(int perm)
     CLR(perm, PERM_MASK);
 
     if (perm_stack_depth == PERM_STACK_MAX) {
-       errstr = "perm stack overflow";
+       errstr = _("perm stack overflow");
        errno = EINVAL;
        goto bad;
     }
 
     state = &perm_stack[perm_stack_depth];
-    if (perm_stack_depth)
+    if (perm != PERM_INITIAL) {
+       if (perm_stack_depth == 0) {
+           errstr = _("perm stack underflow");
+           errno = EINVAL;
+           goto bad;
+       }
        ostate = &perm_stack[perm_stack_depth - 1];
-
-    if (perm != PERM_INITIAL && memcmp(state, ostate, sizeof(*state)) == 0)
-       goto done;
+       if (memcmp(state, ostate, sizeof(*state)) == 0)
+           goto done;
+    }
 
     switch (perm) {
     case PERM_INITIAL:
@@ -146,8 +145,8 @@ set_perms(int perm)
        state->egid = getegid();
        state->sgid = state->egid; /* in case we are setgid */
 #endif
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_ROOT:
@@ -161,19 +160,11 @@ set_perms(int perm)
        state->rgid = -1;
        state->egid = -1;
        state->sgid = -1;
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_USER:
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
-               errstr = "setgroups()";
-               goto bad;
-           }
-       }
        state->rgid = -1;
        state->egid = user_gid;
        state->sgid = -1;
@@ -181,6 +172,14 @@ set_perms(int perm)
            errstr = "setresgid(-1, user_gid, -1)";
            goto bad;
        }
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
+               errstr = "setgroups()";
+               goto bad;
+           }
+       }
        state->ruid = user_uid;
        state->euid = user_uid;
        state->suid = ROOT_UID;
@@ -192,14 +191,6 @@ set_perms(int perm)
 
     case PERM_FULL_USER:
        /* headed for exec() */
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
-               errstr = "setgroups()";
-               goto bad;
-           }
-       }
        state->rgid = user_gid;
        state->egid = user_gid;
        state->sgid = user_gid;
@@ -207,6 +198,14 @@ set_perms(int perm)
            errstr = "setresgid(user_gid, user_gid, user_gid)";
            goto bad;
        }
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
+               errstr = "setgroups()";
+               goto bad;
+           }
+       }
        state->ruid = user_uid;
        state->euid = user_uid;
        state->suid = user_uid;
@@ -217,36 +216,33 @@ set_perms(int perm)
        break;
 
     case PERM_RUNAS:
-       runas_setgroups();
-       state->groups = runas_groups;
-       state->ngroups = runas_ngroups;
-
        state->rgid = -1;
        state->egid = runas_gr ? runas_gr->gr_gid : runas_pw->pw_gid;
        state->sgid = -1;
        if (setresgid(-1, ID(egid), -1)) {
-           errstr = "unable to change to runas gid";
+           errstr = _("unable to change to runas gid");
            goto bad;
        }
+       state->grlist = runas_setgroups();
        state->ruid = -1;
        state->euid = runas_pw ? runas_pw->pw_uid : user_uid;
        state->suid = -1;
        if (setresuid(-1, ID(euid), -1)) {
-           errstr = "unable to change to runas uid";
+           errstr = _("unable to change to runas uid");
            goto bad;
        }
        break;
 
     case PERM_SUDOERS:
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
 
        /* assumes euid == ROOT_UID, ruid == user */
        state->rgid = -1;
        state->egid = sudoers_gid;
        state->sgid = -1;
        if (setresgid(-1, ID(egid), -1))
-           error(1, "unable to change to sudoers gid");
+           error(1, _("unable to change to sudoers gid"));
 
        state->ruid = ROOT_UID;
        /*
@@ -266,8 +262,8 @@ set_perms(int perm)
        break;
 
     case PERM_TIMESTAMP:
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        state->rgid = -1;
        state->egid = -1;
        state->sgid = -1;
@@ -287,7 +283,7 @@ done:
 bad:
     /* XXX - better warnings inline */
     warningx("%s: %s", errstr,
-       errno == EAGAIN ? "too many processes" : strerror(errno));
+       errno == EAGAIN ? _("too many processes") : strerror(errno));
     if (noexit)
        return 0;
     exit(1);
@@ -323,12 +319,13 @@ restore_perms(void)
            state->egid, state->sgid, OID(rgid), OID(egid), OID(sgid));
        goto bad;
     }
-    if (state->ngroups != -1 && state->groups != ostate->groups) {
-       if (setgroups(ostate->ngroups, ostate->groups)) {
+    if (state->grlist != ostate->grlist) {
+       if (sudo_setgroups(ostate->grlist->ngids, ostate->grlist->gids)) {
            warning("setgroups()");
            goto bad;
        }
     }
+    grlist_delref(state->grlist);
     return;
 
 bad:
@@ -347,7 +344,7 @@ bad:
 int
 set_perms(int perm)
 {
-    struct perm_state *state, *ostate = NULL;
+    struct perm_state *state, *ostate;
     const char *errstr;
     int noexit;
 
@@ -355,17 +352,22 @@ set_perms(int perm)
     CLR(perm, PERM_MASK);
 
     if (perm_stack_depth == PERM_STACK_MAX) {
-       errstr = "perm stack overflow";
+       errstr = _("perm stack overflow");
        errno = EINVAL;
        goto bad;
     }
 
     state = &perm_stack[perm_stack_depth];
-    if (perm_stack_depth)
+    if (perm != PERM_INITIAL) {
+       if (perm_stack_depth == 0) {
+           errstr = _("perm stack underflow");
+           errno = EINVAL;
+           goto bad;
+       }
        ostate = &perm_stack[perm_stack_depth - 1];
-
-    if (perm != PERM_INITIAL && memcmp(state, ostate, sizeof(*state)) == 0)
-       goto done;
+       if (memcmp(state, ostate, sizeof(*state)) == 0)
+           goto done;
+    }
 
     switch (perm) {
     case PERM_INITIAL:
@@ -374,8 +376,8 @@ set_perms(int perm)
        state->euid = geteuid();
        state->rgid = getgid();
        state->egid = getegid();
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_ROOT:
@@ -395,25 +397,25 @@ set_perms(int perm)
        state->euid = ROOT_UID;
        state->rgid = -1;
        state->egid = -1;
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_USER:
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
-               errstr = "setgroups()";
-               goto bad;
-           }
-       }
        state->rgid = -1;
        state->egid = user_gid;
        if (setregid(-1, ID(egid))) {
            errstr = "setregid(-1, user_gid)";
            goto bad;
        }
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
+               errstr = "setgroups()";
+               goto bad;
+           }
+       }
        state->ruid = ROOT_UID;
        state->euid = user_uid;
        if (setreuid(ID(ruid), ID(euid))) {
@@ -424,20 +426,20 @@ set_perms(int perm)
 
     case PERM_FULL_USER:
        /* headed for exec() */
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
-               errstr = "setgroups()";
-               goto bad;
-           }
-       }
        state->rgid = user_gid;
        state->egid = user_gid;
        if (setregid(ID(rgid), ID(egid))) {
            errstr = "setregid(user_gid, user_gid)";
            goto bad;
        }
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
+               errstr = "setgroups()";
+               goto bad;
+           }
+       }
        state->ruid = user_uid;
        state->euid = user_uid;
        if (setreuid(ID(ruid), ID(euid))) {
@@ -447,33 +449,30 @@ set_perms(int perm)
        break;
 
     case PERM_RUNAS:
-       runas_setgroups();
-       state->groups = runas_groups;
-       state->ngroups = runas_ngroups;
-
        state->rgid = -1;
        state->egid = runas_gr ? runas_gr->gr_gid : runas_pw->pw_gid;
        if (setregid(ID(rgid), ID(egid))) {
-           errstr = "unable to change to runas gid";
+           errstr = _("unable to change to runas gid");
            goto bad;
        }
+       state->grlist = runas_setgroups();
        state->ruid = ROOT_UID;
        state->euid = runas_pw ? runas_pw->pw_uid : user_uid;
        if (setreuid(ID(ruid), ID(euid))) {
-           errstr = "unable to change to runas uid";
+           errstr = _("unable to change to runas uid");
            goto bad;
        }
        break;
 
     case PERM_SUDOERS:
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
 
        /* assume euid == ROOT_UID, ruid == user */
        state->rgid = -1;
        state->egid = sudoers_gid;
        if (setregid(-1, ID(egid)))
-           error(1, "unable to change to sudoers gid");
+           error(1, _("unable to change to sudoers gid"));
 
        state->ruid = ROOT_UID;
        /*
@@ -492,8 +491,8 @@ set_perms(int perm)
        break;
 
     case PERM_TIMESTAMP:
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        state->rgid = -1;
        state->egid = -1;
        state->ruid = ROOT_UID;
@@ -511,7 +510,7 @@ done:
 bad:
     /* XXX - better warnings inline */
     warningx("%s: %s", errstr,
-       errno == EAGAIN ? "too many processes" : strerror(errno));
+       errno == EAGAIN ? _("too many processes") : strerror(errno));
     if (noexit)
        return 0;
     exit(1);
@@ -552,12 +551,13 @@ restore_perms(void)
            state->egid, OID(rgid), OID(egid));
        goto bad;
     }
-    if (state->ngroups != -1 && state->groups != ostate->groups) {
-       if (setgroups(ostate->ngroups, ostate->groups)) {
+    if (state->grlist != ostate->grlist) {
+       if (sudo_setgroups(ostate->grlist->ngids, ostate->grlist->gids)) {
            warning("setgroups()");
            goto bad;
        }
     }
+    grlist_delref(state->grlist);
     return;
 
 bad:
@@ -576,7 +576,7 @@ bad:
 int
 set_perms(int perm)
 {
-    struct perm_state *state, *ostate = NULL;
+    struct perm_state *state, *ostate;
     const char *errstr;
     int noexit;
 
@@ -584,17 +584,22 @@ set_perms(int perm)
     CLR(perm, PERM_MASK);
 
     if (perm_stack_depth == PERM_STACK_MAX) {
-       errstr = "perm stack overflow";
+       errstr = _("perm stack overflow");
        errno = EINVAL;
        goto bad;
     }
 
     state = &perm_stack[perm_stack_depth];
-    if (perm_stack_depth)
+    if (perm != PERM_INITIAL) {
+       if (perm_stack_depth == 0) {
+           errstr = _("perm stack underflow");
+           errno = EINVAL;
+           goto bad;
+       }
        ostate = &perm_stack[perm_stack_depth - 1];
-
-    if (perm != PERM_INITIAL && memcmp(state, ostate, sizeof(*state)) == 0)
-       goto done;
+       if (memcmp(state, ostate, sizeof(*state)) == 0)
+           goto done;
+    }
 
     /*
      * Since we only have setuid() and seteuid() and semantics
@@ -619,8 +624,8 @@ set_perms(int perm)
        state->euid = geteuid();
        state->rgid = getgid();
        state->egid = getegid();
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_ROOT:
@@ -629,25 +634,25 @@ set_perms(int perm)
        state->euid = ROOT_UID;
        state->rgid = -1;
        state->egid = -1;
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_USER:
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
-               errstr = "setgroups()";
-               goto bad;
-           }
-       }
-       state->rgid = -1;
        state->egid = user_gid;
        if (setegid(ID(egid))) {
            errstr = "setegid(user_gid)";
            goto bad;
        }
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
+               errstr = "setgroups()";
+               goto bad;
+           }
+       }
+       state->rgid = -1;
        state->ruid = ROOT_UID;
        state->euid = user_uid;
        if (seteuid(ID(euid))) {
@@ -658,20 +663,20 @@ set_perms(int perm)
 
     case PERM_FULL_USER:
        /* headed for exec() */
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
-               errstr = "setgroups()";
-               goto bad;
-           }
-       }
        state->rgid = user_gid;
        state->egid = user_gid;
        if (setgid(user_gid)) {
            errstr = "setgid(user_gid)";
            goto bad;
        }
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
+               errstr = "setgroups()";
+               goto bad;
+           }
+       }
        state->ruid = user_uid;
        state->euid = user_uid;
        if (setuid(user_uid)) {
@@ -681,33 +686,30 @@ set_perms(int perm)
        break;
 
     case PERM_RUNAS:
-       runas_setgroups();
-       state->groups = runas_groups;
-       state->ngroups = runas_ngroups;
-
        state->rgid = -1;
        state->egid = runas_gr ? runas_gr->gr_gid : runas_pw->pw_gid;
        if (setegid(ID(egid))) {
-           errstr = "unable to change to runas gid";
+           errstr = _("unable to change to runas gid");
            goto bad;
        }
+       state->grlist = runas_setgroups();
        state->ruid = -1;
        state->euid = runas_pw ? runas_pw->pw_uid : user_uid;
        if (seteuid(ID(euid))) {
-           errstr = "unable to change to runas uid";
+           errstr = _("unable to change to runas uid");
            goto bad;
        }
        break;
 
     case PERM_SUDOERS:
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
 
        /* assume euid == ROOT_UID, ruid == user */
        state->rgid = -1;
        state->egid = sudoers_gid;
        if (setegid(ID(egid)))
-           error(1, "unable to change to sudoers gid");
+           error(1, _("unable to change to sudoers gid"));
 
        state->ruid = ROOT_UID;
        /*
@@ -726,8 +728,8 @@ set_perms(int perm)
        break;
 
     case PERM_TIMESTAMP:
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        state->rgid = -1;
        state->egid = -1;
        state->ruid = ROOT_UID;
@@ -745,7 +747,7 @@ done:
 bad:
     /* XXX - better warnings inline */
     warningx("%s: %s", errstr,
-       errno == EAGAIN ? "too many processes" : strerror(errno));
+       errno == EAGAIN ? _("too many processes") : strerror(errno));
     if (noexit)
        return 0;
     exit(1);
@@ -781,8 +783,8 @@ restore_perms(void)
        warning("setegid(%d)", OID(egid));
        goto bad;
     }
-    if (state->ngroups != -1 && state->groups != ostate->groups) {
-       if (setgroups(ostate->ngroups, ostate->groups)) {
+    if (state->grlist != ostate->grlist) {
+       if (sudo_setgroups(ostate->grlist->ngids, ostate->grlist->gids)) {
            warning("setgroups()");
            goto bad;
        }
@@ -791,6 +793,7 @@ restore_perms(void)
        warning("seteuid(%d)", OID(euid));
        goto bad;
     }
+    grlist_delref(state->grlist);
     return;
 
 bad:
@@ -807,7 +810,7 @@ bad:
 int
 set_perms(int perm)
 {
-    struct perm_state *state, *ostate = NULL;
+    struct perm_state *state, *ostate;
     const char *errstr;
     int noexit;
 
@@ -815,32 +818,37 @@ set_perms(int perm)
     CLR(perm, PERM_MASK);
 
     if (perm_stack_depth == PERM_STACK_MAX) {
-       errstr = "perm stack overflow";
+       errstr = _("perm stack overflow");
        errno = EINVAL;
        goto bad;
     }
 
     state = &perm_stack[perm_stack_depth];
-    if (perm_stack_depth)
+    if (perm != PERM_INITIAL) {
+       if (perm_stack_depth == 0) {
+           errstr = _("perm stack underflow");
+           errno = EINVAL;
+           goto bad;
+       }
        ostate = &perm_stack[perm_stack_depth - 1];
-
-    if (perm != PERM_INITIAL && memcmp(state, ostate, sizeof(*state)) == 0)
-       goto done;
+       if (memcmp(state, ostate, sizeof(*state)) == 0)
+           goto done;
+    }
 
     switch (perm) {
     case PERM_INITIAL:
        /* Stash initial state */
        state->ruid = getuid();
        state->rgid = getgid();
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
        break;
 
     case PERM_ROOT:
        state->ruid = ROOT_UID;
        state->rgid = -1;
-       state->groups = NULL;
-       state->ngroups = -1;
+       state->grlist = ostate->grlist;
+       grlist_addref(state->grlist);
        if (setuid(ROOT_UID)) {
            errstr = "setuid(ROOT_UID)";
            goto bad;
@@ -848,16 +856,16 @@ set_perms(int perm)
        break;
 
     case PERM_FULL_USER:
-       state->groups = user_groups;
-       state->ngroups = user_ngroups;
-       if (state->ngroups != -1 && state->groups != ostate->groups) {
-           if (setgroups(state->ngroups, state->groups)) {
+       state->rgid = user_gid;
+       (void) setgid(user_gid);
+       state->grlist = user_group_list;
+       grlist_addref(state->grlist);
+       if (state->grlist != ostate->grlist) {
+           if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
                errstr = "setgroups()";
                goto bad;
            }
        }
-       state->rgid = user_gid;
-       (void) setgid(user_gid);
        state->ruid = user_uid;
        if (setuid(user_uid)) {
            errstr = "setuid(user_uid)";
@@ -879,7 +887,7 @@ done:
 bad:
     /* XXX - better warnings inline */
     warningx("%s: %s", errstr,
-       errno == EAGAIN ? "too many processes" : strerror(errno));
+       errno == EAGAIN ? _("too many processes") : strerror(errno));
     if (noexit)
        return 0;
     exit(1);
@@ -897,16 +905,17 @@ restore_perms(void)
     ostate = &perm_stack[perm_stack_depth - 2];
     perm_stack_depth--;
 
-    if (state->ngroups != -1 && state->groups != ostate->groups) {
-       if (setgroups(ostate->ngroups, ostate->groups)) {
-           warning("setgroups()");
-           goto bad;
-       }
-    }
     if (OID(rgid) != -1 && setgid(ostate->rgid)) {
        warning("setgid(%d)", ostate->rgid);
        goto bad;
     }
+    if (state->grlist != ostate->grlist) {
+       if (sudo_setgroups(ostate->grlist->ngids, ostate->grlist->gids)) {
+           warning("setgroups()");
+           goto bad;
+       }
+    }
+    grlist_delref(state->grlist);
     if (OID(ruid) != -1 && setuid(ostate->ruid)) {
        warning("setuid(%d)", ostate->ruid);
        goto bad;
@@ -920,53 +929,26 @@ bad:
 # endif /* HAVE_SETREUID */
 #endif /* HAVE_SETRESUID */
 
-#ifdef HAVE_INITGROUPS
-static void
-runas_setgroups()
+static struct group_list *
+runas_setgroups(void)
 {
-    static struct passwd *pw;
-    struct passwd *opw = pw;
-
-    if (def_preserve_groups)
-       return;
+    struct passwd *pw;
+    struct group_list *grlist;
 
-    /*
-     * Use stashed copy of runas groups if available, else initgroups and stash.
-     */
-    pw = runas_pw ? runas_pw : sudo_user.pw;
-    if (pw != opw) {
-       pw = runas_pw ? runas_pw : sudo_user.pw;
-# ifdef HAVE_SETAUTHDB
-       aix_setauthdb(pw->pw_name);
-# endif
-       if (initgroups(pw->pw_name, pw->pw_gid) < 0)
-           log_error(USE_ERRNO|MSG_ONLY, "can't set runas group vector");
-# ifdef HAVE_GETGROUPS
-       if (runas_groups) {
-           efree(runas_groups);
-           runas_groups = NULL;
-       }
-       if ((runas_ngroups = getgroups(0, NULL)) > 0) {
-           runas_groups = emalloc2(runas_ngroups, sizeof(GETGROUPS_T));
-           if (getgroups(runas_ngroups, runas_groups) < 0)
-               log_error(USE_ERRNO|MSG_ONLY, "can't get runas group vector");
-       }
-#  ifdef HAVE_SETAUTHDB
-       aix_restoreauthdb();
-#  endif
-    } else {
-       if (setgroups(runas_ngroups, runas_groups) < 0)
-           log_error(USE_ERRNO|MSG_ONLY, "can't set runas group vector");
-# endif /* HAVE_GETGROUPS */
+    if (def_preserve_groups) {
+       grlist_addref(user_group_list);
+       return user_group_list;
     }
-}
 
-#else
-
-static void
-runas_setgroups()
-{
-    /* STUB */
+    pw = runas_pw ? runas_pw : sudo_user.pw;
+#ifdef HAVE_SETAUTHDB
+    aix_setauthdb(pw->pw_name);
+#endif
+    grlist = get_group_list(pw);
+#ifdef HAVE_SETAUTHDB
+    aix_restoreauthdb();
+#endif
+    if (sudo_setgroups(grlist->ngids, grlist->gids) < 0)
+       log_error(USE_ERRNO|MSG_ONLY, _("unable to set runas group vector"));
+    return grlist;
 }
-
-#endif /* HAVE_INITGROUPS */
index 2f77d894741354ad924d693b31df78832494bab1..de0d5a6bb4ce59673cbbc76abbf694dcf4797369 100644 (file)
@@ -204,31 +204,6 @@ sudo_read_nss(void)
 
 #endif /* HAVE_LDAP && _PATH_NSSWITCH_CONF */
 
-/* Reset user_groups based on passwd entry. */
-static void
-reset_groups(struct passwd *pw)
-{
-#if defined(HAVE_INITGROUPS) && defined(HAVE_GETGROUPS)
-    if (pw != sudo_user.pw) {
-# ifdef HAVE_SETAUTHDB
-       aix_setauthdb(pw->pw_name);
-# endif
-       if (initgroups(pw->pw_name, pw->pw_gid) == -1)
-           log_error(USE_ERRNO|MSG_ONLY, "can't reset group vector");
-       efree(user_groups);
-       user_groups = NULL;
-       if ((user_ngroups = getgroups(0, NULL)) > 0) {
-           user_groups = emalloc2(user_ngroups, sizeof(GETGROUPS_T));
-           if (getgroups(user_ngroups, user_groups) < 0)
-               log_error(USE_ERRNO|MSG_ONLY, "can't get group vector");
-       }
-# ifdef HAVE_SETAUTHDB
-       aix_restoreauthdb();
-# endif
-    }
-#endif
-}
-
 static int
 output(const char *buf)
 {
@@ -256,40 +231,38 @@ display_privs(struct sudo_nss_list *snl, struct passwd *pw)
     struct lbuf defs, privs;
     int count, olen;
 
-    /* Reset group vector so group matching works correctly. */
-    reset_groups(pw);
-
     lbuf_init(&defs, output, 4, NULL, sudo_user.cols);
     lbuf_init(&privs, output, 4, NULL, sudo_user.cols);
 
     /* Display defaults from all sources. */
-    lbuf_append(&defs, "Matching Defaults entries for ", pw->pw_name,
-       " on this host:\n", NULL);
+    lbuf_append(&defs, _("Matching Defaults entries for %s on this host:\n"),
+       pw->pw_name);
     count = 0;
     tq_foreach_fwd(snl, nss) {
        count += nss->display_defaults(nss, pw, &defs);
     }
     if (count)
-       lbuf_append(&defs, "\n\n", NULL);
+       lbuf_append(&defs, "\n\n");
     else
        defs.len = 0;
 
     /* Display Runas and Cmnd-specific defaults from all sources. */
     olen = defs.len;
-    lbuf_append(&defs, "Runas and Command-specific defaults for ", pw->pw_name,
-       ":\n", NULL);
+    lbuf_append(&defs, _("Runas and Command-specific defaults for %s:\n"),
+       pw->pw_name);
     count = 0;
     tq_foreach_fwd(snl, nss) {
        count += nss->display_bound_defaults(nss, pw, &defs);
     }
     if (count)
-       lbuf_append(&defs, "\n\n", NULL);
+       lbuf_append(&defs, "\n\n");
     else
        defs.len = olen;
 
     /* Display privileges from all sources. */
-    lbuf_append(&privs, "User ", pw->pw_name,
-       " may run the following commands on this host:\n", NULL);
+    lbuf_append(&privs,
+       _("User %s may run the following commands on this host:\n"),
+       pw->pw_name);
     count = 0;
     tq_foreach_fwd(snl, nss) {
        count += nss->display_privs(nss, pw, &privs);
@@ -298,7 +271,7 @@ display_privs(struct sudo_nss_list *snl, struct passwd *pw)
        lbuf_print(&defs);
        lbuf_print(&privs);
     } else {
-       printf("User %s is not allowed to run sudo on %s.\n", pw->pw_name,
+       printf(_("User %s is not allowed to run sudo on %s.\n"), pw->pw_name,
            user_shost);
     }
 
@@ -316,9 +289,6 @@ display_cmnd(struct sudo_nss_list *snl, struct passwd *pw)
 {
     struct sudo_nss *nss;
 
-    /* Reset group vector so group matching works correctly. */
-    reset_groups(pw);
-
     tq_foreach_fwd(snl, nss) {
        if (nss->display_cmnd(nss, pw) == 0)
            return TRUE;
index 8d08944a2480a59b7d78142fbdcb6b62f6d154f0..dab885d33eb231e06e81b8b03f03ad8a8642f036 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007-2011
+ * Copyright (c) 2007-2011 Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
index f533e591bd6b0483e79942197fd4cb1fc105392a..a3816e2cb8785ec0a9527d6c87870f7e321ec505 100644 (file)
 #ifdef HAVE_SELINUX
 # include <selinux/selinux.h>
 #endif
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-# include <membership.h>
-#endif
 #include <ctype.h>
 #include <setjmp.h>
 
 #include "sudoers.h"
-#include "lbuf.h"
 #include "interfaces.h"
 #include "sudoers_version.h"
 #include "auth/sudo_auth.h"
  * Prototypes
  */
 static void init_vars(char * const *);
-static int set_cmnd(int);
+static int set_cmnd(void);
 static void set_loginclass(struct passwd *);
-static void set_runasgr(char *);
-static void set_runaspw(char *);
+static void set_runaspw(const char *);
+static void set_runasgr(const char *);
+static int cb_runas_default(const char *);
 static int sudoers_policy_version(int verbose);
 static int deserialize_info(char * const settings[], char * const user_info[]);
 static char *find_editor(int nfiles, char **files, char ***argv_out);
 static void create_admin_success_flag(void);
 
-/* XXX */
-extern int runas_ngroups;
-extern GETGROUPS_T *runas_groups;
-
 /*
  * Globals
  */
@@ -163,6 +156,8 @@ sudoers_policy_open(unsigned int version, sudo_conv_t conversation,
        return -1;
     }
 
+    bindtextdomain("sudoers", LOCALEDIR);
+
     /*
      * Signal setup:
      * Ignore keyboard-generated signals so the user cannot interrupt
@@ -201,11 +196,11 @@ sudoers_policy_open(unsigned int version, sudo_conv_t conversation,
        if (nss->open(nss) == 0 && nss->parse(nss) == 0) {
            sources++;
            if (nss->setdefs(nss) != 0)
-               log_error(NO_STDERR|NO_EXIT, "problem with defaults entries");
+               log_error(NO_STDERR|NO_EXIT, _("problem with defaults entries"));
        }
     }
     if (sources == 0) {
-       warningx("no valid sudoers sources found, quitting");
+       warningx(_("no valid sudoers sources found, quitting"));
        return -1;
     }
 
@@ -236,7 +231,7 @@ sudoers_policy_open(unsigned int version, sudo_conv_t conversation,
        set_runaspw(runas_user ? runas_user : def_runas_default);
 
     if (!update_defaults(SETDEF_RUNAS))
-       log_error(NO_STDERR|NO_EXIT, "problem with defaults entries");
+       log_error(NO_STDERR|NO_EXIT, _("problem with defaults entries"));
 
     if (def_fqdn)
        set_fqdn();     /* deferred until after sudoers is parsed */
@@ -259,7 +254,7 @@ sudoers_policy_close(int exit_status, int error_code)
 
     /* We do not currently log the exit status. */
     if (error_code)
-       warningx("unable to execute %s: %s", safe_cmnd, strerror(error_code));
+       warningx(_("unable to execute %s: %s"), safe_cmnd, strerror(error_code));
 
     /* Close the session we opened in sudoers_policy_init_session(). */
     if (ISSET(sudo_mode, MODE_RUN|MODE_EDIT))
@@ -270,6 +265,8 @@ sudoers_policy_close(int exit_status, int error_code)
     pw_delref(runas_pw);
     if (runas_gr != NULL)
        gr_delref(runas_gr);
+    if (user_group_list != NULL)
+       grlist_delref(user_group_list);
 }
 
 /*
@@ -306,14 +303,14 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
 
     /* Is root even allowed to run sudo? */
     if (user_uid == 0 && !def_root_sudo) {
-        warningx("sudoers specifies that root is not allowed to sudo");
+        warningx(_("sudoers specifies that root is not allowed to sudo"));
         goto bad;
     }    
 
     /* Check for -C overriding def_closefrom. */
     if (user_closefrom >= 0 && user_closefrom != def_closefrom) {
        if (!def_closefrom_override) {
-           warningx("you are not permitted to use the -C option");
+           warningx(_("you are not permitted to use the -C option"));
            goto bad;
        }
        def_closefrom = user_closefrom;
@@ -335,16 +332,21 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
        NewArgv[0] = user_cmnd;
        NewArgv[1] = NULL;
     } else {
+       /* Must leave an extra slot before NewArgv for bash's --login */
        NewArgc = argc;
-       NewArgv = emalloc2(NewArgc + 1, sizeof(char *));
-       memcpy(NewArgv, argv, argc * sizeof(char *));
+       NewArgv = emalloc2(NewArgc + 2, sizeof(char *));
+       memcpy(++NewArgv, argv, argc * sizeof(char *));
        NewArgv[NewArgc] = NULL;
        if (ISSET(sudo_mode, MODE_LOGIN_SHELL))
            NewArgv[0] = estrdup(runas_pw->pw_shell);
     }
 
+    /* If given the -P option, set the "preserve_groups" flag. */
+    if (ISSET(sudo_mode, MODE_PRESERVE_GROUPS))
+       def_preserve_groups = TRUE;
+
     /* Find command in path */
-    cmnd_status = set_cmnd(sudo_mode);
+    cmnd_status = set_cmnd();
     if (cmnd_status == -1) {
        rval = -1;
        goto done;
@@ -352,7 +354,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
 
 #ifdef HAVE_SETLOCALE
     if (!setlocale(LC_ALL, def_sudoers_locale)) {
-       warningx("unable to set locale to \"%s\", using \"C\"",
+       warningx(_("unable to set locale to \"%s\", using \"C\""),
            def_sudoers_locale);
        setlocale(LC_ALL, "C");
     }
@@ -398,16 +400,12 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
        else
            pw = sudo_getpwnam(def_timestampowner);
        if (!pw)
-           log_error(0, "timestamp owner (%s): No such user",
+           log_error(0, _("timestamp owner (%s): No such user"),
                def_timestampowner);
        timestamp_uid = pw->pw_uid;
        pw_delref(pw);
     }
 
-    /* If given the -P option, set the "preserve_groups" flag. */
-    if (ISSET(sudo_mode, MODE_PRESERVE_GROUPS))
-       def_preserve_groups = TRUE;
-
     /* If no command line args and "shell_noargs" is not set, error out. */
     if (ISSET(sudo_mode, MODE_IMPLIED_SHELL) && !def_shell_noargs) {
        rval = -2; /* usage error */
@@ -418,8 +416,8 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
     if (def_requiretty) {
        int fd = open(_PATH_TTY, O_RDWR|O_NOCTTY);
        if (fd == -1) {
-           audit_failure(NewArgv, "no tty");
-           warningx("sorry, you must have a tty to run sudo");
+           audit_failure(NewArgv, _("no tty"));
+           warningx(_("sorry, you must have a tty to run sudo"));
            goto bad;
        } else
            (void) close(fd);
@@ -455,9 +453,6 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
                    if (sudo_user.pw != NULL)
                        pw_delref(sudo_user.pw);
                    sudo_user.pw = pw;
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-                   mbr_uid_to_uuid(user_uid, user_uuid);
-#endif
            }
        }
     }
@@ -465,7 +460,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
     /* If the user was not allowed to run the command we are done. */
     if (!ISSET(validated, VALIDATE_OK)) {
        if (ISSET(validated, FLAG_NO_USER | FLAG_NO_HOST)) {
-           audit_failure(NewArgv, "No user or host");
+           audit_failure(NewArgv, _("No user or host"));
            log_denial(validated, 1);
        } else {
            if (def_path_info) {
@@ -479,14 +474,14 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
                log_denial(validated,
                    !(cmnd_status == NOT_FOUND_DOT || cmnd_status == NOT_FOUND));
                if (cmnd_status == NOT_FOUND)
-                   warningx("%s: command not found", user_cmnd);
+                   warningx(_("%s: command not found"), user_cmnd);
                else if (cmnd_status == NOT_FOUND_DOT)
-                   warningx("ignoring `%s' found in '.'\nUse `sudo ./%s' if this is the `%s' you wish to run.", user_cmnd, user_cmnd, user_cmnd);
+                   warningx(_("ignoring `%s' found in '.'\nUse `sudo ./%s' if this is the `%s' you wish to run."), user_cmnd, user_cmnd, user_cmnd);
            } else {
                /* Just tell the user they are not allowed to run foo. */
                log_denial(validated, 1);
            }
-           audit_failure(NewArgv, "validation failure");
+           audit_failure(NewArgv, _("validation failure"));
        }
        goto bad;
     }
@@ -496,19 +491,19 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
 
     /* Finally tell the user if the command did not exist. */
     if (cmnd_status == NOT_FOUND_DOT) {
-       audit_failure(NewArgv, "command in current directory");
-       warningx("ignoring `%s' found in '.'\nUse `sudo ./%s' if this is the `%s' you wish to run.", user_cmnd, user_cmnd, user_cmnd);
+       audit_failure(NewArgv, _("command in current directory"));
+       warningx(_("ignoring `%s' found in '.'\nUse `sudo ./%s' if this is the `%s' you wish to run."), user_cmnd, user_cmnd, user_cmnd);
        goto bad;
     } else if (cmnd_status == NOT_FOUND) {
-       audit_failure(NewArgv, "%s: command not found", user_cmnd);
-       warningx("%s: command not found", user_cmnd);
+       audit_failure(NewArgv, _("%s: command not found"), user_cmnd);
+       warningx(_("%s: command not found"), user_cmnd);
        goto bad;
     }
 
     /* If user specified env vars make sure sudoers allows it. */
     if (ISSET(sudo_mode, MODE_RUN) && !def_setenv) {
        if (ISSET(sudo_mode, MODE_PRESERVE_ENV)) {
-           warningx("sorry, you are not allowed to preserve the environment");
+           warningx(_("sorry, you are not allowed to preserve the environment"));
            goto bad;
        } else
            validate_env_vars(sudo_user.env_vars);
@@ -578,6 +573,21 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
        /* Set cwd to run user's homedir. */
        command_info[info_len++] = fmt_string("cwd", runas_pw->pw_dir);
 
+       /*
+        * Newer versions of bash require the --login option to be used
+        * in conjunction with the -c option even if the shell name starts
+        * with a '-'.  Unfortunately, bash 1.x uses -login, not --login
+        * so this will cause an error for that.
+        */
+       if (NewArgc > 1 && strcmp(NewArgv[0], "-bash") == 0 &&
+           strcmp(NewArgv[1], "-c") == 0) {
+           /* Use the extra slot before NewArgv so we can store --login. */
+           NewArgv--;
+           NewArgc++;
+           NewArgv[0] = NewArgv[1];
+           NewArgv[1] = "--login";
+       }
+
 #if defined(__linux__) || defined(_AIX)
        /* Insert system-wide environment variables. */
        read_env_file(_PATH_ENVIRONMENT, TRUE);
@@ -624,22 +634,24 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
     }
     if (def_preserve_groups) {
        command_info[info_len++] = "preserve_groups=true";
-    } else if (runas_ngroups != -1) {
+    } else {
        int i, len;
        size_t glsize;
        char *cp, *gid_list;
+       struct group_list *grlist = get_group_list(runas_pw);
 
-       glsize = sizeof("runas_groups=") - 1 + (runas_ngroups * (MAX_UID_T_LEN + 1));
+       glsize = sizeof("runas_groups=") - 1 + (grlist->ngids * (MAX_UID_T_LEN + 1));
        gid_list = emalloc(glsize);
        memcpy(gid_list, "runas_groups=", sizeof("runas_groups=") - 1);
        cp = gid_list + sizeof("runas_groups=") - 1;
-       for (i = 0; i < runas_ngroups; i++) {
+       for (i = 0; i < grlist->ngids; i++) {
            /* XXX - check rval */
            len = snprintf(cp, glsize - (cp - gid_list), "%s%u",
-                i ? "," : "", (unsigned int) runas_groups[i]);
+                i ? "," : "", (unsigned int) grlist->gids[i]);
            cp += len;
        }
        command_info[info_len++] = gid_list;
+       grlist_delref(grlist);
     }
     if (def_closefrom >= 0)
        easprintf(&command_info[info_len++], "closefrom=%d", def_closefrom);
@@ -649,6 +661,8 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[],
        command_info[info_len++] = fmt_string("noexec_file", def_noexec_file);
     if (def_set_utmp)
        command_info[info_len++] = estrdup("set_utmp=true");
+    if (def_use_pty)
+       command_info[info_len++] = estrdup("use_pty=true");
     if (def_utmp_runas)
        command_info[info_len++] = fmt_string("utmp_user", runas_pw->pw_name);
 #ifdef HAVE_LOGIN_CAP_H
@@ -731,7 +745,7 @@ sudoers_policy_list(int argc, char * const argv[], int verbose,
     if (list_user) {
        list_pw = sudo_getpwnam(list_user);
        if (list_pw == NULL) {
-           warningx("unknown user: %s", list_user);
+           warningx(_("unknown user: %s"), list_user);
            return -1;
        }
     }
@@ -797,13 +811,19 @@ init_vars(char * const envp[])
         * YP/NIS/NIS+/LDAP/etc daemon has died.
         */
        if (sudo_mode == MODE_KILL || sudo_mode == MODE_INVALIDATE)
-           errorx(1, "unknown user: %s", user_name);
-       log_error(0, "unknown user: %s", user_name);
+           errorx(1, _("unknown user: %s"), user_name);
+       log_error(0, _("unknown user: %s"), user_name);
        /* NOTREACHED */
     }
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-    mbr_uid_to_uuid(user_uid, user_uuid);
-#endif
+
+    /*
+     * Get group list.
+     */
+    if (user_group_list == NULL)
+       user_group_list = get_group_list(sudo_user.pw);
+
+    /* Set runas callback. */
+    sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default;
 
     /* It is now safe to use log_error() and set_perms() */
 }
@@ -813,7 +833,7 @@ init_vars(char * const envp[])
  * and apply any command-specific defaults entries.
  */
 static int
-set_cmnd(int sudo_mode)
+set_cmnd(void)
 {
     int rval;
     char *path = user_path;
@@ -845,25 +865,42 @@ set_cmnd(int sudo_mode)
 
        /* set user_args */
        if (NewArgc > 1) {
-           char *to, **from;
+           char *to, *from, **av;
            size_t size, n;
 
            /* Alloc and build up user_args. */
-           for (size = 0, from = NewArgv + 1; *from; from++)
-               size += strlen(*from) + 1;
+           for (size = 0, av = NewArgv + 1; *av; av++)
+               size += strlen(*av) + 1;
            user_args = emalloc(size);
-           for (to = user_args, from = NewArgv + 1; *from; from++) {
-               n = strlcpy(to, *from, size - (to - user_args));
-               if (n >= size - (to - user_args))
-                   errorx(1, "internal error, set_cmnd() overflow");
-               to += n;
-               *to++ = ' ';
+           if (ISSET(sudo_mode, MODE_SHELL|MODE_LOGIN_SHELL)) {
+               /*
+                * When running a command via a shell, the sudo front-end
+                * escapes potential meta chars.  We unescape non-spaces
+                * for sudoers matching and logging purposes.
+                */
+               for (to = user_args, av = NewArgv + 1; (from = *av); av++) {
+                   while (*from) {
+                       if (from[0] == '\\' && !isspace((unsigned char)from[1]))
+                           from++;
+                       *to++ = *from++;
+                   }
+                   *to++ = ' ';
+               }
+               *--to = '\0';
+           } else {
+               for (to = user_args, av = NewArgv + 1; *av; av++) {
+                   n = strlcpy(to, *av, size - (to - user_args));
+                   if (n >= size - (to - user_args))
+                       errorx(1, _("internal error, set_cmnd() overflow"));
+                   to += n;
+                   *to++ = ' ';
+               }
+               *--to = '\0';
            }
-           *--to = '\0';
        }
     }
     if (strlen(user_cmnd) >= PATH_MAX)
-       errorx(1, "%s: file name too long", user_cmnd);
+       errorx(1, _("%s: %s"), user_cmnd, strerror(ENAMETOOLONG));
 
     if ((user_base = strrchr(user_cmnd, '/')) != NULL)
        user_base++;
@@ -871,10 +908,7 @@ set_cmnd(int sudo_mode)
        user_base = user_cmnd;
 
     if (!update_defaults(SETDEF_CMND))
-       log_error(NO_STDERR|NO_EXIT, "problem with defaults entries");
-
-    if (!runas_user && !runas_group)
-       set_runaspw(def_runas_default); /* may have been updated above */
+       log_error(NO_STDERR|NO_EXIT, _("problem with defaults entries"));
 
     return rval;
 }
@@ -899,17 +933,17 @@ open_sudoers(const char *sudoers, int doedit, int *keepopen)
        (statbuf.st_mode & 0007777) == 0400) {
 
        if (chmod(sudoers, sudoers_mode) == 0) {
-           warningx("fixed mode on %s", sudoers);
+           warningx(_("fixed mode on %s"), sudoers);
            SET(statbuf.st_mode, sudoers_mode);
            if (statbuf.st_gid != sudoers_gid) {
                if (chown(sudoers, (uid_t) -1, sudoers_gid) == 0) {
-                   warningx("set group on %s", sudoers);
+                   warningx(_("set group on %s"), sudoers);
                    statbuf.st_gid = sudoers_gid;
                } else
-                   warning("unable to set group on %s", sudoers);
+                   warning(_("unable to set group on %s"), sudoers);
            }
        } else
-           warning("unable to fix mode on %s", sudoers);
+           warning(_("unable to fix mode on %s"), sudoers);
     }
 
     /*
@@ -920,28 +954,28 @@ open_sudoers(const char *sudoers, int doedit, int *keepopen)
     set_perms(PERM_SUDOERS);
 
     if (rootstat != 0 && stat_sudoers(sudoers, &statbuf) != 0)
-       log_error(USE_ERRNO|NO_EXIT, "can't stat %s", sudoers);
+       log_error(USE_ERRNO|NO_EXIT, _("unable to stat %s"), sudoers);
     else if (!S_ISREG(statbuf.st_mode))
-       log_error(NO_EXIT, "%s is not a regular file", sudoers);
+       log_error(NO_EXIT, _("%s is not a regular file"), sudoers);
     else if ((statbuf.st_mode & 07577) != sudoers_mode)
-       log_error(NO_EXIT, "%s is mode 0%o, should be 0%o", sudoers,
+       log_error(NO_EXIT, _("%s is mode 0%o, should be 0%o"), sudoers,
            (unsigned int) (statbuf.st_mode & 07777),
            (unsigned int) sudoers_mode);
     else if (statbuf.st_uid != sudoers_uid)
-       log_error(NO_EXIT, "%s is owned by uid %u, should be %u", sudoers,
+       log_error(NO_EXIT, _("%s is owned by uid %u, should be %u"), sudoers,
            (unsigned int) statbuf.st_uid, (unsigned int) sudoers_uid);
-    else if (statbuf.st_gid != sudoers_gid)
-       log_error(NO_EXIT, "%s is owned by gid %u, should be %u", sudoers,
+    else if (statbuf.st_gid != sudoers_gid && ISSET(statbuf.st_mode, S_IRGRP|S_IWGRP))
+       log_error(NO_EXIT, _("%s is owned by gid %u, should be %u"), sudoers,
            (unsigned int) statbuf.st_gid, (unsigned int) sudoers_gid);
     else if ((fp = fopen(sudoers, "r")) == NULL)
-       log_error(USE_ERRNO|NO_EXIT, "can't open %s", sudoers);
+       log_error(USE_ERRNO|NO_EXIT, _("unable to open %s"), sudoers);
     else {
        /*
         * Make sure we can actually read sudoers so we can present the
         * user with a reasonable error message (unlike the lexer).
         */
        if (statbuf.st_size != 0 && fgetc(fp) == EOF) {
-           log_error(USE_ERRNO|NO_EXIT, "can't read %s", sudoers);
+           log_error(USE_ERRNO|NO_EXIT, _("unable to read %s"), sudoers);
            fclose(fp);
            fp = NULL;
        }
@@ -975,7 +1009,7 @@ set_loginclass(struct passwd *pw)
     if (login_class && strcmp(login_class, "-") != 0) {
        if (user_uid != 0 &&
            strcmp(runas_user ? runas_user : def_runas_default, "root") != 0)
-           errorx(1, "only root can use -c %s", login_class);
+           errorx(1, _("only root can use `-c %s'"), login_class);
     } else {
        login_class = pw->pw_class;
        if (!login_class || !*login_class)
@@ -985,7 +1019,7 @@ set_loginclass(struct passwd *pw)
 
     lc = login_getclass(login_class);
     if (!lc || !lc->lc_class || strcmp(lc->lc_class, login_class) != 0) {
-       log_error(errflags, "unknown login class: %s", login_class);
+       log_error(errflags, _("unknown login class: %s"), login_class);
        if (!lc)
            lc = login_getclass(NULL);  /* needed for login_getstyle() later */
     }
@@ -1019,7 +1053,7 @@ set_fqdn(void)
     if (!(hp = gethostbyname(user_host))) {
 #endif
        log_error(MSG_ONLY|NO_EXIT,
-           "unable to resolve host %s", user_host);
+           _("unable to resolve host %s"), user_host);
     } else {
        if (user_shost != user_host)
            efree(user_shost);
@@ -1041,8 +1075,8 @@ set_fqdn(void)
  * Get passwd entry for the user we are going to run commands as
  * and store it in runas_pw.  By default, commands run as "root".
  */
-static void
-set_runaspw(char *user)
+void
+set_runaspw(const char *user)
 {
     if (runas_pw != NULL)
        pw_delref(runas_pw);
@@ -1050,10 +1084,8 @@ set_runaspw(char *user)
        if ((runas_pw = sudo_getpwuid(atoi(user + 1))) == NULL)
            runas_pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0);
     } else {
-       if ((runas_pw = sudo_getpwnam(user)) == NULL) {
-           audit_failure(NewArgv, "unknown user: %s", user);
-           log_error(NO_MAIL|MSG_ONLY, "unknown user: %s", user);
-       }
+       if ((runas_pw = sudo_getpwnam(user)) == NULL)
+           log_error(NO_MAIL|MSG_ONLY, _("unknown user: %s"), user);
     }
 }
 
@@ -1062,7 +1094,7 @@ set_runaspw(char *user)
  * and store it in runas_gr.
  */
 static void
-set_runasgr(char *group)
+set_runasgr(const char *group)
 {
     if (runas_gr != NULL)
        gr_delref(runas_gr);
@@ -1071,10 +1103,22 @@ set_runasgr(char *group)
            runas_gr = sudo_fakegrnam(group);
     } else {
        if ((runas_gr = sudo_getgrnam(group)) == NULL)
-           log_error(NO_MAIL|MSG_ONLY, "unknown group: %s", group);
+           log_error(NO_MAIL|MSG_ONLY, _("unknown group: %s"), group);
     }
 }
 
+/*
+ * Callback for runas_default sudoers setting.
+ */
+static int
+cb_runas_default(const char *user)
+{
+    /* Only reset runaspw if user didn't specify one. */
+    if (!runas_user && !runas_group)
+       set_runaspw(user);
+    return TRUE;
+}
+
 /*
  * Cleanup hook for error()/errorx()
  */
@@ -1103,19 +1147,19 @@ sudoers_policy_version(int verbose)
        return -1;
     }
 
-    sudo_printf(SUDO_CONV_INFO_MSG, "Sudoers policy plugin version %s\n",
+    sudo_printf(SUDO_CONV_INFO_MSG, _("Sudoers policy plugin version %s\n"),
        PACKAGE_VERSION);
-    sudo_printf(SUDO_CONV_INFO_MSG, "Sudoers file grammar version %d\n",
+    sudo_printf(SUDO_CONV_INFO_MSG, _("Sudoers file grammar version %d\n"),
        SUDOERS_GRAMMAR_VERSION);
 
     if (verbose) {
-       sudo_printf(SUDO_CONV_INFO_MSG, "\nSudoers path: %s\n", sudoers_file);
+       sudo_printf(SUDO_CONV_INFO_MSG, _("\nSudoers path: %s\n"), sudoers_file);
 #ifdef HAVE_LDAP
 # ifdef _PATH_NSSWITCH_CONF
-       sudo_printf(SUDO_CONV_INFO_MSG, "nsswitch path: %s\n", _PATH_NSSWITCH_CONF);
+       sudo_printf(SUDO_CONV_INFO_MSG, _("nsswitch path: %s\n"), _PATH_NSSWITCH_CONF);
 # endif
-       sudo_printf(SUDO_CONV_INFO_MSG, "ldap.conf path: %s\n", _PATH_LDAP_CONF);
-       sudo_printf(SUDO_CONV_INFO_MSG, "ldap.secret path: %s\n", _PATH_LDAP_SECRET);
+       sudo_printf(SUDO_CONV_INFO_MSG, _("ldap.conf path: %s\n"), _PATH_LDAP_CONF);
+       sudo_printf(SUDO_CONV_INFO_MSG, _("ldap.secret path: %s\n"), _PATH_LDAP_SECRET);
 #endif
        dump_auth_methods();
        dump_defaults();
@@ -1130,7 +1174,7 @@ static int
 deserialize_info(char * const settings[], char * const user_info[])
 {
     char * const *cur;
-    const char *p;
+    const char *p, *groups = NULL;
     int flags = 0;
 
 #define MATCHES(s, v) (strncmp(s, v, sizeof(v) - 1) == 0)
@@ -1267,32 +1311,12 @@ deserialize_info(char * const settings[], char * const user_info[])
            continue;
        }
        if (MATCHES(*cur, "gid=")) {
-           user_gid = (gid_t) atoi(*cur + sizeof("gid=") - 1);
+           p = *cur + sizeof("gid=") - 1;
+           user_gid = (gid_t) atoi(p);
            continue;
        }
        if (MATCHES(*cur, "groups=")) {
-           /* Count number of groups */
-           const char *val = *cur + sizeof("groups=") - 1;
-           const char *cp;
-           if (val[0] != '\0') {
-               user_ngroups = 1;
-               for (cp = val; *cp != '\0'; cp++) {
-                   if (*cp == ',')
-                       user_ngroups++;
-               }
-
-               user_groups = emalloc2(user_ngroups, sizeof(GETGROUPS_T));
-               user_ngroups = 0;
-               cp = val;
-               for (;;) {
-                   /* XXX - strtol would be better here */
-                   user_groups[user_ngroups++] = atoi(cp);
-                   cp = strchr(cp, ',');
-                   if (cp == NULL)
-                       break;
-                   cp++; /* skip over comma */
-               }
-           }
+           groups = *cur + sizeof("groups=") - 1;
            continue;
        }
        if (MATCHES(*cur, "cwd=")) {
@@ -1325,6 +1349,36 @@ deserialize_info(char * const settings[], char * const user_info[])
     if (user_tty == NULL)
        user_tty = "unknown"; /* user_ttypath remains NULL */
 
+    if (groups != NULL && groups[0] != '\0') {
+       const char *cp;
+       GETGROUPS_T *gids;
+       int ngids;
+
+       /* Count number of groups, including passwd gid. */
+       ngids = 2;
+       for (cp = groups; *cp != '\0'; cp++) {
+           if (*cp == ',')
+               ngids++;
+       }
+
+       /* The first gid in the list is the passwd group gid. */
+       gids = emalloc2(ngids, sizeof(GETGROUPS_T));
+       gids[0] = user_gid;
+       ngids = 1;
+       cp = groups;
+       for (;;) {
+           gids[ngids] = atoi(cp);
+           if (gids[0] != gids[ngids])
+               ngids++;
+           cp = strchr(cp, ',');
+           if (cp == NULL)
+               break;
+           cp++; /* skip over comma */
+       }
+       set_group_list(user_name, gids, ngids);
+       efree(gids);
+    }
+
 #undef MATCHES
     return flags;
 }
@@ -1408,8 +1462,8 @@ find_editor(int nfiles, char **files, char ***argv_out)
            efree(editor);
     }
     if (!editor_path) {
-       audit_failure(NewArgv, "%s: command not found", editor);
-       warningx("%s: command not found", editor);
+       audit_failure(NewArgv, _("%s: command not found"), editor);
+       warningx(_("%s: command not found"), editor);
     }
     return editor_path;
 }
index 7e5d56bba4ae2e49b22974284b051c92b9b3867b..3c8c6a1e35456899576e7733d689e29860728394 100644 (file)
 #include "sudo_nss.h"
 #include "sudo_plugin.h"
 
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-# include <membership.h>
-#endif
+#define DEFAULT_TEXT_DOMAIN    "sudoers"
+#include "gettext.h"
+
+/*
+ * Password db and supplementary group IDs with associated group names.
+ */
+struct group_list {
+    char **groups;
+    GETGROUPS_T *gids;
+    int ngroups;
+    int ngids;
+};
 
 /*
  * Info pertaining to the invoking user.
@@ -60,13 +69,7 @@ struct sudo_user {
     char *cmnd_safe;
     char *class_name;
     char *krb5_ccname;
-    int   closefrom;
-    int   ngroups;
-    uid_t uid;
-    uid_t gid;
-    int   lines;
-    int   cols;
-    GETGROUPS_T *groups;
+    struct group_list *group_list;
     char * const * env_vars;
 #ifdef HAVE_SELINUX
     char *role;
@@ -74,9 +77,11 @@ struct sudo_user {
 #endif
     char *cwd;
     char *iolog_file;
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-    uuid_t uuid;
-#endif
+    int   closefrom;
+    int   lines;
+    int   cols;
+    uid_t uid;
+    uid_t gid;
 };
 
 /*
@@ -155,8 +160,7 @@ struct sudo_user {
 #define user_passwd            (sudo_user.pw->pw_passwd)
 #define user_uuid              (sudo_user.uuid)
 #define user_dir               (sudo_user.pw->pw_dir)
-#define user_ngroups           (sudo_user.ngroups)
-#define user_groups            (sudo_user.groups)
+#define user_group_list                (sudo_user.group_list)
 #define user_tty               (sudo_user.tty)
 #define user_ttypath           (sudo_user.ttypath)
 #define user_cwd               (sudo_user.cwd)
@@ -261,12 +265,16 @@ void sudo_setpwent(void);
 void sudo_endpwent(void);
 void sudo_setspent(void);
 void sudo_endspent(void);
+struct group_list *get_group_list(struct passwd *pw);
+void set_group_list(const char *, GETGROUPS_T *gids, int ngids);
 struct passwd *sudo_getpwnam(const char *);
 struct passwd *sudo_fakepwnam(const char *, gid_t);
 struct passwd *sudo_getpwuid(uid_t);
 struct group *sudo_getgrnam(const char *);
 struct group *sudo_fakegrnam(const char *);
 struct group *sudo_getgrgid(gid_t);
+void grlist_addref(struct group_list *);
+void grlist_delref(struct group_list *);
 void gr_addref(struct group *);
 void gr_delref(struct group *);
 void pw_addref(struct passwd *);
@@ -316,6 +324,9 @@ void group_plugin_unload(void);
 int group_plugin_query(const char *user, const char *group,
     const struct passwd *pwd);
 
+/* setgroups.c */
+int sudo_setgroups(int ngids, const GETGROUPS_T *gids);
+
 #ifndef _SUDO_MAIN
 extern struct sudo_user sudo_user;
 extern struct passwd *list_pw;
index e40fcefbfd4071af9841f441dbed530b992e9a66..4e91566283123efa1580f5c9d2db25f34849e19e 100644 (file)
@@ -91,6 +91,7 @@
 #include "missing.h"
 #include "alloc.h"
 #include "error.h"
+#include "gettext.h"
 
 #ifndef LINE_MAX
 # define LINE_MAX 2048
@@ -198,7 +199,7 @@ static void check_input(int, double *);
 static void delay(double);
 static void help(void) __attribute__((__noreturn__));
 static void usage(int);
-static void *open_io_fd(char *pathbuf, int len, const char *suffix);
+static int open_io_fd(char *pathbuf, int len, const char *suffix, union io_fd *fdp);
 static int parse_timing(const char *buf, const char *decimal, int *idx, double *seconds, size_t *nbytes);
 
 #ifdef HAVE_REGCOMP
@@ -242,6 +243,8 @@ main(int argc, char *argv[])
     setlocale(LC_ALL, "");
     decimal = localeconv()->decimal_point;
 #endif
+    bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have sudoreplay domain */
+    textdomain("sudoers");
 
     while ((ch = getopt(argc, argv, "d:f:hlm:s:V")) != -1) {
        switch(ch) {
@@ -259,7 +262,7 @@ main(int argc, char *argv[])
                else if (strcmp(cp, "ttyout") == 0)
                    SET(replay_filter, 1 << IOFD_TTYOUT);
                else
-                   errorx(1, "invalid filter option: %s", optarg);
+                   errorx(1, _("invalid filter option: %s"), optarg);
            }
            break;
        case 'h':
@@ -272,16 +275,16 @@ main(int argc, char *argv[])
            errno = 0;
            max_wait = strtod(optarg, &ep);
            if (*ep != '\0' || errno != 0)
-               errorx(1, "invalid max wait: %s", optarg);
+               errorx(1, _("invalid max wait: %s"), optarg);
            break;
        case 's':
            errno = 0;
            speed = strtod(optarg, &ep);
            if (*ep != '\0' || errno != 0)
-               errorx(1, "invalid speed factor: %s", optarg);
+               errorx(1, _("invalid speed factor: %s"), optarg);
            break;
        case 'V':
-           (void) printf("%s version %s\n", getprogname(), PACKAGE_VERSION);
+           (void) printf(_("%s version %s\n"), getprogname(), PACKAGE_VERSION);
            exit(0);
        default:
            usage(1);
@@ -304,13 +307,13 @@ main(int argc, char *argv[])
        plen = snprintf(path, sizeof(path), "%s/%.2s/%.2s/%.2s/timing",
            session_dir, id, &id[2], &id[4]);
        if (plen <= 0 || plen >= sizeof(path))
-           errorx(1, "%s/%.2s/%.2s/%.2s/%.2s/timing: %s", session_dir,
+           errorx(1, _("%s/%.2s/%.2s/%.2s/timing: %s"), session_dir,
                id, &id[2], &id[4], strerror(ENAMETOOLONG));
     } else {
        plen = snprintf(path, sizeof(path), "%s/%s/timing",
            session_dir, id);
        if (plen <= 0 || plen >= sizeof(path))
-           errorx(1, "%s/%s/timing: %s", session_dir,
+           errorx(1, _("%s/%s/timing: %s"), session_dir,
                id, strerror(ENAMETOOLONG));
     }
     plen -= 7;
@@ -318,9 +321,8 @@ main(int argc, char *argv[])
     /* Open files for replay, applying replay filter for the -f flag. */
     for (idx = 0; idx < IOFD_MAX; idx++) {
        if (ISSET(replay_filter, 1 << idx) || idx == IOFD_TIMING) {
-           io_fds[idx].v = open_io_fd(path, plen, io_fnames[idx]);
-           if (io_fds[idx].v == NULL)
-               error(1, "unable to open %s", path);
+           if (open_io_fd(path, plen, io_fnames[idx], &io_fds[idx]) == -1)
+               error(1, _("unable to open %s"), path);
        }
     }
 
@@ -329,16 +331,16 @@ main(int argc, char *argv[])
     strlcat(path, "/log", sizeof(path));
     lfile = fopen(path, "r");
     if (lfile == NULL)
-       error(1, "unable to open %s", path);
+       error(1, _("unable to open %s"), path);
     cp = NULL;
     len = 0;
     /* Pull out command (third line). */
     if (getline(&cp, &len, lfile) == -1 ||
        getline(&cp, &len, lfile) == -1 ||
        getline(&cp, &len, lfile) == -1) {
-       errorx(1, "invalid log file %s", path);
+       errorx(1, _("invalid log file %s"), path);
     }
-    printf("Replaying sudo session: %s", cp);
+    printf(_("Replaying sudo session: %s"), cp);
     free(cp);
     fclose(lfile);
 
@@ -364,7 +366,7 @@ main(int argc, char *argv[])
        if (ch != -1)
            (void) fcntl(STDIN_FILENO, F_SETFL, ch | O_NONBLOCK);
        if (!term_raw(STDIN_FILENO, 1))
-           error(1, "cannot set tty to raw mode");
+           error(1, _("unable to set tty to raw mode"));
     }
     fdsw = (fd_set *)emalloc2(howmany(STDOUT_FILENO + 1, NFDBITS),
        sizeof(fd_mask));
@@ -378,7 +380,7 @@ main(int argc, char *argv[])
     while (fgets(buf, sizeof(buf), io_fds[IOFD_TIMING].f) != NULL) {
 #endif
        if (!parse_timing(buf, decimal, &idx, &seconds, &nbytes))
-           errorx(1, "invalid timing file line: %s", buf);
+           errorx(1, _("invalid timing file line: %s"), buf);
 
        if (interactive)
            check_input(STDIN_FILENO, &speed);
@@ -420,7 +422,7 @@ main(int argc, char *argv[])
                        if (nready == 1)
                            continue;
                    }
-                   error(1, "writing to standard output");
+                   error(1, _("writing to standard output"));
                }
                off += nwritten;
            } while (nread > off);
@@ -449,20 +451,24 @@ delay(double secs)
       memcpy(&ts, &rts, sizeof(ts));
       rval = nanosleep(&ts, &rts);
     } while (rval == -1 && errno == EINTR);
-    if (rval == -1)
-       error(1, "nanosleep: tv_sec %ld, tv_nsec %ld", ts.tv_sec, ts.tv_nsec);
+    if (rval == -1) {
+       error(1, _("nanosleep: tv_sec %ld, tv_nsec %ld"),
+           (long)ts.tv_sec, (long)ts.tv_nsec);
+    }
 }
 
-static void *
-open_io_fd(char *path, int len, const char *suffix)
+static int
+open_io_fd(char *path, int len, const char *suffix, union io_fd *fdp)
 {
     path[len] = '\0';
     strlcat(path, suffix, PATH_MAX);
 
 #ifdef HAVE_ZLIB_H
-    return gzopen(path, "r");
+    fdp->g = gzopen(path, "r");
+    return fdp->g ? 0 : -1;
 #else
-    return fopen(path, "r");
+    fdp->f = fopen(path, "r");
+    return fdp->f ? 0 : -1;
 #endif
 }
 
@@ -494,7 +500,7 @@ parse_expr(struct search_node **headp, char *argv[])
            continue;
        case 'c': /* command */
            if (av[0][1] == '\0')
-               errorx(1, "ambiguous expression \"%s\"", *av);
+               errorx(1, _("ambiguous expression \"%s\""), *av);
            if (strncmp(*av, "cwd", strlen(*av)) == 0)
                type = ST_CWD;
            else if (strncmp(*av, "command", strlen(*av)) == 0)
@@ -519,7 +525,7 @@ parse_expr(struct search_node **headp, char *argv[])
            break;
        case 't': /* tty or to date */
            if (av[0][1] == '\0')
-               errorx(1, "ambiguous expression \"%s\"", *av);
+               errorx(1, _("ambiguous expression \"%s\""), *av);
            if (strncmp(*av, "todate", strlen(*av)) == 0)
                type = ST_TODATE;
            else if (strncmp(*av, "tty", strlen(*av)) == 0)
@@ -536,7 +542,7 @@ parse_expr(struct search_node **headp, char *argv[])
            if (av[0][1] != '\0')
                goto bad;
            if (stack_top + 1 == STACK_NODE_SIZE) {
-               errorx(1, "too many parenthesized expressions, max %d",
+               errorx(1, _("too many parenthesized expressions, max %d"),
                    STACK_NODE_SIZE);
            }
            node_stack[stack_top++] = sn;
@@ -547,13 +553,13 @@ parse_expr(struct search_node **headp, char *argv[])
                goto bad;
            /* pop */
            if (--stack_top < 0)
-               errorx(1, "unmatched ')' in expression");
+               errorx(1, _("unmatched ')' in expression"));
            if (node_stack[stack_top])
                sn->next = node_stack[stack_top]->next;
            return av - argv + 1;
        bad:
        default:
-           errorx(1, "unknown search term \"%s\"", *av);
+           errorx(1, _("unknown search term \"%s\""), *av);
            /* NOTREACHED */
        }
 
@@ -567,17 +573,17 @@ parse_expr(struct search_node **headp, char *argv[])
            av += parse_expr(&newsn->u.expr, av + 1);
        } else {
            if (*(++av) == NULL)
-               errorx(1, "%s requires an argument", av[-1]);
+               errorx(1, _("%s requires an argument"), av[-1]);
 #ifdef HAVE_REGCOMP
            if (type == ST_PATTERN) {
                if (regcomp(&newsn->u.cmdre, *av, REG_EXTENDED|REG_NOSUB) != 0)
-                   errorx(1, "invalid regex: %s", *av);
+                   errorx(1, _("invalid regular expression: %s"), *av);
            } else
 #endif
            if (type == ST_TODATE || type == ST_FROMDATE) {
                newsn->u.tstamp = get_date(*av);
                if (newsn->u.tstamp == -1)
-                   errorx(1, "could not parse date \"%s\"", *av);
+                   errorx(1, _("could not parse date \"%s\""), *av);
            } else {
                newsn->u.ptr = *av;
            }
@@ -590,11 +596,11 @@ parse_expr(struct search_node **headp, char *argv[])
        sn = newsn;
     }
     if (stack_top)
-       errorx(1, "unmatched '(' in expression");
+       errorx(1, _("unmatched '(' in expression"));
     if (or)
-       errorx(1, "illegal trailing \"or\"");
+       errorx(1, _("illegal trailing \"or\""));
     if (not)
-       errorx(1, "illegal trailing \"!\"");
+       errorx(1, _("illegal trailing \"!\""));
 
     return av - argv;
 }
@@ -666,7 +672,7 @@ list_session(char *logfile, REGEX_T *re, const char *user, const char *tty)
 
     fp = fopen(logfile, "r");
     if (fp == NULL) {
-       warning("unable to open %s", logfile);
+       warning(_("unable to open %s"), logfile);
        goto done;
     }
 
@@ -758,7 +764,7 @@ find_sessions(const char *dir, REGEX_T *re, const char *user, const char *tty)
 
     d = opendir(dir);
     if (d == NULL)
-       error(1, "unable to open %s", dir);
+       error(1, _("unable to open %s"), dir);
 
     /* XXX - would be faster to chdir and use relative names */
     sdlen = strlcpy(pathbuf, dir, sizeof(pathbuf));
@@ -810,7 +816,7 @@ list_sessions(int argc, char **argv, const char *pattern, const char *user,
     if (pattern) {
        re = &rebuf;
        if (regcomp(re, pattern, REG_EXTENDED|REG_NOSUB) != 0)
-           errorx(1, "invalid regex: %s", pattern);
+           errorx(1, _("invalid regex: %s"), pattern);
     }
 #else
     re = (char *) pattern;
@@ -932,10 +938,10 @@ static void
 usage(int fatal)
 {
     fprintf(fatal ? stderr : stdout,
-       "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n",
+       _("usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n"),
        getprogname());
     fprintf(fatal ? stderr : stdout,
-       "usage: %s [-h] [-d directory] -l [search expression]\n",
+       _("usage: %s [-h] [-d directory] -l [search expression]\n"),
        getprogname());
     if (fatal)
        exit(1);
@@ -944,16 +950,16 @@ usage(int fatal)
 static void
 help(void)
 {
-    (void) printf("%s - replay sudo session logs\n\n", getprogname());
+    (void) printf(_("%s - replay sudo session logs\n\n"), getprogname());
     usage(0);
-    (void) puts("\nOptions:");
-    (void) puts("  -d directory     specify directory for session logs");
-    (void) puts("  -f filter        specify which I/O type to display");
-    (void) puts("  -h               display help message and exit");
-    (void) puts("  -l [expression]  list available session IDs that match expression");
-    (void) puts("  -m max_wait      max number of seconds to wait between events");
-    (void) puts("  -s speed_factor  speed up or slow down output");
-    (void) puts("  -V               display version information and exit");
+    (void) puts(_("\nOptions:\n"
+       "  -d directory     specify directory for session logs\n"
+       "  -f filter        specify which I/O type to display\n"
+       "  -h               display help message and exit\n"
+       "  -l [expression]  list available session IDs that match expression\n"
+       "  -m max_wait      max number of seconds to wait between events\n"
+       "  -s speed_factor  speed up or slow down output\n"
+       "  -V               display version information and exit"));
     exit(0);
 }
 
index 60e338bcfa1ce11e1a8e831a5895179dbb083119..5eda9d02cb494331998cff16af630552a38d18df 100644 (file)
@@ -78,9 +78,10 @@ void print_defaults(void);
 void print_privilege(struct privilege *);
 void print_userspecs(void);
 void usage(void) __attribute__((__noreturn__));
-void set_runasgr(char *);
-void set_runaspw(char *);
 void cleanup(int);
+static void set_runaspw(const char *);
+static void set_runasgr(const char *);
+static int cb_runas_default(const char *);
 static int testsudoers_printf(int msg_type, const char *fmt, ...);
 static int testsudoers_print(const char *msg);
 
@@ -105,6 +106,7 @@ extern int (*trace_print)(const char *msg);
 struct interface *interfaces;
 struct sudo_user sudo_user;
 struct passwd *list_pw;
+static char *runas_group, *runas_user;
 extern int parse_error;
 sudo_printf_t sudo_printf = testsudoers_printf;
 
@@ -125,7 +127,7 @@ main(int argc, char *argv[])
     struct cmndspec *cs;
     struct privilege *priv;
     struct userspec *us;
-    char *p, *grfile, *pwfile, *runas_group, *runas_user;
+    char *p, *grfile, *pwfile;
     char hbuf[MAXHOSTNAMELEN + 1];
     int match, host_match, runas_match, cmnd_match;
     int ch, dflag;
@@ -142,7 +144,7 @@ main(int argc, char *argv[])
 #endif
 
     dflag = 0;
-    grfile = pwfile = runas_group = runas_user = NULL;
+    grfile = pwfile = NULL;
     while ((ch = getopt(argc, argv, "dg:G:h:p:tu:")) != -1) {
        switch (ch) {
            case 'd':
@@ -197,7 +199,7 @@ main(int argc, char *argv[])
        argc -= 2;
     }
     if ((sudo_user.pw = sudo_getpwnam(user_name)) == NULL)
-       errorx(1, "no passwd entry for %s!", user_name);
+       errorx(1, _("unknown user: %s"), user_name);
 
     if (user_host == NULL) {
        if (gethostname(hbuf, sizeof(hbuf)) != 0)
@@ -225,7 +227,7 @@ main(int argc, char *argv[])
        for (to = user_args, from = argv + 1; *from; from++) {
            n = strlcpy(to, *from, size - (to - user_args));
            if (n >= size - (to - user_args))
-                   errorx(1, "internal error, init_vars() overflow");
+                   errorx(1, _("internal error, init_vars() overflow"));
            to += n;
            *to++ = ' ';
        }
@@ -235,6 +237,9 @@ main(int argc, char *argv[])
     /* Initialize default values. */
     init_defaults();
 
+    /* Set runas callback. */
+    sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default;
+
     /* Load ip addr/mask for each interface. */
     if (get_net_ifs(&p) > 0)
        set_interfaces(p);
@@ -301,11 +306,11 @@ main(int argc, char *argv[])
                    }
                }
            } else
-               puts("\thost  unmatched");
+               puts(_("\thost  unmatched"));
        }
     }
-    printf("\nCommand %s\n", match == ALLOW ? "allowed" :
-       match == DENY ? "denied" : "unmatched");
+    puts(match == ALLOW ? _("\nCommand allowed") :
+       match == DENY ?  _("\nCommand denied") :  _("\nCommand unmatched"));
 
     /*
      * Exit codes:
@@ -319,30 +324,46 @@ main(int argc, char *argv[])
     exit(match == ALLOW ? 0 : match + 3);
 }
 
-void
-set_runaspw(char *user)
+static void
+set_runaspw(const char *user)
 {
+    if (runas_pw != NULL)
+       pw_delref(runas_pw);
     if (*user == '#') {
        if ((runas_pw = sudo_getpwuid(atoi(user + 1))) == NULL)
            runas_pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0);
     } else {
        if ((runas_pw = sudo_getpwnam(user)) == NULL)
-           errorx(1, "unknown user: %s", user);
+           errorx(1, _("unknown user: %s"), user);
     }
 }
 
-void
-set_runasgr(char *group)
+static void
+set_runasgr(const char *group)
 {
+    if (runas_gr != NULL)
+       gr_delref(runas_gr);
     if (*group == '#') {
        if ((runas_gr = sudo_getgrgid(atoi(group + 1))) == NULL)
            runas_gr = sudo_fakegrnam(group);
     } else {
        if ((runas_gr = sudo_getgrnam(group)) == NULL)
-           errorx(1, "unknown group: %s", group);
+           errorx(1, _("unknown group: %s"), group);
     }
 }
 
+/* 
+ * Callback for runas_default sudoers setting.
+ */
+static int
+cb_runas_default(const char *user)
+{
+    /* Only reset runaspw if user didn't specify one. */
+    if (!runas_user && !runas_group)
+        set_runaspw(user);
+    return TRUE;
+}
+
 void
 sudo_setspent(void)
 {
index 7e84b566a28e287b1395113e3863326770519a43..7bb8eb310a771e69d81fd884ea1c2ed9b2dd9d64 100644 (file)
@@ -4,7 +4,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
+ * $Header: /cvs/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
  */
 
 #define FLEX_SCANNER
@@ -2249,7 +2249,9 @@ case 42:
 YY_RULE_SETUP
 #line 494 "toke.l"
 {
+#ifndef HAVE_SELINUX
                        got_alias:
+#endif
                            if (!fill(yytext, yyleng))
                                yyterminate();
                            LEXTRACE("ALIAS ");
@@ -2258,7 +2260,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 502 "toke.l"
+#line 504 "toke.l"
 {
                            /* no command args allowed for Defaults!/path */
                            if (!fill_cmnd(yytext, yyleng))
@@ -2269,7 +2271,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 510 "toke.l"
+#line 512 "toke.l"
 {
                            BEGIN GOTCMND;
                            LEXTRACE("COMMAND ");
@@ -2279,7 +2281,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 517 "toke.l"
+#line 519 "toke.l"
 {
                            /* directories can't have args... */
                            if (yytext[yyleng - 1] == '/') {
@@ -2297,7 +2299,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 532 "toke.l"
+#line 534 "toke.l"
 {
                            LEXTRACE("BEGINSTR ");
                            yylval.string = NULL;
@@ -2307,7 +2309,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 539 "toke.l"
+#line 541 "toke.l"
 {
                            /* a word */
                            if (!fill(yytext, yyleng))
@@ -2318,7 +2320,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 547 "toke.l"
+#line 549 "toke.l"
 {
                            LEXTRACE("( ");
                            return '(';
@@ -2326,7 +2328,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 552 "toke.l"
+#line 554 "toke.l"
 {
                            LEXTRACE(") ");
                            return ')';
@@ -2334,7 +2336,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 557 "toke.l"
+#line 559 "toke.l"
 {
                            LEXTRACE(", ");
                            return ',';
@@ -2342,7 +2344,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 562 "toke.l"
+#line 564 "toke.l"
 {
                            LEXTRACE("= ");
                            return '=';
@@ -2350,7 +2352,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 567 "toke.l"
+#line 569 "toke.l"
 {
                            LEXTRACE(": ");
                            return ':';
@@ -2358,7 +2360,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 572 "toke.l"
+#line 574 "toke.l"
 {
                            if (yyleng & 1) {
                                LEXTRACE("!");
@@ -2368,7 +2370,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 579 "toke.l"
+#line 581 "toke.l"
 {
                            if (YY_START == INSTR) {
                                LEXTRACE("ERROR ");
@@ -2383,14 +2385,14 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 591 "toke.l"
+#line 593 "toke.l"
 {                      /* throw away space/tabs */
                            sawspace = TRUE;    /* but remember for fill_args */
                        }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 595 "toke.l"
+#line 597 "toke.l"
 {
                            sawspace = TRUE;    /* remember for fill_args */
                            ++sudolineno;
@@ -2399,7 +2401,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 601 "toke.l"
+#line 603 "toke.l"
 {
                            BEGIN INITIAL;
                            ++sudolineno;
@@ -2410,7 +2412,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 609 "toke.l"
+#line 611 "toke.l"
 {
                            LEXTRACE("ERROR ");
                            return ERROR;
@@ -2422,7 +2424,7 @@ case YY_STATE_EOF(GOTCMND):
 case YY_STATE_EOF(STARTDEFS):
 case YY_STATE_EOF(INDEFS):
 case YY_STATE_EOF(INSTR):
-#line 614 "toke.l"
+#line 616 "toke.l"
 {
                            if (YY_START != INITIAL) {
                                BEGIN INITIAL;
@@ -2435,10 +2437,10 @@ case YY_STATE_EOF(INSTR):
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 624 "toke.l"
+#line 626 "toke.l"
 ECHO;
        YY_BREAK
-#line 2441 "lex.yy.c"
+#line 2443 "lex.yy.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -3329,7 +3331,7 @@ int main()
        return 0;
        }
 #endif
-#line 624 "toke.l"
+#line 626 "toke.l"
 
 struct path_list {
     char *path;
@@ -3367,11 +3369,11 @@ switch_dir(struct include_stack *stack, char *dirpath)
     if (!(dir = opendir(dirpath))) {
        if (errno != ENOENT) {
            char *errbuf;
-           if (asprintf(&errbuf, "%s: %s", dirpath, strerror(errno)) != -1) {
+           if (asprintf(&errbuf, _("%s: %s"), dirpath, strerror(errno)) != -1) {
                yyerror(errbuf);
                free(errbuf);
            } else {
-               yyerror("unable to allocate memory");
+               yyerror(_("unable to allocate memory"));
            }
        }
        goto done;
@@ -3490,14 +3492,14 @@ _push_include(char *path, int isdir)
     /* push current state onto stack */
     if (idepth >= istacksize) {
        if (idepth > MAX_SUDOERS_DEPTH) {
-           yyerror("too many levels of includes");
+           yyerror(_("too many levels of includes"));
            return FALSE;
        }
        istacksize += SUDOERS_STACK_INCREMENT;
        istack = (struct include_stack *) realloc(istack,
            sizeof(*istack) * istacksize);
        if (istack == NULL) {
-           yyerror("unable to allocate memory");
+           yyerror(_("unable to allocate memory"));
            return FALSE;
        }
     }
@@ -3518,11 +3520,11 @@ _push_include(char *path, int isdir)
     } else {
        if ((fp = open_sudoers(path, TRUE, &keepopen)) == NULL) {
            char *errbuf;
-           if (asprintf(&errbuf, "%s: %s", path, strerror(errno)) != -1) {
+           if (asprintf(&errbuf, _("%s: %s"), path, strerror(errno)) != -1) {
                yyerror(errbuf);
                free(errbuf);
            } else {
-               yyerror("unable to allocate memory");
+               yyerror(_("unable to allocate memory"));
            }
            return FALSE;
        }
@@ -3607,8 +3609,10 @@ parse_include(char *base)
 
     /* Make a copy of path and return it. */
     len += (int)(ep - cp);
-    if ((path = malloc(len + 1)) == NULL)
-       yyerror("unable to allocate memory");
+    if ((path = malloc(len + 1)) == NULL) {
+       yyerror(_("unable to allocate memory"));
+       return NULL;
+    }
     if (subst) {
        /* substitute for %h */
        char *pp = path;
index 9428049e40117d26cc190e9842371142fa744bbc..398e1d1359431a1b801ff888ccfd0153f519d0f3 100644 (file)
@@ -492,7 +492,9 @@ ALL {
                        }
 
 [[:upper:]][[:upper:][:digit:]_]* {
+#ifndef HAVE_SELINUX
                        got_alias:
+#endif
                            if (!fill(yytext, yyleng))
                                yyterminate();
                            LEXTRACE("ALIAS ");
@@ -658,11 +660,11 @@ switch_dir(struct include_stack *stack, char *dirpath)
     if (!(dir = opendir(dirpath))) {
        if (errno != ENOENT) {
            char *errbuf;
-           if (asprintf(&errbuf, "%s: %s", dirpath, strerror(errno)) != -1) {
+           if (asprintf(&errbuf, _("%s: %s"), dirpath, strerror(errno)) != -1) {
                yyerror(errbuf);
                free(errbuf);
            } else {
-               yyerror("unable to allocate memory");
+               yyerror(_("unable to allocate memory"));
            }
        }
        goto done;
@@ -781,14 +783,14 @@ _push_include(char *path, int isdir)
     /* push current state onto stack */
     if (idepth >= istacksize) {
        if (idepth > MAX_SUDOERS_DEPTH) {
-           yyerror("too many levels of includes");
+           yyerror(_("too many levels of includes"));
            return FALSE;
        }
        istacksize += SUDOERS_STACK_INCREMENT;
        istack = (struct include_stack *) realloc(istack,
            sizeof(*istack) * istacksize);
        if (istack == NULL) {
-           yyerror("unable to allocate memory");
+           yyerror(_("unable to allocate memory"));
            return FALSE;
        }
     }
@@ -809,11 +811,11 @@ _push_include(char *path, int isdir)
     } else {
        if ((fp = open_sudoers(path, TRUE, &keepopen)) == NULL) {
            char *errbuf;
-           if (asprintf(&errbuf, "%s: %s", path, strerror(errno)) != -1) {
+           if (asprintf(&errbuf, _("%s: %s"), path, strerror(errno)) != -1) {
                yyerror(errbuf);
                free(errbuf);
            } else {
-               yyerror("unable to allocate memory");
+               yyerror(_("unable to allocate memory"));
            }
            return FALSE;
        }
@@ -898,8 +900,10 @@ parse_include(char *base)
 
     /* Make a copy of path and return it. */
     len += (int)(ep - cp);
-    if ((path = malloc(len + 1)) == NULL)
-       yyerror("unable to allocate memory");
+    if ((path = malloc(len + 1)) == NULL) {
+       yyerror(_("unable to allocate memory"));
+       return NULL;
+    }
     if (subst) {
        /* substitute for %h */
        char *pp = path;
index 16636b6a9fbad97e1f987e3081d41ea5fd6ce323..9254c4571f4ded96b50183e6438d843bc72d6b64 100644 (file)
@@ -108,7 +108,7 @@ fill_txt(const char *src, int len, int olen)
 
     dst = olen ? realloc(yylval.string, olen + len + 1) : malloc(len + 1);
     if (dst == NULL) {
-       yyerror("unable to allocate memory");
+       yyerror(_("unable to allocate memory"));
        return FALSE;
     }
     yylval.string = dst;
@@ -160,7 +160,7 @@ fill_cmnd(const char *src, int len)
 
     dst = yylval.command.cmnd = (char *) malloc(len + 1);
     if (yylval.command.cmnd == NULL) {
-       yyerror("unable to allocate memory");
+       yyerror(_("unable to allocate memory"));
        return FALSE;
     }
 
@@ -199,7 +199,7 @@ fill_args(const char *s, int len, int addspace)
            (char *) malloc(arg_size);
        if (p == NULL) {
            efree(yylval.command.args);
-           yyerror("unable to allocate memory");
+           yyerror(_("unable to allocate memory"));
            return FALSE;
        } else
            yylval.command.args = p;
@@ -210,7 +210,7 @@ fill_args(const char *s, int len, int addspace)
     if (addspace)
        *p++ = ' ';
     if (strlcpy(p, s, arg_size - (p - yylval.command.args)) != len) {
-       yyerror("fill_args: buffer overflow");  /* paranoia */
+       yyerror(_("fill_args: buffer overflow"));       /* paranoia */
        return FALSE;
     }
     arg_len = new_len;
index dd31f62da2f268f446bbaba88d62fff171f7d19c..43119e233c57e35517baedfe2e776a86d8dee974 100644 (file)
@@ -58,6 +58,7 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif /* HAVE_UNISTD_H */
+#include <stdarg.h>
 #include <ctype.h>
 #include <pwd.h>
 #include <grp.h>
 #if TIME_WITH_SYS_TIME
 # include <time.h>
 #endif
-#ifdef __STDC__
-# include <stdarg.h>
-#else
-# include <varargs.h>
+#ifdef HAVE_SETLOCALE
+# include <locale.h>
 #endif
 
 #include "sudoers.h"
 #include "interfaces.h"
 #include "parse.h"
 #include "redblack.h"
+#include "gettext.h"
 #include "sudoers_version.h"
 #include <gram.h>
 
@@ -109,8 +109,6 @@ static int print_unused(void *, void *);
 static int reparse_sudoers(char *, char *, int, int);
 static int run_command(char *, char **);
 static int visudo_printf(int msg_type, const char *fmt, ...);
-static void print_selfref(char *name, int, int, int);
-static void print_undefined(char *name, int, int, int);
 static void setup_signals(void);
 static void help(void) __attribute__((__noreturn__));
 static void usage(int);
@@ -155,6 +153,13 @@ main(int argc, char *argv[])
 #if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
     setprogname(argc > 0 ? argv[0] : "visudo");
 #endif
+
+#ifdef HAVE_SETLOCALE 
+    setlocale(LC_ALL, "");
+#endif
+    bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have visudo domain */
+    textdomain("sudoers");
+
     if (argc < 1)
        usage(1);
 
@@ -166,8 +171,8 @@ main(int argc, char *argv[])
     while ((ch = getopt(argc, argv, "Vcf:sq")) != -1) {
        switch (ch) {
            case 'V':
-               (void) printf("%s version %s\n", getprogname(), PACKAGE_VERSION);
-               (void) printf("%s grammar version %d\n", getprogname(), SUDOERS_GRAMMAR_VERSION);
+               (void) printf(_("%s version %s\n"), getprogname(), PACKAGE_VERSION);
+               (void) printf(_("%s grammar version %d\n"), getprogname(), SUDOERS_GRAMMAR_VERSION);
                exit(0);
            case 'c':
                checkonly++;            /* check mode */
@@ -200,7 +205,7 @@ main(int argc, char *argv[])
     /* Mock up a fake sudo_user struct. */
     user_cmnd = "";
     if ((sudo_user.pw = sudo_getpwuid(getuid())) == NULL)
-       errorx(1, "you don't exist in the passwd database");
+       errorx(1, _("you do not exist in the %s database"), "passwd");
     get_hostname();
 
     /* Setup defaults data structures. */
@@ -230,7 +235,7 @@ main(int argc, char *argv[])
        if (!sp->doedit)
            continue;
        if (sp != tq_first(&sudoerslist)) {
-           printf("press return to edit %s: ", sp->path);
+           printf(_("press return to edit %s: "), sp->path);
            while ((ch = getchar()) != EOF && ch != '\n')
                    continue;
        }
@@ -276,7 +281,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
 #else
     if (stat(sp->path, &sb) == -1)
 #endif
-       error(1, "can't stat %s", sp->path);
+       error(1, _("unable to stat %s"), sp->path);
     orig_size = sb.st_size;
     mtim_get(&sb, &orig_mtim);
 
@@ -292,13 +297,13 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
            (void) lseek(sp->fd, (off_t)0, SEEK_SET);
            while ((nread = read(sp->fd, buf, sizeof(buf))) > 0)
                if (write(tfd, buf, nread) != nread)
-                   error(1, "write error");
+                   error(1, _("write error"));
 
            /* Add missing newline at EOF if needed. */
            if (nread > 0 && buf[nread - 1] != '\n') {
                buf[0] = '\n';
                if (write(tfd, buf, 1) != 1)
-                   error(1, "write error");
+                   error(1, _("write error"));
            }
        }
        (void) close(tfd);
@@ -352,18 +357,18 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
         * Sanity checks.
         */
        if (stat(sp->tpath, &sb) < 0) {
-           warningx("cannot stat temporary file (%s), %s unchanged",
+           warningx(_("unable to stat temporary file (%s), %s unchanged"),
                sp->tpath, sp->path);
            return FALSE;
        }
        if (sb.st_size == 0 && orig_size != 0) {
-           warningx("zero length temporary file (%s), %s unchanged",
+           warningx(_("zero length temporary file (%s), %s unchanged"),
                sp->tpath, sp->path);
            sp->modified = TRUE;
            return FALSE;
        }
     } else {
-       warningx("editor (%s) failed, %s unchanged", editor, sp->path);
+       warningx(_("editor (%s) failed, %s unchanged"), editor, sp->path);
        return FALSE;
     }
 
@@ -386,7 +391,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
     if (modified)
        sp->modified = modified;
     else
-       warningx("%s unchanged", sp->tpath);
+       warningx(_("%s unchanged"), sp->tpath);
 
     return TRUE;
 }
@@ -410,7 +415,7 @@ reparse_sudoers(char *editor, char *args, int strict, int quiet)
        last = tq_last(&sudoerslist);
        fp = fopen(sp->tpath, "r+");
        if (fp == NULL)
-           errorx(1, "can't re-open temporary file (%s), %s unchanged.",
+           errorx(1, _("unable to re-open temporary file (%s), %s unchanged."),
                sp->tpath, sp->path);
 
        /* Clean slate for each parse */
@@ -420,7 +425,7 @@ reparse_sudoers(char *editor, char *args, int strict, int quiet)
        /* Parse the sudoers temp file */
        yyrestart(fp);
        if (yyparse() && !parse_error) {
-           warningx("unabled to parse temporary file (%s), unknown error",
+           warningx(_("unabled to parse temporary file (%s), unknown error"),
                sp->tpath);
            parse_error = TRUE;
            errorfile = sp->path;
@@ -454,13 +459,15 @@ reparse_sudoers(char *editor, char *args, int strict, int quiet)
                    break;
                }
            }
-           if (sp == NULL)
-               errorx(1, "internal error, can't find %s in list!", sudoers);
+           if (sp == NULL) {
+               errorx(1, _("internal error, unable to find %s in list!"),
+                   sudoers);
+           }
        }
 
        /* If any new #include directives were added, edit them too. */
        for (sp = last->next; sp != NULL; sp = sp->next) {
-           printf("press return to edit %s: ", sp->path);
+           printf(_("press return to edit %s: "), sp->path);
            while ((ch = getchar()) != EOF && ch != '\n')
                    continue;
            edit_sudoers(sp, editor, args, errorlineno);
@@ -490,23 +497,23 @@ install_sudoers(struct sudoersfile *sp, int oldperms)
 #else
        if (stat(sp->path, &sb) == -1)
 #endif
-           error(1, "can't stat %s", sp->path);
+           error(1, _("unable to stat %s"), sp->path);
        if (chown(sp->tpath, sb.st_uid, sb.st_gid) != 0) {
-           warning("unable to set (uid, gid) of %s to (%d, %d)",
+           warning(_("unable to set (uid, gid) of %s to (%d, %d)"),
                sp->tpath, sb.st_uid, sb.st_gid);
        }
        if (chmod(sp->tpath, sb.st_mode & 0777) != 0) {
-           warning("unable to change mode of %s to 0%o", sp->tpath,
+           warning(_("unable to change mode of %s to 0%o"), sp->tpath,
                (sb.st_mode & 0777));
        }
     } else {
        if (chown(sp->tpath, SUDOERS_UID, SUDOERS_GID) != 0) {
-           warning("unable to set (uid, gid) of %s to (%d, %d)",
+           warning(_("unable to set (uid, gid) of %s to (%d, %d)"),
                sp->tpath, SUDOERS_UID, SUDOERS_GID);
            return FALSE;
        }
        if (chmod(sp->tpath, SUDOERS_MODE) != 0) {
-           warning("unable to change mode of %s to 0%o", sp->tpath,
+           warning(_("unable to change mode of %s to 0%o"), sp->tpath,
                SUDOERS_MODE);
            return FALSE;
        }
@@ -523,7 +530,7 @@ install_sudoers(struct sudoersfile *sp, int oldperms)
     } else {
        if (errno == EXDEV) {
            char *av[4];
-           warningx("%s and %s not on the same file system, using mv to rename",
+           warningx(_("%s and %s not on the same file system, using mv to rename"),
              sp->tpath, sp->path);
 
            /* Build up argument vector for the command */
@@ -537,7 +544,7 @@ install_sudoers(struct sudoersfile *sp, int oldperms)
 
            /* And run it... */
            if (run_command(_PATH_MV, av)) {
-               warningx("command failed: '%s %s %s', %s unchanged",
+               warningx(_("command failed: '%s %s %s', %s unchanged"),
                    _PATH_MV, sp->tpath, sp->path, sp->path);
                (void) unlink(sp->tpath);
                efree(sp->tpath);
@@ -547,7 +554,7 @@ install_sudoers(struct sudoersfile *sp, int oldperms)
            efree(sp->tpath);
            sp->tpath = NULL;
        } else {
-           warning("error renaming %s, %s unchanged", sp->tpath, sp->path);
+           warning(_("error renaming %s, %s unchanged"), sp->tpath, sp->path);
            (void) unlink(sp->tpath);
            return FALSE;
        }
@@ -607,7 +614,7 @@ whatnow(void)
     int choice, c;
 
     for (;;) {
-       (void) fputs("What now? ", stdout);
+       (void) fputs(_("What now? "), stdout);
        choice = getchar();
        for (c = choice; c != '\n' && c != EOF;)
            c = getchar();
@@ -621,10 +628,10 @@ whatnow(void)
            case 'Q':
                return choice;
            default:
-               (void) puts("Options are:");
-               (void) puts("  (e)dit sudoers file again");
-               (void) puts("  e(x)it without saving changes to sudoers file");
-               (void) puts("  (Q)uit and save changes to sudoers file (DANGER!)\n");
+               (void) puts(_("Options are:\n"
+                   "  (e)dit sudoers file again\n"
+                   "  e(x)it without saving changes to sudoers file\n"
+                   "  (Q)uit and save changes to sudoers file (DANGER!)\n"));
        }
     }
 }
@@ -658,14 +665,14 @@ run_command(char *path, char **argv)
 
     switch (pid = fork()) {
        case -1:
-           error(1, "unable to run %s", path);
+           error(1, _("unable to execute %s"), path);
            break;      /* NOTREACHED */
        case 0:
            sudo_endpwent();
            sudo_endgrent();
            closefrom(STDERR_FILENO + 1);
            execv(path, argv);
-           warning("unable to run %s", path);
+           warning(_("unable to run %s"), path);
            _exit(127);
            break;      /* NOTREACHED */
     }
@@ -690,13 +697,13 @@ check_syntax(char *sudoers_path, int quiet, int strict)
        sudoers_path = "stdin";
     } else if ((yyin = fopen(sudoers_path, "r")) == NULL) {
        if (!quiet)
-           warning("unable to open %s", sudoers_path);
+           warning(_("unable to open %s"), sudoers_path);
        exit(1);
     }
     init_parser(sudoers_path, quiet);
     if (yyparse() && !parse_error) {
        if (!quiet)
-           warningx("failed to parse %s file, unknown error", sudoers_path);
+           warningx(_("failed to parse %s file, unknown error"), sudoers_path);
        parse_error = TRUE;
        errorfile = sudoers_path;
     }
@@ -708,12 +715,12 @@ check_syntax(char *sudoers_path, int quiet, int strict)
     if (!quiet) {
        if (parse_error) {
            if (errorlineno != -1)
-               (void) printf("parse error in %s near line %d\n", errorfile,
-                   errorlineno);
+               (void) printf(_("parse error in %s near line %d\n"),
+                   errorfile, errorlineno);
            else
-               (void) printf("parse error in %s\n", errorfile);
+               (void) printf(_("parse error in %s\n"), errorfile);
        } else {
-           (void) printf("%s: parsed OK\n", sudoers_path);
+           (void) printf(_("%s: parsed OK\n"), sudoers_path);
        }
     }
     /* Check mode and owner in strict mode. */
@@ -726,14 +733,15 @@ check_syntax(char *sudoers_path, int quiet, int strict)
        if (sb.st_uid != SUDOERS_UID || sb.st_gid != SUDOERS_GID) {
            error = TRUE;
            if (!quiet) {
-               fprintf(stderr, "%s: wrong owner (uid, gid) should be (%d, %d)\n",
+               fprintf(stderr,
+                   _("%s: wrong owner (uid, gid) should be (%d, %d)\n"),
                    sudoers_path, SUDOERS_UID, SUDOERS_GID);
                }
        }
        if ((sb.st_mode & 07777) != SUDOERS_MODE) {
            error = TRUE;
            if (!quiet) {
-               fprintf(stderr, "%s: bad permissions, should be mode 0%o\n",
+               fprintf(stderr, _("%s: bad permissions, should be mode 0%o\n"),
                    sudoers_path, SUDOERS_MODE);
            }
        }
@@ -772,7 +780,7 @@ open_sudoers(const char *path, int doedit, int *keepopen)
            return NULL;
        }
        if (!lock_file(entry->fd, SUDO_TLOCK))
-           errorx(1, "%s busy, try again later", entry->path);
+           errorx(1, _("%s busy, try again later"), entry->path);
        if ((fp = fdopen(entry->fd, "r")) == NULL)
            error(1, "%s", entry->path);
        tq_append(&sudoerslist, entry);
@@ -815,7 +823,7 @@ get_editor(char **args)
        } else {
            if (def_env_editor) {
                /* If we are honoring $EDITOR this is a fatal error. */
-               errorx(1, "specified editor (%s) doesn't exist!", UserEditor);
+               errorx(1, _("specified editor (%s) doesn't exist"), UserEditor);
            } else {
                /* Otherwise, just ignore $EDITOR. */
                UserEditor = NULL;
@@ -838,7 +846,7 @@ get_editor(char **args)
 
        if (stat(UserEditor, &user_editor_sb) != 0) {
            /* Should never happen since we already checked above. */
-           error(1, "unable to stat editor (%s)", UserEditor);
+           error(1, _("unable to stat editor (%s)"), UserEditor);
        }
        EditorPath = estrdup(def_editor);
        Editor = strtok(EditorPath, ":");
@@ -886,7 +894,7 @@ get_editor(char **args)
 
        /* Bleah, none of the editors existed! */
        if (Editor == NULL || *Editor == '\0')
-           errorx(1, "no editor found (editor path = %s)", def_editor);
+           errorx(1, _("no editor found (editor path = %s)"), def_editor);
     }
     *args = EditorArgs;
     return Editor;
@@ -945,13 +953,8 @@ alias_remove_recursive(char *name, int type, int strict, int quiet)
     if ((a = alias_find(name, type)) != NULL) {
        tq_foreach_fwd(&a->members, m) {
            if (m->type == ALIAS) {
-               if (strcmp(name, m->name) == 0) {
-                   print_selfref(m->name, type, strict, quiet);
+               if (!alias_remove_recursive(m->name, type, strict, quiet))
                    error = 1;
-               } else {
-                   if (!alias_remove_recursive(m->name, type, strict, quiet))
-                       error = 1;
-               }
            }
        }
     }
@@ -962,6 +965,42 @@ alias_remove_recursive(char *name, int type, int strict, int quiet)
     return error;
 }
 
+static int
+check_alias(char *name, int type, int strict, int quiet)
+{
+    struct member *m;
+    struct alias *a;
+    int error = 0;
+
+    if ((a = alias_find(name, type)) != NULL) {
+       /* check alias contents */
+       tq_foreach_fwd(&a->members, m) {
+           if (m->type == ALIAS)
+               error += check_alias(m->name, type, strict, quiet);
+       }
+    } else {
+       if (!quiet) {
+           char *fmt;
+           if (errno == ELOOP) {
+               fmt = strict ?
+                   _("Error: cycle in %s_Alias `%s'") :
+                   _("Warning: cycle in %s_Alias `%s'");
+           } else {
+               fmt = strict ?
+                   _("Error: %s_Alias `%s' referenced but not defined") :
+                   _("Warning: %s_Alias `%s' referenced but not defined");
+           }
+           warningx(fmt,
+               type == HOSTALIAS ? "Host" : type == CMNDALIAS ? "Cmnd" :
+               type == USERALIAS ? "User" : type == RUNASALIAS ? "Runas" :
+               "Unknown", name);
+       }
+       error++;
+    }
+
+    return error;
+}
+
 /*
  * Iterate through the sudoers datastructures looking for undefined
  * aliases or unused aliases.
@@ -983,38 +1022,26 @@ check_aliases(int strict, int quiet)
        tq_foreach_fwd(&us->users, m) {
            if (m->type == ALIAS) {
                alias_seqno++;
-               if (alias_find(m->name, USERALIAS) == NULL) {
-                   print_undefined(m->name, USERALIAS, strict, quiet);
-                   error++;
-               }
+               error += check_alias(m->name, USERALIAS, strict, quiet);
            }
        }
        tq_foreach_fwd(&us->privileges, priv) {
            tq_foreach_fwd(&priv->hostlist, m) {
                if (m->type == ALIAS) {
                    alias_seqno++;
-                   if (alias_find(m->name, HOSTALIAS) == NULL) {
-                       print_undefined(m->name, HOSTALIAS, strict, quiet);
-                       error++;
-                   }
+                   error += check_alias(m->name, HOSTALIAS, strict, quiet);
                }
            }
            tq_foreach_fwd(&priv->cmndlist, cs) {
                tq_foreach_fwd(&cs->runasuserlist, m) {
                    if (m->type == ALIAS) {
                        alias_seqno++;
-                       if (alias_find(m->name, RUNASALIAS) == NULL) {
-                           print_undefined(m->name, RUNASALIAS, strict, quiet);
-                           error++;
-                       }
+                       error += check_alias(m->name, RUNASALIAS, strict, quiet);
                    }
                }
                if ((m = cs->cmnd)->type == ALIAS) {
                    alias_seqno++;
-                   if (alias_find(m->name, CMNDALIAS) == NULL) {
-                       print_undefined(m->name, CMNDALIAS, strict, quiet);
-                       error++;
-                   }
+                   error += check_alias(m->name, CMNDALIAS, strict, quiet);
                }
            }
        }
@@ -1024,28 +1051,35 @@ check_aliases(int strict, int quiet)
     tq_foreach_fwd(&userspecs, us) {
        tq_foreach_fwd(&us->users, m) {
            if (m->type == ALIAS) {
+               alias_seqno++;
                if (!alias_remove_recursive(m->name, USERALIAS, strict, quiet))
                    error++;
            }
        }
        tq_foreach_fwd(&us->privileges, priv) {
            tq_foreach_fwd(&priv->hostlist, m) {
-               if (m->type == ALIAS)
+               if (m->type == ALIAS) {
+                   alias_seqno++;
                    if (!alias_remove_recursive(m->name, HOSTALIAS, strict,
                        quiet))
                        error++;
+               }
            }
            tq_foreach_fwd(&priv->cmndlist, cs) {
                tq_foreach_fwd(&cs->runasuserlist, m) {
-                   if (m->type == ALIAS)
+                   if (m->type == ALIAS) {
+                       alias_seqno++;
                        if (!alias_remove_recursive(m->name, RUNASALIAS,
                            strict, quiet))
                            error++;
+                   }
                }
-               if ((m = cs->cmnd)->type == ALIAS)
+               if ((m = cs->cmnd)->type == ALIAS) {
+                   alias_seqno++;
                    if (!alias_remove_recursive(m->name, CMNDALIAS, strict,
                        quiet))
                        error++;
+               }
            }
        }
     }
@@ -1068,9 +1102,11 @@ check_aliases(int strict, int quiet)
        }
        tq_foreach_fwd(&d->binding, binding) {
            for (m = binding; m != NULL; m = m->next) {
-               if (m->type == ALIAS)
+               if (m->type == ALIAS) {
+                   alias_seqno++;
                    if (!alias_remove_recursive(m->name, atype, strict, quiet))
                        error++;
+               }
            }
        }
     }
@@ -1083,41 +1119,13 @@ check_aliases(int strict, int quiet)
     return strict ? error : 0;
 }
 
-static void
-print_undefined(char *name, int type, int strict, int quiet)
-{
-    if (!quiet) {
-       warningx("%s: %s_Alias `%s' referenced but not defined",
-           strict ? "Error" : "Warning",
-           type == HOSTALIAS ? "Host" : type == CMNDALIAS ? "Cmnd" :
-           type == USERALIAS ? "User" : type == RUNASALIAS ? "Runas" :
-           "Unknown", name);
-    }
-}
-
-static void
-print_selfref(name, type, strict, quiet)
-    char *name;
-    int type;
-    int strict;
-    int quiet;
-{
-    if (!quiet) {
-       warningx("%s: %s_Alias `%s' references self",
-           strict ? "Error" : "Warning",
-           type == HOSTALIAS ? "Host" : type == CMNDALIAS ? "Cmnd" :
-           type == USERALIAS ? "User" : type == RUNASALIAS ? "Runas" :
-           "Unknown", name);
-    }
-}
-
 static int
 print_unused(void *v1, void *v2)
 {
     struct alias *a = (struct alias *)v1;
     char *prefix = (char *)v2;
 
-    warningx("%s: unused %s_Alias %s", prefix,
+    warningx(_("%s: unused %s_Alias %s"), prefix,
        a->type == HOSTALIAS ? "Host" : a->type == CMNDALIAS ? "Cmnd" :
        a->type == USERALIAS ? "User" : a->type == RUNASALIAS ? "Runas" :
        "Unknown", a->name);
@@ -1174,15 +1182,15 @@ usage(int fatal)
 static void
 help(void)
 {
-    (void) printf("%s - safely edit the sudoers file\n\n", getprogname());
+    (void) printf(_("%s - safely edit the sudoers file\n\n"), getprogname());
     usage(0);
-    (void) puts("\nOptions:");
-    (void) puts("  -c          check-only mode");
-    (void) puts("  -f sudoers  specify sudoers file location");
-    (void) puts("  -h          display help message and exit");
-    (void) puts("  -q          less verbose (quiet) syntax error messages");
-    (void) puts("  -s          strict syntax checking");
-    (void) puts("  -V          display version information and exit");
+    (void) puts(_("\nOptions:\n"
+       "  -c          check-only mode\n"
+       "  -f sudoers  specify sudoers file location\n"
+       "  -h          display help message and exit\n"
+       "  -q          less verbose (quiet) syntax error messages\n"
+       "  -s          strict syntax checking\n"
+       "  -V          display version information and exit"));
     exit(0);
 }
 
index c1b15bc432349786761eea0074f57fb06da7ab8c..49ed68e874030c46bf92f0ac595d2e061820f9e1 100644 (file)
@@ -34,16 +34,17 @@ INSTALL = $(SHELL) $(top_srcdir)/install-sh -c
 
 # Libraries
 LT_LIBS = $(top_builddir)/common/libcommon.la $(LIBOBJDIR)libreplace.la
-LIBS = @LIBS@ @SUDO_LIBS@ @GETGROUPS_LIB@ @NET_LIBS@ $(LT_LIBS)
+LIBS = @LIBS@ @SUDO_LIBS@ @GETGROUPS_LIB@ @NET_LIBS@ @LIBINTL@ $(LT_LIBS)
 
 # C preprocessor flags
-CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(srcdir) -I. @CPPFLAGS@
+CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(srcdir) -I$(top_srcdir) -I. @CPPFLAGS@
 
 # Usually -O and/or -g
 CFLAGS = @CFLAGS@
 
 # Flags to pass to the link stage
 LDFLAGS = @LDFLAGS@
+LTLDFLAGS = @LTLDFLAGS@
 
 # Where to install things...
 prefix = @prefix@
@@ -53,6 +54,7 @@ sbindir = @sbindir@
 sysconfdir = @sysconfdir@
 libexecdir = @libexecdir@
 datarootdir = @datarootdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 noexecfile = @NOEXECFILE@
 noexecdir = @NOEXECDIR@
@@ -62,7 +64,8 @@ install_uid = 0
 install_gid = 0
 
 # OS dependent defines
-DEFS = @OSDEFS@ -D_PATH_SUDO_CONF=\"$(sysconfdir)/sudo.conf\"
+DEFS = @OSDEFS@ -D_PATH_SUDO_CONF=\"$(sysconfdir)/sudo.conf\" \
+       -DLOCALEDIR=\"$(localedir)\" 
 
 #### End of system configuration section. ####
 
@@ -78,10 +81,6 @@ LIBOBJDIR = $(top_builddir)/@ac_config_libobj_dir@/
 
 VERSION = @PACKAGE_VERSION@
 
-SUDODEP = $(srcdir)/sudo.h $(incdir)/sudo_plugin.h $(incdir)/alloc.h \
-         $(incdir)/error.h $(incdir)/list.h $(incdir)/missing.h \
-         $(top_builddir)/pathnames.h $(top_builddir)/config.h
-
 all: $(PROGS)
 
 Makefile: $(srcdir)/Makefile.in
@@ -99,48 +98,11 @@ sudo: $(OBJS) $(LT_LIBS)
        $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) -static-libtool-libs
 
 libsudo_noexec.la: sudo_noexec.lo
-       $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ sudo_noexec.lo -avoid-version -rpath $(noexecdir)
+       $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(LTLDFLAGS) -o $@ sudo_noexec.lo -avoid-version -rpath $(noexecdir)
 
 sesh: sesh.o
        $(CC) -o $@ sesh.o
 
-# Dependencies
-# XXX - SUDODEP is overkill for some of these
-conversation.o: $(srcdir)/conversation.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/conversation.c
-error.o: $(srcdir)/error.c $(incdir)/missing.h $(incdir)/error.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/error.c
-exec.o: $(srcdir)/exec.c $(SUDODEP) $(srcdir)/sudo_exec.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/exec.c
-exec_pty.o: $(srcdir)/exec_pty.c $(SUDODEP) $(srcdir)/sudo_exec.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/exec_pty.c
-get_pty.o: $(srcdir)/get_pty.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/get_pty.c
-net_ifs.o: $(srcdir)/net_ifs.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/net_ifs.c
-load_plugins.o: $(srcdir)/load_plugins.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/load_plugins.c
-parse_args.o: $(srcdir)/parse_args.c sudo_usage.h $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/parse_args.c
-preload.o: $(srcdir)/preload.c $(incdir)/sudo_plugin.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/preload.c
-selinux.o: $(srcdir)/selinux.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/selinux.c
-sesh.o: $(srcdir)/sesh.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sesh.c
-sudo.o: $(srcdir)/sudo.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo.c
-sudo_edit.o: $(srcdir)/sudo_edit.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo_edit.c
-sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo_noexec.c
-tgetpass.o: $(srcdir)/tgetpass.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/tgetpass.c
-ttysize.o: $(srcdir)/ttysize.c $(incdir)/missing.h $(top_builddir)/config.h
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/ttysize.c
-utmp.o: $(srcdir)/utmp.c $(SUDODEP)
-       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/utmp.c
-
 pre-install:
 
 install: install-dirs install-binaries @INSTALL_NOEXEC@
@@ -187,3 +149,82 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+conversation.o: $(srcdir)/conversation.c $(top_builddir)/config.h \
+                $(srcdir)/sudo.h $(top_builddir)/pathnames.h \
+                $(incdir)/missing.h $(incdir)/alloc.h $(incdir)/error.h \
+                $(incdir)/fileops.h $(incdir)/list.h $(incdir)/gettext.h \
+                $(incdir)/sudo_plugin.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/conversation.c
+error.o: $(srcdir)/error.c $(top_builddir)/config.h $(incdir)/missing.h \
+         $(incdir)/error.h $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/error.c
+exec.o: $(srcdir)/exec.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+        $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+        $(incdir)/gettext.h $(srcdir)/sudo_exec.h $(incdir)/sudo_plugin.h \
+        $(srcdir)/sudo_plugin_int.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/exec.c
+exec_pty.o: $(srcdir)/exec_pty.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+            $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+            $(incdir)/gettext.h $(srcdir)/sudo_exec.h $(incdir)/sudo_plugin.h \
+            $(srcdir)/sudo_plugin_int.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/exec_pty.c
+get_pty.o: $(srcdir)/get_pty.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+           $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+           $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+           $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/get_pty.c
+load_plugins.o: $(srcdir)/load_plugins.c $(top_builddir)/config.h \
+                $(top_srcdir)/compat/dlfcn.h $(srcdir)/sudo.h \
+                $(top_builddir)/pathnames.h $(incdir)/missing.h \
+                $(incdir)/alloc.h $(incdir)/error.h $(incdir)/fileops.h \
+                $(incdir)/list.h $(incdir)/gettext.h $(incdir)/sudo_plugin.h \
+                $(srcdir)/sudo_plugin_int.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/load_plugins.c
+net_ifs.o: $(srcdir)/net_ifs.c $(top_builddir)/config.h $(incdir)/missing.h \
+           $(incdir)/alloc.h $(incdir)/error.h $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/net_ifs.c
+parse_args.o: $(srcdir)/parse_args.c $(top_builddir)/config.h ./sudo_usage.h \
+              $(srcdir)/sudo.h $(top_builddir)/pathnames.h $(incdir)/missing.h \
+              $(incdir)/alloc.h $(incdir)/error.h $(incdir)/fileops.h \
+              $(incdir)/list.h $(incdir)/gettext.h $(incdir)/lbuf.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/parse_args.c
+preload.o: $(srcdir)/preload.c $(top_builddir)/config.h $(incdir)/sudo_plugin.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/preload.c
+selinux.o: $(srcdir)/selinux.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+           $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+           $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+           $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/selinux.c
+sesh.o: $(srcdir)/sesh.c $(top_builddir)/config.h $(incdir)/missing.h \
+        $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sesh.c
+sudo.o: $(srcdir)/sudo.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+        $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+        $(incdir)/gettext.h $(incdir)/sudo_plugin.h \
+        $(srcdir)/sudo_plugin_int.h ./sudo_usage.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo.c
+sudo_edit.o: $(srcdir)/sudo_edit.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+             $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+             $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+             $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo_edit.c
+sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(top_builddir)/config.h \
+                $(incdir)/missing.h
+       $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/sudo_noexec.c
+tgetpass.o: $(srcdir)/tgetpass.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+            $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+            $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+            $(incdir)/gettext.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/tgetpass.c
+ttysize.o: $(srcdir)/ttysize.c $(top_builddir)/config.h $(incdir)/missing.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/ttysize.c
+utmp.o: $(srcdir)/utmp.c $(top_builddir)/config.h $(srcdir)/sudo.h \
+        $(top_builddir)/pathnames.h $(incdir)/missing.h $(incdir)/alloc.h \
+        $(incdir)/error.h $(incdir)/fileops.h $(incdir)/list.h \
+        $(incdir)/gettext.h $(srcdir)/sudo_exec.h
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/utmp.c
index 8e2678998a2eaa927191078a478a22bd769a620c..ed3ccabd199db818458dd89f6a3f0f5814527796 100644 (file)
@@ -26,6 +26,9 @@
 #include "missing.h"
 #include "error.h"
 
+#define DEFAULT_TEXT_DOMAIN    "sudo"
+#include "gettext.h"
+
 static void _warning(int, const char *, va_list);
        void cleanup(int);
 
@@ -76,11 +79,11 @@ _warning(int use_errno, const char *fmt, va_list ap)
 
        fputs(getprogname(), stderr);
        if (fmt != NULL) {
-               fputs(": ", stderr);
+               fputs(_(": "), stderr);
                vfprintf(stderr, fmt, ap);
        }
        if (use_errno) {
-           fputs(": ", stderr);
+           fputs(_(": "), stderr);
            fputs(strerror(serrno), stderr);
        }
        putc('\n', stderr);
index 510ce11345059c5223a63a7b22c0901f57a01ed6..52dbdbb1dce70acd0a7db15e245271c33c18b4d5 100644 (file)
@@ -122,7 +122,7 @@ static int fork_cmnd(struct command_details *details, int sv[2])
     child = fork();
     switch (child) {
     case -1:
-       error(1, "fork");
+       error(1, _("unable to fork"));
        break;
     case 0:
        /* child */
@@ -216,27 +216,26 @@ sudo_execve(struct command_details *details, struct command_status *cstat)
                cstat->val = errno;
                return -1;
            case 0:
-               /* child continues */   
+               /* child continues without controlling terminal */
+               (void)setpgid(0, 0);
                break;
            default:
-               /* parent exits */
-               exit(0);
+               /* parent exits (but does not flush buffers) */
+               _exit(0);
        }
     }
 
     /*
      * If we have an I/O plugin or the policy plugin has requested one, we
      * need to allocate a pty.  It is OK to set log_io in the pty-only case
-     * as the tailqueue plugin will be empty and no I/O logging will occur.
+     * as the io plugin tailqueue will be empty and no I/O logging will occur.
      */
     if (!tq_empty(&io_plugins) || ISSET(details->flags, CD_USE_PTY)) {
        log_io = TRUE;
-       if (!ISSET(details->flags, CD_BACKGROUND)) {
-           if (ISSET(details->flags, CD_SET_UTMP))
-               utmp_user = details->utmp_user ? details->utmp_user : user_details.username;
-           sudo_debug(8, "allocate pty for I/O logging");
-           pty_setup(details->euid, user_details.tty, utmp_user);
-       }
+       if (ISSET(details->flags, CD_SET_UTMP))
+           utmp_user = details->utmp_user ? details->utmp_user : user_details.username;
+       sudo_debug(8, "allocate pty for I/O logging");
+       pty_setup(details->euid, user_details.tty, utmp_user);
     }
 
     /*
@@ -244,14 +243,14 @@ sudo_execve(struct command_details *details, struct command_status *cstat)
      * Parent sends signal info to child and child sends back wait status.
      */
     if (socketpair(PF_UNIX, SOCK_DGRAM, 0, sv) == -1)
-       error(1, "cannot create sockets");
+       error(1, _("unable to create sockets"));
 
     /*
      * We use a pipe to atomically handle signal notification within
      * the select() loop.
      */
     if (pipe_nonblock(signal_pipe) != 0)
-       error(1, "cannot create pipe");
+       error(1, _("unable to create pipe"));
 
     zero_bytes(&sa, sizeof(sa));
     sigemptyset(&sa.sa_mask);
@@ -317,7 +316,7 @@ sudo_execve(struct command_details *details, struct command_status *cstat)
        if (nready == -1) {
            if (errno == EINTR)
                continue;
-           error(1, "select failed");
+           error(1, _("select failed"));
        }
        if (FD_ISSET(sv[0], fdsw)) {
            forward_signals(sv[0]);
@@ -385,7 +384,7 @@ sudo_execve(struct command_details *details, struct command_status *cstat)
     if (ISSET(details->flags, CD_RBAC_ENABLED)) {
        /* This is probably not needed in log_io mode. */
        if (selinux_restore_tty() != 0)
-           warningx("unable to restore tty label");
+           warningx(_("unable to restore tty label"));
     }
 #endif
 
index 914d55fc4af99d61ae61f6d4501cbb7a2490a31a..b24d691b6c0826aa51041bca92791a8b5e3d778d 100644 (file)
@@ -133,7 +133,7 @@ pty_setup(uid_t uid, const char *tty, const char *utmp_user)
     if (io_fds[SFD_USERTTY] != -1) {
        if (!get_pty(&io_fds[SFD_MASTER], &io_fds[SFD_SLAVE],
            slavename, sizeof(slavename), uid))
-           error(1, "Can't get pty");
+           error(1, _("unable to allocate pty"));
        /* Add entry to utmp/utmpx? */
        if (utmp_user != NULL)
            utmp_login(tty, slavename, io_fds[SFD_SLAVE], utmp_user);
@@ -332,8 +332,8 @@ suspend_parent(int signo)
         * Only modify term if we are foreground process and either
         * the old tty mode was not cooked or child got SIGTT{IN,OU}
         */
-       sudo_debug(8, "parent is in %sground, ttymode %d -> %d",
-           foreground ? "fore" : "back", oldmode, ttymode);
+       sudo_debug(8, "parent is in %s, ttymode %d -> %d",
+           foreground ? "foreground" : "background", oldmode, ttymode);
 
        if (ttymode != TERM_COOKED) {
            if (foreground) {
@@ -493,17 +493,21 @@ fork_pty(struct command_details *details, int sv[], int *maxfd)
 
     /*
      * Setup stdin/stdout/stderr for child, to be duped after forking.
+     * In background mode there is no stdin.
      */
-    io_fds[SFD_STDIN] = io_fds[SFD_SLAVE];
+    if (!ISSET(details->flags, CD_BACKGROUND))
+       io_fds[SFD_STDIN] = io_fds[SFD_SLAVE];
     io_fds[SFD_STDOUT] = io_fds[SFD_SLAVE];
     io_fds[SFD_STDERR] = io_fds[SFD_SLAVE];
 
-    /* Copy /dev/tty -> pty master */
     if (io_fds[SFD_USERTTY] != -1) {
-       iobufs = io_buf_new(io_fds[SFD_USERTTY], io_fds[SFD_MASTER],
-           log_ttyin, iobufs);
+       /* Read from /dev/tty, write to pty master */
+       if (!ISSET(details->flags, CD_BACKGROUND)) {
+           iobufs = io_buf_new(io_fds[SFD_USERTTY], io_fds[SFD_MASTER],
+               log_ttyin, iobufs);
+       }
 
-       /* Copy pty master -> /dev/tty */
+       /* Read from pty master, write to /dev/tty */
        iobufs = io_buf_new(io_fds[SFD_MASTER], io_fds[SFD_USERTTY],
            log_ttyout, iobufs);
 
@@ -519,7 +523,7 @@ fork_pty(struct command_details *details, int sv[], int *maxfd)
     if (io_fds[SFD_STDIN] == -1 || !isatty(STDIN_FILENO)) {
        pipeline = TRUE;
        if (pipe(io_pipe[STDIN_FILENO]) != 0)
-           error(1, "unable to create pipe");
+           error(1, _("unable to create pipe"));
        iobufs = io_buf_new(STDIN_FILENO, io_pipe[STDIN_FILENO][1],
            log_stdin, iobufs);
        io_fds[SFD_STDIN] = io_pipe[STDIN_FILENO][0];
@@ -527,14 +531,14 @@ fork_pty(struct command_details *details, int sv[], int *maxfd)
     if (io_fds[SFD_STDOUT] == -1 || !isatty(STDOUT_FILENO)) {
        pipeline = TRUE;
        if (pipe(io_pipe[STDOUT_FILENO]) != 0)
-           error(1, "unable to create pipe");
+           error(1, _("unable to create pipe"));
        iobufs = io_buf_new(io_pipe[STDOUT_FILENO][0], STDOUT_FILENO,
            log_stdout, iobufs);
        io_fds[SFD_STDOUT] = io_pipe[STDOUT_FILENO][1];
     }
     if (io_fds[SFD_STDERR] == -1 || !isatty(STDERR_FILENO)) {
        if (pipe(io_pipe[STDERR_FILENO]) != 0)
-           error(1, "unable to create pipe");
+           error(1, _("unable to create pipe"));
        iobufs = io_buf_new(io_pipe[STDERR_FILENO][0], STDERR_FILENO,
            log_stderr, iobufs);
        io_fds[SFD_STDERR] = io_pipe[STDERR_FILENO][1];
@@ -559,14 +563,14 @@ fork_pty(struct command_details *details, int sv[], int *maxfd)
                n = term_raw(io_fds[SFD_USERTTY], 0);
            } while (!n && errno == EINTR);
            if (!n)
-               error(1, "Can't set terminal to raw mode");
+               error(1, _("unable to set terminal to raw mode"));
        }
     }
 
     child = fork();
     switch (child) {
     case -1:
-       error(1, "fork");
+       error(1, _("unable to fork"));
        break;
     case 0:
        /* child */
@@ -741,7 +745,8 @@ send_status(int fd, struct command_status *cstat)
            n = send(fd, cstat, sizeof(*cstat), 0);
        } while (n == -1 && errno == EINTR);
        if (n != sizeof(*cstat)) {
-           sudo_debug(8, "unable to send status to parent: %s", strerror(errno));
+           sudo_debug(8, "unable to send status to parent: %s",
+               strerror(errno));
        } else {
            sudo_debug(8, "sent status to parent");
        }
@@ -771,19 +776,16 @@ handle_sigchld(int backchannel, struct command_status *cstat)
            cstat->type = CMD_WSTATUS;
            cstat->val = status;
            if (WIFSTOPPED(status)) {
-               sudo_debug(8, "command stopped, signal %d",
-                   WSTOPSIG(status));
+               sudo_debug(8, "command stopped, signal %d", WSTOPSIG(status));
                do {
                    child_pgrp = tcgetpgrp(io_fds[SFD_SLAVE]);
                } while (child_pgrp == -1 && errno == EINTR);
                if (send_status(backchannel, cstat) == -1)
                    return alive; /* XXX */
            } else if (WIFSIGNALED(status)) {
-               sudo_debug(8, "command killed, signal %d",
-                   WTERMSIG(status));
+               sudo_debug(8, "command killed, signal %d", WTERMSIG(status));
            } else {
-               sudo_debug(8, "command exited: %d",
-                   WEXITSTATUS(status));
+               sudo_debug(8, "command exited: %d", WEXITSTATUS(status));
            }
        }
        if (!WIFSTOPPED(status))
@@ -821,7 +823,7 @@ exec_monitor(struct command_details *details, int backchannel)
      * the select() loop.
      */
     if (pipe_nonblock(signal_pipe) != 0)
-       error(1, "cannot create pipe");
+       error(1, _("unable to create pipe"));
 
     /* Reset SIGWINCH and SIGALRM. */
     zero_bytes(&sa, sizeof(sa));
@@ -853,7 +855,7 @@ exec_monitor(struct command_details *details, int backchannel)
     if (io_fds[SFD_SLAVE] != -1) {
 #ifdef TIOCSCTTY
        if (ioctl(io_fds[SFD_SLAVE], TIOCSCTTY, NULL) != 0)
-           error(1, "unable to set controlling tty");
+           error(1, _("unable to set controlling tty"));
 #else
        /* Set controlling tty by reopening slave. */
        if ((n = open(slavename, O_RDWR)) >= 0)
@@ -872,10 +874,10 @@ exec_monitor(struct command_details *details, int backchannel)
 
     /* Start command and wait for it to stop or exit */
     if (pipe(errpipe) == -1)
-       error(1, "unable to create pipe");
+       error(1, _("unable to create pipe"));
     child = fork();
     if (child == -1) {
-       warning("Can't fork");
+       warning(_("unable to fork"));
        goto bad;
     }
     if (child == 0) {
@@ -939,7 +941,7 @@ exec_monitor(struct command_details *details, int backchannel)
                goto done;
            if (errno == EINTR)
                continue;
-           error(1, "select failed");
+           error(1, _("select failed"));
        }
 
        if (FD_ISSET(signal_pipe[0], fdsr)) {
@@ -947,7 +949,7 @@ exec_monitor(struct command_details *details, int backchannel)
            if (n == -1) {
                if (errno == EINTR || errno == EAGAIN)
                    continue;
-               warning("error reading from signal pipe");
+               warning(_("error reading from signal pipe"));
                goto done;
            }
            /*
@@ -966,7 +968,7 @@ exec_monitor(struct command_details *details, int backchannel)
            if (n == -1) {
                if (errno == EINTR)
                    continue;
-               warning("error reading from pipe");
+               warning(_("error reading from pipe"));
                goto done;
            }
            /* Got errno or EOF, either way we are done with errpipe. */
@@ -982,11 +984,12 @@ exec_monitor(struct command_details *details, int backchannel)
            if (n == -1) {
                if (errno == EINTR)
                    continue;
-               warning("error reading from socketpair");
+               warning(_("error reading from socketpair"));
                goto done;
            }
            if (cstmp.type != CMD_SIGNO) {
-               warningx("unexpected reply type on backchannel: %d", cstmp.type);
+               warningx(_("unexpected reply type on backchannel: %d"),
+                   cstmp.type);
                continue;
            }
            deliver_signal(child, cstmp.val);
@@ -1071,7 +1074,7 @@ flush_output(void)
                break; /* all I/O flushed */
            if (errno == EINTR)
                continue;
-           error(1, "select failed");
+           error(1, _("select failed"));
        }
        if (perform_io(fdsr, fdsw, NULL) != 0)
            break;
index 68be4237db05d4b513d7a97d3c22f1be8690e16e..6bee3f8471dd7f46b6e48e5c24fcc9e3ea07fef3 100644 (file)
 #include "sudo_plugin.h"
 #include "sudo_plugin_int.h"
 
-#ifndef RTLD_LOCAL
-# define RTLD_LOCAL    0
+#ifndef RTLD_GLOBAL
+# define RTLD_GLOBAL   0
 #endif
 
+#ifdef _PATH_SUDO_NOEXEC
 const char *noexec_path = _PATH_SUDO_NOEXEC;
+#endif
 
 /*
  * Read in /etc/sudo.conf
@@ -83,8 +85,10 @@ sudo_read_conf(const char *conf_file)
            }
            if (strcasecmp(name, "askpass") == 0)
                askpass_path = estrdup(path);
+#ifdef _PATH_SUDO_NOEXEC
            else if (strcasecmp(name, "noexec") == 0)
                noexec_path = estrdup(path);
+#endif
            continue;
        }
 
@@ -151,13 +155,13 @@ sudo_load_plugins(const char *conf_file,
     tq_foreach_fwd(plugin_list, info) {
        if (info->path[0] == '/') {
            if (strlcpy(path, info->path, sizeof(path)) >= sizeof(path)) {
-               warningx("%s: %s", info->path, strerror(ENAMETOOLONG));
+               warningx(_("%s: %s"), info->path, strerror(ENAMETOOLONG));
                goto done;
            }
        } else {
            if (snprintf(path, sizeof(path), "%s%s", _PATH_SUDO_PLUGIN_DIR,
                info->path) >= sizeof(path)) {
-               warningx("%s%s: %s", _PATH_SUDO_PLUGIN_DIR, info->path,
+               warningx(_("%s%s: %s"), _PATH_SUDO_PLUGIN_DIR, info->path,
                    strerror(ENAMETOOLONG));
                goto done;
            }
@@ -167,39 +171,41 @@ sudo_load_plugins(const char *conf_file,
            goto done;
        }
        if (sb.st_uid != ROOT_UID) {
-           warningx("%s must be owned by uid %d", path, ROOT_UID);
+           warningx(_("%s must be owned by uid %d"), path, ROOT_UID);
            goto done;
        }
        if ((sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
-           warningx("%s must be only be writable by owner", path);
+           warningx(_("%s must be only be writable by owner"), path);
            goto done;
        }
 
        /* Open plugin and map in symbol */
-       handle = dlopen(path, RTLD_LAZY|RTLD_LOCAL);
+       handle = dlopen(path, RTLD_LAZY|RTLD_GLOBAL);
        if (!handle) {
-           warningx("unable to dlopen %s: %s", path, dlerror());
+           warningx(_("unable to dlopen %s: %s"), path, dlerror());
            goto done;
        }
        plugin = dlsym(handle, info->symbol_name);
        if (!plugin) {
-           warningx("unable to find symbol %s in %s", info->symbol_name, path);
+           warningx(_("%s: unable to find symbol %s"), path,
+               info->symbol_name);
            goto done;
        }
 
        if (plugin->type != SUDO_POLICY_PLUGIN && plugin->type != SUDO_IO_PLUGIN) {
-           warningx("%s: unknown policy type %d", path, plugin->type);
+           warningx(_("%s: unknown policy type %d"), path, plugin->type);
            goto done;
        }
        if (SUDO_API_VERSION_GET_MAJOR(plugin->version) != SUDO_API_VERSION_MAJOR) {
-           warningx("%s: incompatible policy major version %d, expected %d",
+           warningx(_("%s: incompatible policy major version %d, expected %d"),
                path, SUDO_API_VERSION_GET_MAJOR(plugin->version),
                SUDO_API_VERSION_MAJOR);
            goto done;
        }
        if (plugin->type == SUDO_POLICY_PLUGIN) {
            if (policy_plugin->handle) {
-               warningx("only a single policy plugin may be loaded");
+               warningx(_("%s: only a single policy plugin may be loaded"),
+                   conf_file);
                goto done;
            }
            policy_plugin->handle = handle;
@@ -216,11 +222,12 @@ sudo_load_plugins(const char *conf_file,
        }
     }
     if (policy_plugin->handle == NULL) {
-       warningx("%s: at least one policy plugin must be specified", conf_file);
+       warningx(_("%s: at least one policy plugin must be specified"),
+           conf_file);
        goto done;
     }
     if (policy_plugin->u.policy->check_policy == NULL) {
-       warningx("policy plugin %s does not include a check_policy method",
+       warningx(_("policy plugin %s does not include a check_policy method"),
            policy_plugin->name);
        goto done;
     }
index f6de0808f94a7b01a8753c9a21787b19feb72eb7..3dc1f4dfdde89bbe11ede577aeecd4d71282f818 100644 (file)
@@ -84,6 +84,9 @@ struct rtentry;
 #include "alloc.h"
 #include "error.h"
 
+#define DEFAULT_TEXT_DOMAIN    "sudo"
+#include "gettext.h"
+
 /* Minix apparently lacks IFF_LOOPBACK */
 #ifndef IFF_LOOPBACK
 # define IFF_LOOPBACK  0
@@ -149,7 +152,7 @@ get_net_ifs(char **addrinfo)
                    "%s%s/", cp == *addrinfo ? "" : " ",
                    inet_ntoa(sin->sin_addr));
                if (len <= 0 || len >= ailen - (*addrinfo - cp)) {
-                   warningx("load_interfaces: overflow detected");
+                   warningx(_("load_interfaces: overflow detected"));
                    goto done;
                }
                cp += len;
@@ -158,7 +161,7 @@ get_net_ifs(char **addrinfo)
                len = snprintf(cp, ailen - (*addrinfo - cp),
                    "%s", inet_ntoa(sin->sin_addr));
                if (len <= 0 || len >= ailen - (*addrinfo - cp)) {
-                   warningx("load_interfaces: overflow detected");
+                   warningx(_("load_interfaces: overflow detected"));
                    goto done;
                }
                cp += len;
@@ -170,7 +173,7 @@ get_net_ifs(char **addrinfo)
                len = snprintf(cp, ailen - (*addrinfo - cp),
                    "%s%s/", cp == *addrinfo ? "" : " ", addrbuf);
                if (len <= 0 || len >= ailen - (*addrinfo - cp)) {
-                   warningx("load_interfaces: overflow detected");
+                   warningx(_("load_interfaces: overflow detected"));
                    goto done;
                }
                cp += len;
@@ -179,7 +182,7 @@ get_net_ifs(char **addrinfo)
                inet_ntop(AF_INET6, &sin6->sin6_addr, addrbuf, sizeof(addrbuf));
                len = snprintf(cp, ailen - (*addrinfo - cp), "%s", addrbuf);
                if (len <= 0 || len >= ailen - (*addrinfo - cp)) {
-                   warningx("load_interfaces: overflow detected");
+                   warningx(_("load_interfaces: overflow detected"));
                    goto done;
                }
                cp += len;
@@ -218,7 +221,7 @@ get_net_ifs(char **addrinfo)
 
     sock = socket(AF_INET, SOCK_DGRAM, 0);
     if (sock < 0)
-       error(1, "cannot open socket");
+       error(1, _("unable to open socket"));
 
     /*
      * Get interface configuration or return.
@@ -289,7 +292,7 @@ get_net_ifs(char **addrinfo)
            "%s%s/", cp == *addrinfo ? "" : " ",
            inet_ntoa(sin->sin_addr));
        if (len <= 0 || len >= ailen - (*addrinfo - cp)) {
-           warningx("load_interfaces: overflow detected");
+           warningx(_("load_interfaces: overflow detected"));
            goto done;
        }
        cp += len;
@@ -313,7 +316,7 @@ get_net_ifs(char **addrinfo)
        len = snprintf(cp, ailen - (*addrinfo - cp),
            "%s", inet_ntoa(sin->sin_addr));
        if (len <= 0 || len >= ailen - (*addrinfo - cp)) {
-           warningx("load_interfaces: overflow detected");
+           warningx(_("load_interfaces: overflow detected"));
            goto done;
        }
        cp += len;
index e9f09e47faeb57f0dadbd4959e8233442061f595..f8aac4b62b9f4b07c6042eec0e0338cb24fdbb0d 100644 (file)
@@ -177,7 +177,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
                    break;
                case 'C':
                    if (atoi(optarg) < 3) {
-                       warningx("the argument to -C must be a number greater than or equal to 3");
+                       warningx(_("the argument to -C must be a number greater than or equal to 3"));
                        usage(1);
                    }
                    sudo_settings[ARG_CLOSEFROM].value = optarg;
@@ -189,7 +189,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
 #endif
                case 'D':
                    if ((debug_level = atoi(optarg)) < 1 || debug_level > 9) {
-                       warningx("the argument to -D must be between 1 and 9 inclusive");
+                       warningx(_("the argument to -D must be between 1 and 9 inclusive"));
                        usage(1);
                    }
                    sudo_settings[ARG_DEBUG_LEVEL].value = optarg;
@@ -270,7 +270,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
                    break;
                case 'U':
                    if ((getpwnam(optarg)) == NULL)
-                       errorx(1, "unknown user: %s", optarg);
+                       errorx(1, _("unknown user: %s"), optarg);
                    list_user = optarg;
                    break;
                case 'u':
@@ -329,11 +329,11 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
 
     if (ISSET(flags, MODE_LOGIN_SHELL)) {
        if (ISSET(flags, MODE_SHELL)) {
-           warningx("you may not specify both the `-i' and `-s' options");
+           warningx(_("you may not specify both the `-i' and `-s' options"));
            usage(1);
        }
        if (ISSET(flags, MODE_PRESERVE_ENV)) {
-           warningx("you may not specify both the `-i' and `-E' options");
+           warningx(_("you may not specify both the `-i' and `-E' options"));
            usage(1);
        }
        SET(flags, MODE_SHELL);
@@ -343,9 +343,9 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
     if (mode == MODE_EDIT &&
        (ISSET(flags, MODE_PRESERVE_ENV) || env_add[0] != NULL)) {
        if (ISSET(mode, MODE_PRESERVE_ENV))
-           warningx("the `-E' option is not valid in edit mode");
+           warningx(_("the `-E' option is not valid in edit mode"));
        if (env_add[0] != NULL)
-           warningx("you may not specify environment variables in edit mode");
+           warningx(_("you may not specify environment variables in edit mode"));
        usage(1);
     }
     if ((runas_user != NULL || runas_group != NULL) &&
@@ -353,11 +353,11 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
        usage(1);
     }
     if (list_user != NULL && mode != MODE_LIST && mode != MODE_CHECK) {
-       warningx("the `-U' option may only be used with the `-l' option");
+       warningx(_("the `-U' option may only be used with the `-l' option"));
        usage(1);
     }
     if (ISSET(tgetpass_flags, TGP_STDIN) && ISSET(tgetpass_flags, TGP_ASKPASS)) {
-       warningx("the `-A' and `-S' options may not be used together");
+       warningx(_("the `-A' and `-S' options may not be used together"));
        usage(1);
     }
     if ((argc == 0 && mode == MODE_EDIT) ||
@@ -385,17 +385,28 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
            memcpy(av + 1, argv, argc * sizeof(char *));
        } else {
            /* shell -c "command" */
-           char *src, *dst, *end;
+           char *cmnd, *src, *dst;
            size_t cmnd_size = (size_t) (argv[argc - 1] - argv[0]) +
-                   strlen(argv[argc - 1]) + 1;
+               strlen(argv[argc - 1]) + 1;
+
+           cmnd = dst = emalloc2(cmnd_size, 2);
+           for (av = argv; *av != NULL; av++) {
+               for (src = *av; *src != '\0'; src++) {
+                   /* quote potential meta characters */
+                   if (!isalnum((unsigned char)*src) && *src != '_' && *src != '-')
+                       *dst++ = '\\';
+                   *dst++ = *src;
+               }
+               *dst++ = ' ';
+           }
+           if (cmnd != dst)
+               dst--;  /* replace last space with a NUL */
+           *dst = '\0';
+
            ac = 3;
            av = emalloc2(ac + 1, sizeof(char *));
            av[1] = "-c";
-           av[2] = dst = emalloc(cmnd_size);
-           src = argv[0];
-           for (end = src + cmnd_size - 1; src < end; src++, dst++)
-               *dst = *src == '\0' ? ' ' : *src;
-           *dst = '\0';
+           av[2] = cmnd;
        }
        av[0] = (char *)user_details.shell; /* plugin may override shell */
        av[ac] = NULL;
@@ -415,7 +426,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
            settings[j] = fmt_string(sudo_settings[i].name,
                sudo_settings[i].value);
            if (settings[j] == NULL)
-               errorx(1, "unable to allocate memory");
+               errorx(1, _("unable to allocate memory"));
            j++;
        }
     }
@@ -428,7 +439,7 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
        argv--;
        argv[0] = "sudoedit";
 #else
-       errorx(1, "sudoedit is not supported on this platform");
+       errorx(1, _("sudoedit is not supported on this platform"));
 #endif
     }
 
@@ -485,7 +496,7 @@ usage(int fatal)
     lbuf_init(&lbuf, fatal ? usage_err : usage_out, ulen, NULL,
        user_details.ts_cols);
     for (i = 0; uvec[i] != NULL; i++) {
-       lbuf_append(&lbuf, "usage: ", getprogname(), uvec[i], NULL);
+       lbuf_append(&lbuf, "usage: %s%s", getprogname(), uvec[i]);
        lbuf_print(&lbuf);
     }
     lbuf_destroy(&lbuf);
@@ -499,7 +510,7 @@ usage(int fatal)
 static void
 usage_excl(int fatal)
 {
-    warningx("Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified");
+    warningx(_("Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"));
     usage(fatal);
 }
 
@@ -512,81 +523,74 @@ help(void)
 
     lbuf_init(&lbuf, usage_out, indent, NULL, user_details.ts_cols);
     if (strcmp(pname, "sudoedit") == 0)
-       lbuf_append(&lbuf, pname,  " - edit files as another user\n\n", NULL);
+       lbuf_append(&lbuf, _("%s - edit files as another user\n\n"), pname);
     else
-       lbuf_append(&lbuf, pname,  " - execute a command as another user\n\n", NULL);
+       lbuf_append(&lbuf, _("%s - execute a command as another user\n\n"), pname);
     lbuf_print(&lbuf);
 
     usage(0);
 
-    lbuf_append(&lbuf, "\nOptions:\n", NULL);
+    lbuf_append(&lbuf, _("\nOptions:\n"));
 #ifdef HAVE_BSD_AUTH_H
-    lbuf_append(&lbuf,
-       "  -A            use helper program for password prompting\n", NULL);
+    lbuf_append(&lbuf, "  -A            %s",
+       _("use helper program for password prompting\n"));
 #endif
-    lbuf_append(&lbuf,
-       "  -a type       use specified BSD authentication type\n", NULL);
-    lbuf_append(&lbuf,
-       "  -b            run command in the background\n", NULL);
-    lbuf_append(&lbuf,
-       "  -C fd         close all file descriptors >= fd\n", NULL);
+    lbuf_append(&lbuf, "  -a type       %s",
+       _("use specified BSD authentication type\n"));
+    lbuf_append(&lbuf, "  -b            %s",
+       _("run command in the background\n"));
+    lbuf_append(&lbuf, "  -C fd         %s",
+       _("close all file descriptors >= fd\n"));
 #ifdef HAVE_LOGIN_CAP_H
-    lbuf_append(&lbuf,
-       "  -c class      run command with specified login class\n", NULL);
+    lbuf_append(&lbuf, "  -c class      %s",
+       _("run command with specified login class\n"));
 #endif
-    lbuf_append(&lbuf,
-       "  -E            preserve user environment when executing command\n",
-       NULL);
-    lbuf_append(&lbuf,
-       "  -e            edit files instead of running a command\n", NULL);
-    lbuf_append(&lbuf,
-       "  -g group      execute command as the specified group\n", NULL);
-    lbuf_append(&lbuf,
-       "  -H            set HOME variable to target user's home dir.\n",
-       NULL);
-    lbuf_append(&lbuf,
-       "  -h            display help message and exit\n", NULL);
-    lbuf_append(&lbuf,
-       "  -i [command]  run a login shell as target user\n", NULL);
-    lbuf_append(&lbuf,
-       "  -K            remove timestamp file completely\n", NULL);
-    lbuf_append(&lbuf,
-       "  -k            invalidate timestamp file\n", NULL);
-    lbuf_append(&lbuf,
-       "  -l[l] command list user's available commands\n", NULL);
-    lbuf_append(&lbuf,
-       "  -n            non-interactive mode, will not prompt user\n", NULL);
-    lbuf_append(&lbuf,
-       "  -P            preserve group vector instead of setting to target's\n",
-       NULL);
-    lbuf_append(&lbuf,
-       "  -p prompt     use specified password prompt\n", NULL);
+    lbuf_append(&lbuf, "  -E            %s",
+       _("preserve user environment when executing command\n"));
+    lbuf_append(&lbuf, "  -e            %s",
+       _("edit files instead of running a command\n"));
+    lbuf_append(&lbuf, "  -g group      %s",
+       _("execute command as the specified group\n"));
+    lbuf_append(&lbuf, "  -H            %s",
+       _("set HOME variable to target user's home dir.\n"));
+    lbuf_append(&lbuf, "  -h            %s",
+       _("display help message and exit\n"));
+    lbuf_append(&lbuf, "  -i [command]  %s",
+       _("run a login shell as target user\n"));
+    lbuf_append(&lbuf, "  -K            %s",
+       _("remove timestamp file completely\n"));
+    lbuf_append(&lbuf, "  -k            %s",
+       _("invalidate timestamp file\n"));
+    lbuf_append(&lbuf, "  -l[l] command %s",
+       _("list user's available commands\n"));
+    lbuf_append(&lbuf, "  -n            %s",
+       _("non-interactive mode, will not prompt user\n"));
+    lbuf_append(&lbuf, "  -P            %s",
+       _("preserve group vector instead of setting to target's\n"));
+    lbuf_append(&lbuf, "  -p prompt     %s",
+       _("use specified password prompt\n"));
 #ifdef HAVE_SELINUX
-    lbuf_append(&lbuf,
-       "  -r role       create SELinux security context with specified role\n",
-       NULL);
+    lbuf_append(&lbuf, "  -r role       %s",
+       _("create SELinux security context with specified role\n"));
 #endif
+    lbuf_append(&lbuf, "  -S            %s",
+       _("read password from standard input\n"));
     lbuf_append(&lbuf,
-       "  -S            read password from standard input\n", NULL);
-    lbuf_append(&lbuf,
-       "  -s [command]  run a shell as target user\n", NULL);
+       "  -s [command]  %s", _("run a shell as target user\n"));
 #ifdef HAVE_SELINUX
-    lbuf_append(&lbuf,
-       "  -t type       create SELinux security context with specified role\n",
-       NULL);
+    lbuf_append(&lbuf, "  -t type       %s",
+       _("create SELinux security context with specified role\n"));
 #endif
-    lbuf_append(&lbuf,
-       "  -U user       when listing, list specified user's privileges\n",
-       NULL);
-    lbuf_append(&lbuf,
-       "  -u user       run command (or edit file) as specified user\n", NULL);
-    lbuf_append(&lbuf,
-       "  -V            display version information and exit\n", NULL);
-    lbuf_append(&lbuf,
-       "  -v            update user's timestamp without running a command\n",
-       NULL);
-    lbuf_append(&lbuf,
-       "  --            stop processing command line arguments\n", NULL);
+    lbuf_append(&lbuf, "  -U user       %s",
+       _("when listing, list specified user's privileges\n"));
+    lbuf_append(&lbuf, "  -u user       %s",
+       _("run command (or edit file) as specified user\n"));
+    lbuf_append(&lbuf, "  -V            %s",
+       _("display version information and exit\n"));
+    lbuf_append(&lbuf, "  -v            %s",
+       _("update user's timestamp without running a command\n"));
+    lbuf_append(&lbuf, "  --            %s",
+       _("stop processing command line arguments\n"));
     lbuf_print(&lbuf);
     lbuf_destroy(&lbuf);
     exit(0);
diff --git a/src/po/README b/src/po/README
new file mode 100644 (file)
index 0000000..ff9b845
--- /dev/null
@@ -0,0 +1,14 @@
+NLS Translations for sudo are coordinated through the Translation
+Project, at http://translationproject.org/
+
+If you would like to contribute a translation for sudo, please join
+a translation team at the Translation Project instead of contributing
+a po file directly.  This will avoid duplicated work if there is
+already a translation in progress.  If you would like to become a
+member of a translation team, please follow the instructions at
+http://translationproject.org/html/translators.html
+
+The messages in sudo are split into two domains: sudo and sudoers.
+The former is used by the sudo front-end and utility functions.
+The latter is used by the sudoers policy and I/O logging plug-ins
+as well as the sudoers-specific commands visudo and sudoreplay.
diff --git a/src/po/da.mo b/src/po/da.mo
new file mode 100644 (file)
index 0000000..805ff88
Binary files /dev/null and b/src/po/da.mo differ
diff --git a/src/po/da.po b/src/po/da.po
new file mode 100644 (file)
index 0000000..9d51fed
--- /dev/null
@@ -0,0 +1,748 @@
+# Danish translation of sudo.
+# This file is put in the public domain.
+# Joe Hansen <joedalton2@yahoo.dk>, 2011.
+#
+# audit -> overvågning
+# overflow -> overløb
+#
+# projekt bruger konsekvent små bogstaver, og så i starten af sætninger, så dette er også 
+# valgt på dansk uanset at der er : som efterfølgende normalt ville have stort 
+# begyndelsesbogstav på dansk.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2rc2\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-06-04 18:27-0400\n"
+"PO-Revision-Date: 2011-06-12 23:06+0100\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/error.c:82 src/error.c:86
+msgid ": "
+msgstr ": "
+
+#: src/exec.c:125 src/exec_pty.c:573 src/exec_pty.c:880 src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "kunne ikke forgrene"
+
+#: src/exec.c:246
+#, c-format
+msgid "unable to create sockets"
+msgstr "kunne ikke oprette sokler"
+
+#: src/exec.c:253 src/exec_pty.c:526 src/exec_pty.c:534 src/exec_pty.c:541
+#: src/exec_pty.c:826 src/exec_pty.c:877 src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "kunne ikke oprette datakanal (pipe)"
+
+#: src/exec.c:319 src/exec_pty.c:944 src/exec_pty.c:1077
+#, c-format
+msgid "select failed"
+msgstr "select fejlede"
+
+#: src/exec.c:387
+#, c-format
+msgid "unable to restore tty label"
+msgstr "kunne ikke gendanne tty-etiket"
+
+#: src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr "kunne ikke allokere pty"
+
+#: src/exec_pty.c:566
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr "kunne ikke angive terminal til tilstanden rå (raw)"
+
+#: src/exec_pty.c:858
+#, c-format
+msgid "unable to set controlling tty"
+msgstr "kunne ikke angive kontrollerende tty"
+
+#: src/exec_pty.c:952
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "fejl under læsning fra signaldatakanal"
+
+#: src/exec_pty.c:971
+#, c-format
+msgid "error reading from pipe"
+msgstr "fejl ved læsning fra datakanal"
+
+#: src/exec_pty.c:987
+#, c-format
+msgid "error reading from socketpair"
+msgstr "fejl ved læsning fra socketpair"
+
+#: src/exec_pty.c:991
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "uventet svartype på bagkanal (backchannel): %d"
+
+#: src/load_plugins.c:154
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: src/load_plugins.c:160
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: src/load_plugins.c:170
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s skal være ejet af uid %d"
+
+# engelsk fejl be dobbelt?
+#: src/load_plugins.c:174
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "%s må kun være skrivbar for ejeren"
+
+#: src/load_plugins.c:181
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "kunne ikke dlopen %s: %s"
+
+#: src/load_plugins.c:186
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s: kunne ikke finde symbol %s"
+
+#: src/load_plugins.c:192
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s: ukendt politiktype %d"
+
+#: src/load_plugins.c:196
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr "%s: inkompatibel politik hovedversion %d, forventede %d"
+
+#: src/load_plugins.c:203
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr "%s: kun et udvidelsesmodul for én politik må være indlæst"
+
+#: src/load_plugins.c:221
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr "%s: mindst et udvidelsesmodul for politik skal være angivet"
+
+#: src/load_plugins.c:226
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr "politikudvidelsesmodulet %s inkluderer ikke en metode for check_policy"
+
+#: src/net_ifs.c:155 src/net_ifs.c:164 src/net_ifs.c:176 src/net_ifs.c:185
+#: src/net_ifs.c:295 src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces: overløb detekteret"
+
+#: src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "kunne ikke åbne sokkel"
+
+#: src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "argumentet for -C skal være et tal større end eller lig 3"
+
+#: src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "argumentet for -D skal være mellem 1 og 9; begge tal inkluderet"
+
+#: src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "ukendt bruger: %s"
+
+#: src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "du kan ikke samtidig angive tilvalgene »-i« og »-s«"
+
+#: src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "du kan ikke samtidig angive tilvalgende »-i« og »-E«"
+
+#: src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "tilvalget »-E« er ikke gyldigt i redigeringstilstand"
+
+#: src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "du må ikke angive miljøvariabler i redigeringstilstand"
+
+#: src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "tilvalget »-U« må kun bruges med tilvalget »-l«"
+
+#: src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "tilvalgene »-A« og »-S« må ikke bruges sammen"
+
+#: src/parse_args.c:418 src/sudo.c:398 src/sudo.c:418 src/sudo.c:426
+#: src/sudo.c:436 common/alloc.c:85 common/alloc.c:105 common/alloc.c:123
+#: common/alloc.c:145 common/alloc.c:203 common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "kunne ikke allokere hukommelse"
+
+#: src/parse_args.c:431
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "sudoedit er ikke understøttet på denne platform"
+
+#: src/parse_args.c:502
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "Kun et af tilvalgene -e, -h, -i, -K, -l, -s, -v eller -V må angives"
+
+#: src/parse_args.c:515
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s - rediger filer som en anden bruger\n"
+"\n"
+
+#: src/parse_args.c:517
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s - udfør en kommando som en anden bruger\n"
+"\n"
+
+#: src/parse_args.c:522
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Tilvalg:\n"
+
+#: src/parse_args.c:525
+msgid "use helper program for password prompting\n"
+msgstr "brug hjælpeprogram for indhentelse af adgangskode\n"
+
+#: src/parse_args.c:528
+msgid "use specified BSD authentication type\n"
+msgstr "brug angivet BSD-godkendelsestype\n"
+
+#: src/parse_args.c:530
+msgid "run command in the background\n"
+msgstr "kør kommando i baggrunden\n"
+
+#: src/parse_args.c:532
+msgid "close all file descriptors >= fd\n"
+msgstr "luk alle filbeskrivelser >= fd\n"
+
+#: src/parse_args.c:535
+msgid "run command with specified login class\n"
+msgstr "kør kommando med angivet logindklasse\n"
+
+#: src/parse_args.c:538
+msgid "preserve user environment when executing command\n"
+msgstr "bevar brugermiljø når kommando udføres\n"
+
+#: src/parse_args.c:540
+msgid "edit files instead of running a command\n"
+msgstr "rediger filer i stedet for at køre en kommando\n"
+
+#: src/parse_args.c:542
+msgid "execute command as the specified group\n"
+msgstr "udfør kommando som den angivne gruppe\n"
+
+#: src/parse_args.c:544
+msgid "set HOME variable to target user's home dir.\n"
+msgstr "angiv HOME-variabel til målbrugers hjemmemappe.\n"
+
+#: src/parse_args.c:546
+msgid "display help message and exit\n"
+msgstr "vis hjælpetekst og afslut\n"
+
+#: src/parse_args.c:548
+msgid "run a login shell as target user\n"
+msgstr "kør en logindskal som målbruger\n"
+
+#: src/parse_args.c:550
+msgid "remove timestamp file completely\n"
+msgstr "fjern tidsstempelfil fuldstændig\n"
+
+#: src/parse_args.c:552
+msgid "invalidate timestamp file\n"
+msgstr "ugyldiggør tidsstempelfil\n"
+
+#: src/parse_args.c:554
+msgid "list user's available commands\n"
+msgstr "vis brugers tilgængelige kommandoer\n"
+
+#: src/parse_args.c:556
+msgid "non-interactive mode, will not prompt user\n"
+msgstr "ikkeinteraktiv tilstand, vil ikke spørge bruger\n"
+
+#: src/parse_args.c:558
+msgid "preserve group vector instead of setting to target's\n"
+msgstr "bevar gruppevektor i stedet for at sætte til målets\n"
+
+#: src/parse_args.c:560
+msgid "use specified password prompt\n"
+msgstr "brug angivet logind for adgangskode\n"
+
+#: src/parse_args.c:563 src/parse_args.c:571
+msgid "create SELinux security context with specified role\n"
+msgstr "opret SELinux-sikkerhedskontekt med angivet rolle\n"
+
+#: src/parse_args.c:566
+msgid "read password from standard input\n"
+msgstr "læs adgangskode fra standardinddata\n"
+
+#: src/parse_args.c:568
+msgid "run a shell as target user\n"
+msgstr "kør en skal som målbruger\n"
+
+#: src/parse_args.c:574
+msgid "when listing, list specified user's privileges\n"
+msgstr "når der listes, så list angivne brugers privilegier\n"
+
+#: src/parse_args.c:576
+msgid "run command (or edit file) as specified user\n"
+msgstr "kør kommando (eller rediger fil) som angivet bruger\n"
+
+#: src/parse_args.c:578
+msgid "display version information and exit\n"
+msgstr "vis versionsinformation og afslut\n"
+
+#: src/parse_args.c:580
+msgid "update user's timestamp without running a command\n"
+msgstr "opdater brugers tidsstempel uden at køre en kommando\n"
+
+#: src/parse_args.c:582
+msgid "stop processing command line arguments\n"
+msgstr "stop behandling af parametre for kommandolinjen\n"
+
+#: src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr "kunne ikke åbne overvågningssystem"
+
+#: src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr "kunne ikke sende overvågningsbesked"
+
+#: src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "kunne ikke fgetfilecon %s"
+
+#: src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr "%s ændrede etiketter"
+
+#: src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr "kan ikke gendanne kontekst for %s"
+
+#: src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr "kan ikke åbne %s, giver ikke ny etiket til tty"
+
+#: src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr "kan ikke indhente aktuel tty-kontekst, giver ikke ny etiket til tty"
+
+#: src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr "kan ikke indhente ny tty-kontekst, giver ikke nyt etiket til tty"
+
+#: src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr "kan ikke angive ny tty-kontekst"
+
+#: src/selinux.c:194 src/selinux.c:207 src/sudo.c:330
+#, c-format
+msgid "unable to open %s"
+msgstr "kan ikke åbne %s"
+
+#: src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr "du skal angive en rolle for type %s"
+
+#: src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr "kan ikke indhente standardtype for rolle %s"
+
+#: src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr "kunne ikke angive ny rolle %s"
+
+#: src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr "kunne ikke angive ny type %s"
+
+#: src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr "%s er ikke en gyldig kontekst"
+
+#: src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr "kunne ikke indhente gammel_kontekst (old_context)"
+
+#: src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr "kunne ikke bestemme tilstanden gennemtving (enforcing)."
+
+#: src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr "kunne ikke opsætte tty-kontekst for %s"
+
+#: src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr "kunne ikke angive kørselskontekt til %s"
+
+# engelsk: mangler vist lidt info her tast eller nøgle. mon ikke det er nøgle
+#: src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr "kunne ikke angive nøgleoprettelseskontekst til %s"
+
+#: src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "kræver mindst et argument"
+
+#: src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "kan ikke køre %s"
+
+#: src/sudo.c:192
+#, c-format
+msgid "must be setuid root"
+msgstr "skal være setuid root"
+
+#: src/sudo.c:210
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "Sudo version %s\n"
+
+#: src/sudo.c:212
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "Konfigurationsindstillinger: %s\n"
+
+#: src/sudo.c:217
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "fatal fejl, kan ikke indlæse udvidelsesmoduler"
+
+#: src/sudo.c:225
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr "kan ikke initialisere udvidelsesmodul for politik"
+
+#: src/sudo.c:280
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "fejl under initialisering af I/O-udvidelsesmodulet %s"
+
+#: src/sudo.c:307
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr "uventet sudo-tilstand 0x%x"
+
+#: src/sudo.c:356
+#, c-format
+msgid "unable to get group vector"
+msgstr "kan ikke indhente gruppevektor"
+
+#: src/sudo.c:394
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr "ukendt uid %u: hvem er du?"
+
+#: src/sudo.c:734
+#, c-format
+msgid "resource control limit has been reached"
+msgstr "grænse for ressourcekontrol er nået"
+
+#: src/sudo.c:737
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr "bruger »%s« er ikke medlem af projektet »%s«"
+
+#: src/sudo.c:741
+#, c-format
+msgid "the invoking task is final"
+msgstr "start af opgave er færdig"
+
+#: src/sudo.c:744
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "kunne ikke slutte til projekt »%s«"
+
+#: src/sudo.c:749
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr "ingen ressourcekø som accepterer standardbindinger findes for projekt »%s«"
+
+#: src/sudo.c:753
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr "angivet ressourcekø findes ikke for projekt »%s«"
+
+#: src/sudo.c:757
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr "kunne ikke binde til standardressourcekø for projekt »%s«"
+
+#: src/sudo.c:763
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "setproject fejlede for projekt »%s«"
+
+#: src/sudo.c:765
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr "advarsel, ressourcekontroltildeling fejlede for projekt »%s«"
+
+#: src/sudo.c:791
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr "kan ikke fjerne PRIV_PROC_EXEC fra PRIV_LIMIT"
+
+#: src/sudo.c:895
+#, c-format
+msgid "unknown login class %s"
+msgstr "ukendt logindklasse %s"
+
+#: src/sudo.c:902 src/sudo.c:905
+#, c-format
+msgid "unable to set user context"
+msgstr "kan ikke angive brugerkontekst"
+
+#: src/sudo.c:916
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr "kan ikke angive effektiv gid til runas gid %u"
+
+#: src/sudo.c:921
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr "kunne ikke angive gid til runas gid %u"
+
+#: src/sudo.c:929 src/sudo.c:935
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr "kunne ikke angive supplerende gruppe-id'er"
+
+#: src/sudo.c:943
+#, c-format
+msgid "unable to set process priority"
+msgstr "kunne ikke angive procesprioritet"
+
+#: src/sudo.c:951
+#, c-format
+msgid "unable to change root to %s"
+msgstr "kunne ikke ændre administrator (root) til %s"
+
+#: src/sudo.c:961 src/sudo.c:967 src/sudo.c:973
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr "kunne ikke ændre til runas uid (%u, %u)"
+
+#: src/sudo.c:987
+#, c-format
+msgid "unable to change directory to %s"
+msgstr "kunne ikke ændre mappe til %s"
+
+#: src/sudo.c:1078
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr "uventet underbetingelse for terminering: %d"
+
+#: src/sudo.c:1118
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr "politikudvidelsesmodul %s understøter ikke listning af privilegier"
+
+#: src/sudo.c:1129
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr "politikudvidelsesmodul %s understøtter ikke tilvalget -v"
+
+#: src/sudo.c:1140
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr "politikudvidelsesmodul %s understøtter ikke tilvalget -k/-K"
+
+#: src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "kunne ikke ændre uid til root (%u)"
+
+#: src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr "fejl i udvidelsesmodul: mangler filliste for sudoedit"
+
+#: src/sudo_edit.c:172 src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s: ikke en regulær fil"
+
+#: src/sudo_edit.c:206 src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr "%s: kort skrivning"
+
+#: src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr "%s tilbage uændrede"
+
+#: src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "%s uændrede"
+
+#: src/sudo_edit.c:306 src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "kan ikke skrive til %s"
+
+#: src/sudo_edit.c:307 src/sudo_edit.c:325 src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr "indhold fra redigeringssession tilbage i %s"
+
+#: src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "kan ikke læse midlertidig fil"
+
+#: src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "ingen tty til stede og intet askpass-program angivet"
+
+#: src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "intet askpass-program angivet, forsøg at angive SUDO_ASKPASS"
+
+#: src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "kan ikke angive gid til %u"
+
+#: src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "kan ikke angive uid til %u"
+
+#: src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "kan ikke køre %s"
+
+#: src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "kan ikke gemme til stdin"
+
+#: src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "kan ikke dup2 stdin"
+
+#: src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "kan ikke gendanne stdin"
+
+#: common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "kan ikke åbne userdb"
+
+#: common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "kan ikke skifte til register »%s« for %s"
+
+#: common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "kan ikke gendanne register"
+
+#: common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "intern fejl, forsøgte at emalloc(0)"
+
+#: common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "intern fejl, forsøgte at emalloc2(0)"
+
+#: common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "intern fejl, emalloc2()-overløb"
+
+#: common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "intern fejl, forsøgte at erealloc(0)"
+
+#: common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "intern fejl, forsøgte at erealloc3(0)"
+
+#: common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "intern fejl, erealloc3()-overløb"
+
+#: compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "ukendt signal"
diff --git a/src/po/eu.mo b/src/po/eu.mo
new file mode 100644 (file)
index 0000000..ea726d4
Binary files /dev/null and b/src/po/eu.mo differ
diff --git a/src/po/eu.po b/src/po/eu.po
new file mode 100644 (file)
index 0000000..5702274
--- /dev/null
@@ -0,0 +1,741 @@
+# Basque translation of sudo.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sudo package.
+# Mikel Olasagasti Uranga <mikel@olasagasti.info>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2rc2\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-06-04 18:27-0400\n"
+"PO-Revision-Date: 2011-06-06 18:28+0100\n"
+"Last-Translator: Mikel Olasagasti Uranga <mikel@olasagasti.info>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"\n"
+
+#: src/error.c:82 src/error.c:86
+msgid ": "
+msgstr ":"
+
+#: src/exec.c:125 src/exec_pty.c:573 src/exec_pty.c:880 src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "ezin da fork egin"
+
+#: src/exec.c:246
+#, c-format
+msgid "unable to create sockets"
+msgstr "ezin da socketik sortu"
+
+#: src/exec.c:253 src/exec_pty.c:526 src/exec_pty.c:534 src/exec_pty.c:541
+#: src/exec_pty.c:826 src/exec_pty.c:877 src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "ezin da pipe bat sortu"
+
+#: src/exec.c:319 src/exec_pty.c:944 src/exec_pty.c:1077
+#, c-format
+msgid "select failed"
+msgstr "select-ek huts egin du"
+
+#: src/exec.c:387
+#, c-format
+msgid "unable to restore tty label"
+msgstr ""
+
+#: src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr ""
+
+#: src/exec_pty.c:566
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr ""
+
+#: src/exec_pty.c:858
+#, c-format
+msgid "unable to set controlling tty"
+msgstr ""
+
+#: src/exec_pty.c:952
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "errorea seinale hoditik irakurtzean"
+
+#: src/exec_pty.c:971
+#, c-format
+msgid "error reading from pipe"
+msgstr "errorea hoditik irakurtzean"
+
+#: src/exec_pty.c:987
+#, c-format
+msgid "error reading from socketpair"
+msgstr "errorea socketpair-etik irakurtzean"
+
+#: src/exec_pty.c:991
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "espero ez zen erantzun moeta backchannel-ean: %d"
+
+#: src/load_plugins.c:154
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: src/load_plugins.c:160
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: src/load_plugins.c:170
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s-(r)en jabeak %d uid-a behar du"
+
+#: src/load_plugins.c:174
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "%s jabeak bakarrik idazteko moduan behar du"
+
+#: src/load_plugins.c:181
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "ezin da %s-(r)engan dlopen egin: %s"
+
+#: src/load_plugins.c:186
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s: ezin da %s sinboloa aurkitu"
+
+#: src/load_plugins.c:192
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s: %d arau moeta ezezaguna"
+
+#: src/load_plugins.c:196
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr ""
+
+#: src/load_plugins.c:203
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr ""
+
+#: src/load_plugins.c:221
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr ""
+
+#: src/load_plugins.c:226
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr ""
+
+#: src/net_ifs.c:155 src/net_ifs.c:164 src/net_ifs.c:176 src/net_ifs.c:185
+#: src/net_ifs.c:295 src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces: overflow-a atzeman da"
+
+#: src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "ezin da socket-a ireki"
+
+#: src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "-C argumentuak 3 edo zenbaki altuagoa behar du"
+
+#: src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "-D argumentua 1 eta 9 bitartean behar du, biak barne"
+
+#: src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "erabiltzaile ezezaguna: %s"
+
+#: src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "ez zenituzke `-i' eta `-s' aukerak batera erabili behar"
+
+#: src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "ez zenitzuke `-i' eta `-E' aukerak batera erabili behar"
+
+#: src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "`-E' aukera ez da onartzen edizio moduan"
+
+#: src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "ez zenuke ingurune aldagairik zehaztu beharko edizio moduan"
+
+#: src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "`-U' aukera `-l' aukerarekin erabili beharko zenuke soilik"
+
+#: src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "`-A' eta `-S' aukerak ez lirateke batera erabili beharko"
+
+#: src/parse_args.c:418 src/sudo.c:398 src/sudo.c:418 src/sudo.c:426
+#: src/sudo.c:436 common/alloc.c:85 common/alloc.c:105 common/alloc.c:123
+#: common/alloc.c:145 common/alloc.c:203 common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "ezin da memoria esleitu"
+
+#: src/parse_args.c:431
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "sudoedit-ek ez du euskarririk plataforma hontan"
+
+#: src/parse_args.c:502
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "Soilik -e, -h, -i, -K, -l, -s, -v edo -V aukeretako bat definitu beharko litzateke"
+
+#: src/parse_args.c:515
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s - editatu fitxategia beste erabiltzaile bat bezala\n"
+"\n"
+
+#: src/parse_args.c:517
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s - exekutatu komandu bat beste erabiltzaile bat bezala\n"
+"\n"
+
+#: src/parse_args.c:522
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Aukerak:\n"
+
+#: src/parse_args.c:525
+msgid "use helper program for password prompting\n"
+msgstr ""
+
+#: src/parse_args.c:528
+msgid "use specified BSD authentication type\n"
+msgstr ""
+
+#: src/parse_args.c:530
+msgid "run command in the background\n"
+msgstr ""
+
+#: src/parse_args.c:532
+msgid "close all file descriptors >= fd\n"
+msgstr ""
+
+#: src/parse_args.c:535
+msgid "run command with specified login class\n"
+msgstr ""
+
+#: src/parse_args.c:538
+msgid "preserve user environment when executing command\n"
+msgstr ""
+
+#: src/parse_args.c:540
+msgid "edit files instead of running a command\n"
+msgstr ""
+
+#: src/parse_args.c:542
+msgid "execute command as the specified group\n"
+msgstr ""
+
+#: src/parse_args.c:544
+msgid "set HOME variable to target user's home dir.\n"
+msgstr ""
+
+#: src/parse_args.c:546
+msgid "display help message and exit\n"
+msgstr "laguntza mezua erakutsi eta irten\n"
+
+#: src/parse_args.c:548
+msgid "run a login shell as target user\n"
+msgstr "abiarazi login shell bat helburua den erabiltzaile moduan\n"
+
+#: src/parse_args.c:550
+msgid "remove timestamp file completely\n"
+msgstr "ezabatu guztiz data-zigilu fitxategia\n"
+
+#: src/parse_args.c:552
+msgid "invalidate timestamp file\n"
+msgstr "baliogabetu data-zigilu fitxategia\n"
+
+#: src/parse_args.c:554
+msgid "list user's available commands\n"
+msgstr "zerrendatu erabiltzaileak eskuragarri dituen komandoak\n"
+
+#: src/parse_args.c:556
+msgid "non-interactive mode, will not prompt user\n"
+msgstr ""
+
+#: src/parse_args.c:558
+msgid "preserve group vector instead of setting to target's\n"
+msgstr ""
+
+#: src/parse_args.c:560
+msgid "use specified password prompt\n"
+msgstr ""
+
+#: src/parse_args.c:563 src/parse_args.c:571
+msgid "create SELinux security context with specified role\n"
+msgstr ""
+
+#: src/parse_args.c:566
+msgid "read password from standard input\n"
+msgstr ""
+
+#: src/parse_args.c:568
+msgid "run a shell as target user\n"
+msgstr ""
+
+#: src/parse_args.c:574
+msgid "when listing, list specified user's privileges\n"
+msgstr ""
+
+#: src/parse_args.c:576
+msgid "run command (or edit file) as specified user\n"
+msgstr ""
+
+#: src/parse_args.c:578
+msgid "display version information and exit\n"
+msgstr ""
+
+#: src/parse_args.c:580
+msgid "update user's timestamp without running a command\n"
+msgstr ""
+
+#: src/parse_args.c:582
+msgid "stop processing command line arguments\n"
+msgstr ""
+
+#: src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr ""
+
+#: src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr ""
+
+#: src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "ezin da %s-(r)engan fgetfilecon egin"
+
+#: src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr ""
+
+#: src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr ""
+
+#: src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr ""
+
+#: src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr ""
+
+#: src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr ""
+
+#: src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr ""
+
+#: src/selinux.c:194 src/selinux.c:207 src/sudo.c:330
+#, c-format
+msgid "unable to open %s"
+msgstr ""
+
+#: src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr ""
+
+#: src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr ""
+
+#: src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr ""
+
+#: src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr ""
+
+#: src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr ""
+
+#: src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr ""
+
+#: src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr ""
+
+#: src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr ""
+
+#: src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr ""
+
+#: src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr ""
+
+#: src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "gutxienez argumentu bat behar du"
+
+#: src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "ezin da %s exekutatu"
+
+#: src/sudo.c:192
+#, c-format
+msgid "must be setuid root"
+msgstr "root setuid-a behar du"
+
+#: src/sudo.c:210
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "%s sudo bertsioa\n"
+
+#: src/sudo.c:212
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "Konfigurazio aukerak: %s\n"
+
+#: src/sudo.c:217
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "errore larria, ezin dira gehigarriak gehitu"
+
+#: src/sudo.c:225
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr ""
+
+#: src/sudo.c:280
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "errorea %s I/O plugina abiaraztean"
+
+#: src/sudo.c:307
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr ""
+
+#: src/sudo.c:356
+#, c-format
+msgid "unable to get group vector"
+msgstr ""
+
+#: src/sudo.c:394
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr ""
+
+#: src/sudo.c:734
+#, c-format
+msgid "resource control limit has been reached"
+msgstr ""
+
+#: src/sudo.c:737
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr ""
+
+#: src/sudo.c:741
+#, c-format
+msgid "the invoking task is final"
+msgstr ""
+
+#: src/sudo.c:744
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "ezin izan da \"%s\" proiektura batu"
+
+#: src/sudo.c:749
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:753
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:757
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:763
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "setproject-ek huts egin du \"%s\" proiektuarentzat"
+
+#: src/sudo.c:765
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:791
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr ""
+
+#: src/sudo.c:895
+#, c-format
+msgid "unknown login class %s"
+msgstr ""
+
+#: src/sudo.c:902 src/sudo.c:905
+#, c-format
+msgid "unable to set user context"
+msgstr ""
+
+#: src/sudo.c:916
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr ""
+
+#: src/sudo.c:921
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr ""
+
+#: src/sudo.c:929 src/sudo.c:935
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr ""
+
+#: src/sudo.c:943
+#, c-format
+msgid "unable to set process priority"
+msgstr ""
+
+#: src/sudo.c:951
+#, c-format
+msgid "unable to change root to %s"
+msgstr ""
+
+#: src/sudo.c:961 src/sudo.c:967 src/sudo.c:973
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr ""
+
+#: src/sudo.c:987
+#, c-format
+msgid "unable to change directory to %s"
+msgstr ""
+
+#: src/sudo.c:1078
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr ""
+
+#: src/sudo.c:1118
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr ""
+
+#: src/sudo.c:1129
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr ""
+
+#: src/sudo.c:1140
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr ""
+
+#: src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "ezin da uid-a root-era aldatu (%u)"
+
+#: src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr ""
+
+#: src/sudo_edit.c:172 src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s: ez da fitxategi normala"
+
+#: src/sudo_edit.c:206 src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr ""
+
+#: src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr ""
+
+#: src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "%s aldatugabea"
+
+#: src/sudo_edit.c:306 src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "ezin da %s-(e)ra idatzi"
+
+#: src/sudo_edit.c:307 src/sudo_edit.c:325 src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr ""
+
+#: src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "ezin da aldi baterako fitxategia irakurri"
+
+#: src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "ez dago tty-rik eta askpass aplikazioa zehaztu gabe"
+
+#: src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "ez da askpass aplikaziorik zehaztu, saiatu SUDO_ASKPASS ezartzen"
+
+#: src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "ezin da %u gid-a ezarri"
+
+#: src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "ezin da %u uid-a ezarri"
+
+#: src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "ezin da %s exekutatu"
+
+#: src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "ezin da stdin-era gorde"
+
+#: src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "ezin da stdin-era dup2 egin"
+
+#: src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "ezin da stdin-era leheneratu"
+
+#: common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "ezin da userdb-a ireki"
+
+#: common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "ezin da \"%s\" erregistrora aldatu %s-(r)entzat"
+
+#: common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "ezin da erregistroa leheneratu"
+
+#: common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "barne errorea, emalloc(0) egiteko saiakera egon da"
+
+#: common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "barne errorea, emalloc2(0) egiteko saiakera egon da"
+
+#: common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "barne errorea, emalloc2() overflow-a"
+
+#: common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "barne errorea, erealloc(0) egiteko saiakera egon da"
+
+#: common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "barne errorea, erealloc3(0) egiteko saiakera egon da"
+
+#: common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "barne errorea, erealloc3(0) overflow-a"
+
+#: compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "Seinale ezezaguna"
diff --git a/src/po/fi.mo b/src/po/fi.mo
new file mode 100644 (file)
index 0000000..b8756b4
Binary files /dev/null and b/src/po/fi.mo differ
diff --git a/src/po/fi.po b/src/po/fi.po
new file mode 100644 (file)
index 0000000..b8798f9
--- /dev/null
@@ -0,0 +1,760 @@
+# Finnish messages for sudo.
+# This file is put in the public domain.
+# Copyright © 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the sudo package.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2-rc1\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-05-20 15:33-0400\n"
+"PO-Revision-Date: 2011-05-27 10:30+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\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"
+
+#: ../../trunk/src/error.c:82 ../../trunk/src/error.c:86
+msgid ": "
+msgstr ": "
+
+#: ../../trunk/src/exec.c:125 ../../trunk/src/exec_pty.c:569
+#: ../../trunk/src/exec_pty.c:876 ../../trunk/src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "ei kyetä kutsumaan fork-kutsua"
+
+#: ../../trunk/src/exec.c:247
+#, c-format
+msgid "unable to create sockets"
+msgstr "ei kyetä luomaan pistokkeita"
+
+#: ../../trunk/src/exec.c:254 ../../trunk/src/exec_pty.c:522
+#: ../../trunk/src/exec_pty.c:530 ../../trunk/src/exec_pty.c:537
+#: ../../trunk/src/exec_pty.c:822 ../../trunk/src/exec_pty.c:873
+#: ../../trunk/src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "ei kyetä luomaan putkea"
+
+#: ../../trunk/src/exec.c:320 ../../trunk/src/exec_pty.c:940
+#: ../../trunk/src/exec_pty.c:1073
+#, c-format
+msgid "select failed"
+msgstr "select-funktio epäonnistui"
+
+#: ../../trunk/src/exec.c:388
+#, c-format
+msgid "unable to restore tty label"
+msgstr "ei kyetä palauttamaan tty-nimiötä"
+
+#: ../../trunk/src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr "ei kyetä varaamaan pty:tä"
+
+#: ../../trunk/src/exec_pty.c:562
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr "ei kyetä asettamaan päätettä raakatilaan"
+
+#  Istunnolla voi olla ohjaava tty. Istunnon yksi prosessiryhmä voi olla edustaprosessiryhmä ja toimia siten ohjaavana tty:nä, joka vastaanottaa tty-syötteen ja -signaalit.
+#: ../../trunk/src/exec_pty.c:854
+#, c-format
+msgid "unable to set controlling tty"
+msgstr "ei kyetä asettamaan ohjaavaa tty:tä"
+
+#: ../../trunk/src/exec_pty.c:948
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "virhe luettaessa signaaliputkesta"
+
+#: ../../trunk/src/exec_pty.c:967
+#, c-format
+msgid "error reading from pipe"
+msgstr "virhe luettaessa putkesta"
+
+#: ../../trunk/src/exec_pty.c:983
+#, c-format
+msgid "error reading from socketpair"
+msgstr "virhe luettaessa pistokeparista"
+
+#: ../../trunk/src/exec_pty.c:987
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "odottamaton vastaustyyppi paluukanavalla: %d"
+
+#: ../../trunk/src/load_plugins.c:154
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: ../../trunk/src/load_plugins.c:160
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#  ensimmäinen parametri on path
+#: ../../trunk/src/load_plugins.c:170
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "polun %s omistajan on oltava uid %d"
+
+#  parametri on path
+#: ../../trunk/src/load_plugins.c:174
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "polun %s on oltava vain omistajan kirjoitettava"
+
+#: ../../trunk/src/load_plugins.c:181
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "lisäosan avaaminen epäonnistui funktiolla dlopen %s: %s"
+
+#: ../../trunk/src/load_plugins.c:186
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s: ei kyetä löytämään symbolia %s"
+
+#: ../../trunk/src/load_plugins.c:192
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s: tuntematon menettelytapatyyppi %d"
+
+#: ../../trunk/src/load_plugins.c:196
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr "%s: yhteensopimaton menettelytavan major-versio %d, odotettiin %d"
+
+#: ../../trunk/src/load_plugins.c:203
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr "%s: vain yksi menettelytapalisäosa voidaan ladata"
+
+#: ../../trunk/src/load_plugins.c:221
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr "%s: vähintään yksi menettelytapalisäosa on määriteltävä"
+
+#: ../../trunk/src/load_plugins.c:226
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr "menettelytapalisäosa %s ei sisällä check_policy-metodia"
+
+#: ../../trunk/src/net_ifs.c:155 ../../trunk/src/net_ifs.c:164
+#: ../../trunk/src/net_ifs.c:176 ../../trunk/src/net_ifs.c:185
+#: ../../trunk/src/net_ifs.c:295 ../../trunk/src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces: ylivuoto havaittu"
+
+#: ../../trunk/src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "ei kyetä avaamaan pistoketta"
+
+#: ../../trunk/src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "valitsimen -C argumentin on oltava vähintään 3"
+
+#: ../../trunk/src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "valitsimen -D argumentin on oltava alueella 1 - 9"
+
+#: ../../trunk/src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "tuntematon käyttäjä: %s"
+
+#: ../../trunk/src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "et voi määritellä sekä valitsinta ”-i” että valitsinta ”-s”"
+
+#: ../../trunk/src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "et voi määritellä sekä valitsinta ”-i” että valitsinta ”-E”"
+
+#: ../../trunk/src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "valitsin ”-E” ei ole kelvollinen muokkaustilassa"
+
+#: ../../trunk/src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "ei voi määritellä ympäristömuuttujia muokkaustilassa"
+
+#: ../../trunk/src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "valitsinta ”-U” voidaan käyttää vain valitsimen ”-l” kanssa"
+
+#: ../../trunk/src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "valitsimia ”-A” ja ”-S” ei voi käyttää yhdessä"
+
+#: ../../trunk/src/parse_args.c:418 ../../trunk/src/sudo.c:398
+#: ../../trunk/src/sudo.c:418 ../../trunk/src/sudo.c:426
+#: ../../trunk/src/sudo.c:436 ../../trunk/common/alloc.c:85
+#: ../../trunk/common/alloc.c:105 ../../trunk/common/alloc.c:123
+#: ../../trunk/common/alloc.c:145 ../../trunk/common/alloc.c:203
+#: ../../trunk/common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "ei kyetä varaamaan muistia"
+
+#: ../../trunk/src/parse_args.c:431
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "sudoedit ei ole tuettu tällä alustalla"
+
+#: ../../trunk/src/parse_args.c:502
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "Vain yksi valitsimista -e, -h, -i, -K, -l, -s, -v tai -V voidaan määritellä"
+
+#: ../../trunk/src/parse_args.c:515
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s - muokkaa tiedostoja toisena käyttäjänä\n"
+"\n"
+
+#: ../../trunk/src/parse_args.c:517
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s - suorita komentoja toisena käyttäjänä\n"
+"\n"
+
+#: ../../trunk/src/parse_args.c:522
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Valitsimet:\n"
+
+#: ../../trunk/src/parse_args.c:525
+msgid "use helper program for password prompting\n"
+msgstr "käytä apuohjelmaa salasanakyselyyn\n"
+
+#: ../../trunk/src/parse_args.c:528
+msgid "use specified BSD authentication type\n"
+msgstr "käytä määriteltyä BSD-todennustyyppiä\n"
+
+#: ../../trunk/src/parse_args.c:530
+msgid "run command in the background\n"
+msgstr "suorita komento taustalla\n"
+
+#: ../../trunk/src/parse_args.c:532
+msgid "close all file descriptors >= fd\n"
+msgstr "sulje kaikki tiedostokuvaajat >= fd\n"
+
+#: ../../trunk/src/parse_args.c:535
+msgid "run command with specified login class\n"
+msgstr "suorita komento määritellyllä kirjautumisluokalla\n"
+
+#: ../../trunk/src/parse_args.c:538
+msgid "preserve user environment when executing command\n"
+msgstr "säilytä käyttäjäympäristö komentoa suoritettaessa\n"
+
+#: ../../trunk/src/parse_args.c:540
+msgid "edit files instead of running a command\n"
+msgstr "muokkaa tiedostoja komennon suorittamisen sijasta\n"
+
+#  tämä viittaa runas_group-määritelyyn
+#: ../../trunk/src/parse_args.c:542
+msgid "execute command as the specified group\n"
+msgstr "suorita komento määriteltynä ryhmänä\n"
+
+#: ../../trunk/src/parse_args.c:544
+msgid "set HOME variable to target user's home dir.\n"
+msgstr "aseta HOME-muuttuja osoittamaan kohdekäyttäjän kotihakemistoon.\n"
+
+#: ../../trunk/src/parse_args.c:546
+msgid "display help message and exit\n"
+msgstr "näytä opasteviesti ja poistu\n"
+
+#: ../../trunk/src/parse_args.c:548
+msgid "run a login shell as target user\n"
+msgstr "suorita kirjautumiskomentoikkuna kohdekäyttäjänä\n"
+
+#: ../../trunk/src/parse_args.c:550
+msgid "remove timestamp file completely\n"
+msgstr "poista aikaleimatiedosto kokonaan\n"
+
+#: ../../trunk/src/parse_args.c:552
+msgid "invalidate timestamp file\n"
+msgstr "mitätöi aikaleimatiedosto\n"
+
+#: ../../trunk/src/parse_args.c:554
+msgid "list user's available commands\n"
+msgstr "luettele käyttäjän käytettävissä olevat komennot\n"
+
+#: ../../trunk/src/parse_args.c:556
+msgid "non-interactive mode, will not prompt user\n"
+msgstr "ei-interaktiivinen tila, ei kysy käyttäjältä\n"
+
+#: ../../trunk/src/parse_args.c:558
+msgid "preserve group vector instead of setting to target's\n"
+msgstr "säilytä ryhmävektori kohteen vektorin asettamisen sijasta\n"
+
+#: ../../trunk/src/parse_args.c:560
+msgid "use specified password prompt\n"
+msgstr "käytä määriteltyä salasanakehotetta\n"
+
+#: ../../trunk/src/parse_args.c:563 ../../trunk/src/parse_args.c:571
+msgid "create SELinux security context with specified role\n"
+msgstr "luo SELinux-turva-asiayhteys määritellyllä roolilla\n"
+
+#: ../../trunk/src/parse_args.c:566
+msgid "read password from standard input\n"
+msgstr "lue salasana vakiosyötteestä\n"
+
+#: ../../trunk/src/parse_args.c:568
+msgid "run a shell as target user\n"
+msgstr "suorita komentotulkki kohdekäyttäjänä\n"
+
+#: ../../trunk/src/parse_args.c:574
+msgid "when listing, list specified user's privileges\n"
+msgstr "luetteloitaessa luettele määritellyn käyttäjän käyttöoikeudet\n"
+
+#: ../../trunk/src/parse_args.c:576
+msgid "run command (or edit file) as specified user\n"
+msgstr "suorita komento (tai muokkaa tiedostoa) määriteltynä käyttäjänä\n"
+
+#: ../../trunk/src/parse_args.c:578
+msgid "display version information and exit\n"
+msgstr "näytä versiotiedot ja poistu\n"
+
+#: ../../trunk/src/parse_args.c:580
+msgid "update user's timestamp without running a command\n"
+msgstr "päivitä käyttäjän aikaleima suorittamatta komentoa\n"
+
+#: ../../trunk/src/parse_args.c:582
+msgid "stop processing command line arguments\n"
+msgstr "lopeta komentoriviargumenttien käsittely\n"
+
+#: ../../trunk/src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr "ei kyetä avaamaan audit-järjestelmää"
+
+#: ../../trunk/src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr "ei kyetä lähettämään audit-viestiä"
+
+#: ../../trunk/src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "ei kyetä kutsumaan funktiota fgetfilecon %s"
+
+#: ../../trunk/src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr "%s muutti nimiöitä"
+
+#: ../../trunk/src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr "ei kyetä palauttamaan asiayhteyttä kohteelle %s"
+
+#: ../../trunk/src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr "ei kyetä avaamaan kohdetta %s, ei nimiöidä uudelleen tty:tä"
+
+#: ../../trunk/src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr "ei kyetä hakemaan nykyistä tty-asiayhteyttä, ei nimiöidä uudelleen tty:tä"
+
+#: ../../trunk/src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr "ei kyetä hakemaan uutta tty-asiayhteyttä, ei nimiöidä uudelleen tty:tä"
+
+#: ../../trunk/src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr "ei kyetä asettamaan uutta tty-asiayhteyttä"
+
+#: ../../trunk/src/selinux.c:194 ../../trunk/src/selinux.c:207
+#: ../../trunk/src/sudo.c:330
+#, c-format
+msgid "unable to open %s"
+msgstr "ei kyetä avaamaan kohdetta %s"
+
+#: ../../trunk/src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr "tyypille %s on määriteltävä rooli"
+
+#: ../../trunk/src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr "roolille %s ei kyetä hakemaan oletustyyppiä"
+
+#: ../../trunk/src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr "uuden roolin %s asettaminen epäonnistui"
+
+#: ../../trunk/src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr "uuden tyypin %s asettaminen epäonnistui"
+
+#: ../../trunk/src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr "%s ei ole kelvollinen asiayhteys"
+
+#: ../../trunk/src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr "kohteen old_context hakeminen epäonnistui"
+
+#: ../../trunk/src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr "ei kyetä määrittelemään vahvistustilaa."
+
+#: ../../trunk/src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr "ei kyetä asettamaan tty-asiayhteydeksi %s"
+
+#: ../../trunk/src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr "ei kyetä asettamaan suoritusasiayhteydeksi %s"
+
+#: ../../trunk/src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr "ei kyetä asettamaan avaimenluontiasiayhteydeksi %s"
+
+#: ../../trunk/src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "vaatii vähintään yhden argumentin"
+
+#: ../../trunk/src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "ei kyetä suorittamaan kohdetta %s"
+
+#: ../../trunk/src/sudo.c:192
+#, c-format
+msgid "must be setuid root"
+msgstr "on oltava setuid root"
+
+#: ../../trunk/src/sudo.c:210
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "Sudo-versio %s\n"
+
+#: ../../trunk/src/sudo.c:212
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "Asetusvalitsimet: %s\n"
+
+#: ../../trunk/src/sudo.c:217
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "kohtalokas virhe, ei kyetä lataamaan lisäosia"
+
+#: ../../trunk/src/sudo.c:225
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr "ei kyetä alustamaan menettelytapalisäosaa"
+
+#: ../../trunk/src/sudo.c:280
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "virhe alustettaessa siirräntälisäosaa %s"
+
+#: ../../trunk/src/sudo.c:307
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr "odottamaton sudo-tila 0x%x"
+
+#: ../../trunk/src/sudo.c:356
+#, c-format
+msgid "unable to get group vector"
+msgstr "ei kyetä hakemaan ryhmävektoria"
+
+#: ../../trunk/src/sudo.c:394
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr "tuntematon uid-käyttäjätunniste %u: kuka olet?"
+
+#: ../../trunk/src/sudo.c:734
+#, c-format
+msgid "resource control limit has been reached"
+msgstr "resurssivalvontaraja saavutettu"
+
+#: ../../trunk/src/sudo.c:737
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr "käyttäjä ”%s” ei ole hankkeen ”%s” jäsen"
+
+#: ../../trunk/src/sudo.c:741
+#, c-format
+msgid "the invoking task is final"
+msgstr "kutsuttu tehtävä on final-tyyppinen"
+
+#: ../../trunk/src/sudo.c:744
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "ei voitu liittyä hankkeeseen ”%s”"
+
+#: ../../trunk/src/sudo.c:749
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr "hankkeelle ”%s” ei ole oletusyhteydet hyväksyvää resurssivarantoa"
+
+#: ../../trunk/src/sudo.c:753
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr "hankkeelle ”%s” ei ole määriteltyä resurssivarantoa"
+
+#: ../../trunk/src/sudo.c:757
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr "hankkeelle ”%s” ei voitu sitoa oletusresurssivarantoa"
+
+#: ../../trunk/src/sudo.c:763
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "setproject hankkeelle ”%s” epäonnistui"
+
+#: ../../trunk/src/sudo.c:765
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr "varoitus, hankkeen ”%s” resurssiohjausosoitus epäonnistui"
+
+#  Solaris privileges, remove PRIV_PROC_EXEC post-execve.
+#: ../../trunk/src/sudo.c:791
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr "ei kyetä poistamaan PRIV_PROC_EXEC kohteesta PRIV_LIMIT"
+
+#: ../../trunk/src/sudo.c:895
+#, c-format
+msgid "unknown login class %s"
+msgstr "tuntematon kirjautumisluokka %s"
+
+#: ../../trunk/src/sudo.c:902 ../../trunk/src/sudo.c:905
+#, c-format
+msgid "unable to set user context"
+msgstr "ei kyetä asettamaan käyttäjäasiayhteyttä"
+
+#  tämän ymmärrän niin, että käyttäjärjestelmäydin luo tiedoston ja antaa tälle tavallaan tilapäisen effective gid-tunnisteen, joka vaihdetaan suorittamisen yhteydessä prosessin omistajan suoritettavaksi ryhmätunnisteeksi.
+#: ../../trunk/src/sudo.c:916
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr "ei kyetä asettamaan voimassaolevaa gid-ryhmätunnistetta suoritettavaksi gid-ryhmätunnisteeksi %u"
+
+#: ../../trunk/src/sudo.c:921
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr "ei kyetä asettamaan gid-ryhmätunnistetta suoritettavaksi gid-ryhmätunnisteeksi %u"
+
+#: ../../trunk/src/sudo.c:929 ../../trunk/src/sudo.c:935
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr "ei kyetä asettamaan lisäryhmätunnisteita"
+
+#: ../../trunk/src/sudo.c:943
+#, c-format
+msgid "unable to set process priority"
+msgstr "ei kyetä asettamaan prosessiprioriteettia"
+
+#: ../../trunk/src/sudo.c:951
+#, c-format
+msgid "unable to change root to %s"
+msgstr "ei kyetä vaihtamaan root-käyttäjää käyttäjäksi %s"
+
+#: ../../trunk/src/sudo.c:961 ../../trunk/src/sudo.c:967
+#: ../../trunk/src/sudo.c:973
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr "ei kyetä vaihtamaan suoritettavaksi uid-käyttäjätunnisteeksi (%u, %u)"
+
+#  parametrina on CWD- eli Change Working Directory- komennolla palautettava hakemisto
+#: ../../trunk/src/sudo.c:987
+#, c-format
+msgid "unable to change directory to %s"
+msgstr "ei kyetä vaihtamaan hakemistoksi %s"
+
+#: ../../trunk/src/sudo.c:1078
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr "lapsiprosessin odottamaton päättymisehto: %d"
+
+#: ../../trunk/src/sudo.c:1118
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr "menettelytapalisäosa %s ei tue luettelointikäyttöoikeuksia"
+
+#: ../../trunk/src/sudo.c:1129
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr "menettelytapalisäosa %s ei tue valitsinta -v"
+
+#: ../../trunk/src/sudo.c:1140
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr "menettelytapalisäosa %s ei tue valitsimia -k/-K"
+
+#: ../../trunk/src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "ei kyetä vaihtamaan uid-käyttäjätunnistetta root-tunnisteeksi (%u)"
+
+#: ../../trunk/src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr "lisäosavirhe: puuttuu sudoedit-tiedostoluettelo"
+
+#: ../../trunk/src/sudo_edit.c:172 ../../trunk/src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s: ei ole tavallinen tiedosto"
+
+#: ../../trunk/src/sudo_edit.c:206 ../../trunk/src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr "%s: lyhyt kirjoitus"
+
+#: ../../trunk/src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr "%s jätetty muokkaamattomaksi"
+
+#: ../../trunk/src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "%s muuttamaton"
+
+#: ../../trunk/src/sudo_edit.c:306 ../../trunk/src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "ei kyetä kirjoittamaan kohteeseen %s"
+
+#: ../../trunk/src/sudo_edit.c:307 ../../trunk/src/sudo_edit.c:325
+#: ../../trunk/src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr "muokkausistunnon sisältö jätetty kohteessa %s"
+
+#: ../../trunk/src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "ei kyetä lukemaan tilapäistä tiedostoa"
+
+#: ../../trunk/src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "ei tty:tä käytettävissä eikä salasanan kyselyohjelmaa määriteltynä"
+
+#: ../../trunk/src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "salasanan kyselyohjelma ei ole määritelty, yritä asettaa SUDO_ASKPASS"
+
+#: ../../trunk/src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "ei kyetä asettamaan gid-ryhmätunnisteeksi %u"
+
+#: ../../trunk/src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "ei kyetä asettamaan uid-käyttäjätunnisteeksi %u"
+
+#: ../../trunk/src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "ei kyetä suorittamaan salasanakyselyä %s"
+
+#: ../../trunk/src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "ei kyetä tallentamaan vakiosyötettä"
+
+#: ../../trunk/src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "ei kyetä kutsumaan funktiota dup2 vakiosyötteellä"
+
+#: ../../trunk/src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "ei kyetä palauttamaan vakiosyötettä"
+
+#: ../../trunk/common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "ei kyetä avaamaan userdb-käyttäjätietokantaa"
+
+#: ../../trunk/common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "ei kyetä vaihtamaan registeriä ”%s” käyttäjälle %s"
+
+#: ../../trunk/common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "ei kyetä palauttamaan rekisteriä"
+
+#: ../../trunk/common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "sisäinen virhe, yritettiin suorittaa emalloc(0)"
+
+#: ../../trunk/common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "sisäinen virhe, yritettiin suorittaa emalloc2(0)"
+
+#: ../../trunk/common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "sisäinen virhe, emalloc2() -ylivuoto"
+
+#: ../../trunk/common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "sisäinen virhe, yritettiin suorittaa erealloc(0)"
+
+#: ../../trunk/common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "sisäinen virhe, yritettiin suorittaa erealloc3(0)"
+
+#: ../../trunk/common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "sisäinen virhe, erealloc3() -ylivuoto"
+
+#: ../../trunk/compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "Tuntematon signaali"
diff --git a/src/po/pl.mo b/src/po/pl.mo
new file mode 100644 (file)
index 0000000..ede0b2f
Binary files /dev/null and b/src/po/pl.mo differ
diff --git a/src/po/pl.po b/src/po/pl.po
new file mode 100644 (file)
index 0000000..50792e7
--- /dev/null
@@ -0,0 +1,739 @@
+# Polish translation for sudo.
+# This file is put in the public domain.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2rc2\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-06-04 18:27-0400\n"
+"PO-Revision-Date: 2011-07-16 13:15+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\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"
+
+#: src/error.c:82 src/error.c:86
+msgid ": "
+msgstr ": "
+
+#: src/exec.c:125 src/exec_pty.c:573 src/exec_pty.c:880 src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "nie udało się wykonać fork"
+
+#: src/exec.c:246
+#, c-format
+msgid "unable to create sockets"
+msgstr "nie udało się utworzyć gniazd"
+
+#: src/exec.c:253 src/exec_pty.c:526 src/exec_pty.c:534 src/exec_pty.c:541
+#: src/exec_pty.c:826 src/exec_pty.c:877 src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "nie udało się utworzyć potoku"
+
+#: src/exec.c:319 src/exec_pty.c:944 src/exec_pty.c:1077
+#, c-format
+msgid "select failed"
+msgstr "wywołanie select nie powiodło się"
+
+#: src/exec.c:387
+#, c-format
+msgid "unable to restore tty label"
+msgstr "nie udało się przywrócić etykiety tty"
+
+#: src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr "nie udało się przydzielić pty"
+
+#: src/exec_pty.c:566
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr "nie udało się przestawić terminala w tryb surowy"
+
+#: src/exec_pty.c:858
+#, c-format
+msgid "unable to set controlling tty"
+msgstr "nie udało się ustawić sterującego tty"
+
+#: src/exec_pty.c:952
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "błąd odczytu z potoku sygnałowego"
+
+#: src/exec_pty.c:971
+#, c-format
+msgid "error reading from pipe"
+msgstr "błąd odczytu z potoku"
+
+#: src/exec_pty.c:987
+#, c-format
+msgid "error reading from socketpair"
+msgstr "błąd odczytu z pary gniazd"
+
+#: src/exec_pty.c:991
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "nieoczekiwany typ odpowiedzi z kanału zwrotnego: %d"
+
+#: src/load_plugins.c:154
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: src/load_plugins.c:160
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: src/load_plugins.c:170
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "właścicielem %s musi być uid %d"
+
+#: src/load_plugins.c:174
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "prawo zapisu do %s może mieć tylko właściciel"
+
+#: src/load_plugins.c:181
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "nie udało się wykonać dlopen %s: %s"
+
+#: src/load_plugins.c:186
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s: nie udało się odnaleźć symbolu %s"
+
+#: src/load_plugins.c:192
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s: nieznany typ polityki %d"
+
+#: src/load_plugins.c:196
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr "%s: niezgodna główna wersja polityki %d, oczekiwano %d"
+
+#: src/load_plugins.c:203
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr "%s: może być wczytana tylko jedna wtyczka polityki"
+
+#: src/load_plugins.c:221
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr "%s: musi być wczytana przynajmniej jedna wtyczka polityki"
+
+#: src/load_plugins.c:226
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr "wtyczka polityki %s nie zawiera metody check_policy"
+
+#: src/net_ifs.c:155 src/net_ifs.c:164 src/net_ifs.c:176 src/net_ifs.c:185
+#: src/net_ifs.c:295 src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces: wykryto przepełnienie"
+
+#: src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "nie udało się otworzyć gniazda"
+
+#: src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "argument opcji -C musi być większy lub równy 3"
+
+#: src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "argument opcji -D musi być z przedziału od 1 do 9 (włącznie)"
+
+#: src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "nieznany użytkownik: %s"
+
+#: src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "nie można podać jednocześnie opcji `-i' oraz `-s'"
+
+#: src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "nie można podać jednocześnie opcji `-i' oraz `-E'"
+
+#: src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "opcja `-E' nie jest poprawna w trybie edycji"
+
+#: src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "w trybie edycji nie można przekazywać zmiennych środowiskowych"
+
+#: src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "opcji `-U' można używać tylko wraz z opcją `-l'"
+
+#: src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "opcji `-A' oraz `-S' nie można używać jednocześnie"
+
+#: src/parse_args.c:418 src/sudo.c:398 src/sudo.c:418 src/sudo.c:426
+#: src/sudo.c:436 common/alloc.c:85 common/alloc.c:105 common/alloc.c:123
+#: common/alloc.c:145 common/alloc.c:203 common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "nie udało się przydzielić pamięci"
+
+#: src/parse_args.c:431
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "sudoedit nie jest obsługiwane na tej platformie"
+
+#: src/parse_args.c:502
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "Można podać tylko jedną z opcji -e, -h, -i, -K, -l, -s, -v lub -V"
+
+#: src/parse_args.c:515
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s - modyfikowanie plików jako inny użytkownik\n"
+"\n"
+
+#: src/parse_args.c:517
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s - wykonywanie poleceń jako inny użytkownik\n"
+"\n"
+
+#: src/parse_args.c:522
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opcje:\n"
+
+#: src/parse_args.c:525
+msgid "use helper program for password prompting\n"
+msgstr "użycie programu pomocniczego do pytań o hasło\n"
+
+#: src/parse_args.c:528
+msgid "use specified BSD authentication type\n"
+msgstr "użycie podanego rodzaju uwierzytelnienia BSD\n"
+
+#: src/parse_args.c:530
+msgid "run command in the background\n"
+msgstr "uruchomienie polecenia w tle\n"
+
+#: src/parse_args.c:532
+msgid "close all file descriptors >= fd\n"
+msgstr "zamknięcie wszystkich deskryptorów >= fd\n"
+
+#: src/parse_args.c:535
+msgid "run command with specified login class\n"
+msgstr "uruchomienie polecenia z podaną klasą logowania\n"
+
+#: src/parse_args.c:538
+msgid "preserve user environment when executing command\n"
+msgstr "zachowanie środowiska użytkownika przy uruchamianiu polecenia\n"
+
+#: src/parse_args.c:540
+msgid "edit files instead of running a command\n"
+msgstr "modyfikowanie plików zamiast uruchomienia polecenia\n"
+
+#: src/parse_args.c:542
+msgid "execute command as the specified group\n"
+msgstr "wywołanie polecenia jako określona grupa\n"
+
+#: src/parse_args.c:544
+msgid "set HOME variable to target user's home dir.\n"
+msgstr "ustawienie zmiennej HOME na katalog domowy użytkownika docelowego.\n"
+
+#: src/parse_args.c:546
+msgid "display help message and exit\n"
+msgstr "wyświetlenie opisu i zakończenie\n"
+
+#: src/parse_args.c:548
+msgid "run a login shell as target user\n"
+msgstr "uruchomienie powłoki logowania jako docelowy użytkownik\n"
+
+#: src/parse_args.c:550
+msgid "remove timestamp file completely\n"
+msgstr "całkowite usunięcie pliku znacznika czasu\n"
+
+#: src/parse_args.c:552
+msgid "invalidate timestamp file\n"
+msgstr "unieważnienie pliku znacznika czasu\n"
+
+#: src/parse_args.c:554
+msgid "list user's available commands\n"
+msgstr "wypisanie poleceń dostępnych dla użytkownika\n"
+
+#: src/parse_args.c:556
+msgid "non-interactive mode, will not prompt user\n"
+msgstr "tryb nieinteraktywny, użytkownik nie będzie pytany\n"
+
+#: src/parse_args.c:558
+msgid "preserve group vector instead of setting to target's\n"
+msgstr "zachowanie wektora grup zamiast ustawiania docelowych\n"
+
+#: src/parse_args.c:560
+msgid "use specified password prompt\n"
+msgstr "użycie podanego pytania o hasło\n"
+
+#: src/parse_args.c:563 src/parse_args.c:571
+msgid "create SELinux security context with specified role\n"
+msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podaną rolą\n"
+
+#: src/parse_args.c:566
+msgid "read password from standard input\n"
+msgstr "odczyt hasła ze standardowego wejścia\n"
+
+#: src/parse_args.c:568
+msgid "run a shell as target user\n"
+msgstr "uruchomienie powłoki jako użytkownik docelowy\n"
+
+#: src/parse_args.c:574
+msgid "when listing, list specified user's privileges\n"
+msgstr "przy wypisywaniu podanie uprawnień danego użytkownika\n"
+
+#: src/parse_args.c:576
+msgid "run command (or edit file) as specified user\n"
+msgstr "uruchomienie polecenia (lub modyfikowanie pliku) jako podany użytkownik\n"
+
+#: src/parse_args.c:578
+msgid "display version information and exit\n"
+msgstr "wyświetlenie informacji o wersji i zakończenie\n"
+
+#: src/parse_args.c:580
+msgid "update user's timestamp without running a command\n"
+msgstr "uaktualnienie znacznika czasu użytkownika bez uruchamiania polecenia\n"
+
+#: src/parse_args.c:582
+msgid "stop processing command line arguments\n"
+msgstr "zakończenie przetwarzania argumentów linii poleceń\n"
+
+#: src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr "nie udało się otworzyć systemu audytu"
+
+#: src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr "nie udało się wysłać komunikatu audytowego"
+
+#: src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "nie udało się wykonać fgetfilecon %s"
+
+#: src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr "zmienionych etykiet: %s"
+
+#: src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr "nie udało się przywrócić kontekstu %s"
+
+#: src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr "nie udało się otworzyć %s, bez zmiany etykiety tty"
+
+#: src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr "nie udało się uzyskać bieżącego kontekstu tty, bez zmiany etykiety tty"
+
+#: src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr "nie udało się uzyskać nowego kontekstu tty, bez zmiany etykiety tty"
+
+#: src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr "nie udało się ustawić nowego kontekstu tty"
+
+#: src/selinux.c:194 src/selinux.c:207 src/sudo.c:330
+#, c-format
+msgid "unable to open %s"
+msgstr "nie udało się otworzyć %s"
+
+#: src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr "trzeba podać rolę dla typu %s"
+
+#: src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr "nie udało się uzyskać domyślnego typu dla roli %s"
+
+#: src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr "nie udało się ustawić nowej roli %s"
+
+#: src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr "nie udało się ustawić nowego typu %s"
+
+#: src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr "%s nie jest poprawnym kontekstem"
+
+#: src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr "nie udało się uzyskać starego kontekstu"
+
+#: src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr "nie udało się określić trybu wymuszenia."
+
+#: src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr "nie udało się ustawić kontekstu tty dla %s"
+
+#: src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr "nie udało się ustawić kontekstu wykonywania na %s"
+
+#: src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr "nie udało się ustawić kontekstu tworzenia klucza na %s"
+
+#: src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "wymagany jest przynajmniej jeden argument"
+
+#: src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "nie udało się wykonać %s"
+
+#: src/sudo.c:192
+#, c-format
+msgid "must be setuid root"
+msgstr "program musi być setuid root"
+
+#: src/sudo.c:210
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "Sudo wersja %s\n"
+
+#: src/sudo.c:212
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "Opcje konfiguracji: %s\n"
+
+#: src/sudo.c:217
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "błąd krytyczny, nie udało się załadować wtyczek"
+
+#: src/sudo.c:225
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr "nie udało się zainicjować wtyczki polityki"
+
+#: src/sudo.c:280
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "błąd inicjalizacji wtyczki we/wy %s"
+
+#: src/sudo.c:307
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr "nieoczekiwany tryb sudo 0x%x"
+
+#: src/sudo.c:356
+#, c-format
+msgid "unable to get group vector"
+msgstr "nie udało się uzyskać wektora grup"
+
+#: src/sudo.c:394
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr "nieznany uid %u: kim jesteś?"
+
+#: src/sudo.c:734
+#, c-format
+msgid "resource control limit has been reached"
+msgstr "osiągnięto limit kontroli zasobów"
+
+#: src/sudo.c:737
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr "użytkownik \"%s\" nie jest członkiem projektu \"%s\""
+
+#: src/sudo.c:741
+#, c-format
+msgid "the invoking task is final"
+msgstr "zadanie uruchamiające jest ostatnim"
+
+#: src/sudo.c:744
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "nie udało się dołączyć do projektu \"%s\""
+
+#: src/sudo.c:749
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr "nie istnieje pula zasobów akceptująca domyślne przypisania dla projektu \"%s\""
+
+#: src/sudo.c:753
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr "podana pula zasobów nie istnieje w projekcie \"%s\""
+
+#: src/sudo.c:757
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr "nie można przypisać do domyślnej puli zasobów w projekcie \"%s\""
+
+#: src/sudo.c:763
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "setproject dla projektu \"%s\" nie powiodło się"
+
+#: src/sudo.c:765
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr "uwaga: przypisanie kontroli zasobów dla projektu \"%s\" nie powiodło się"
+
+#: src/sudo.c:791
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr "nie udało się usunąć PRIV_PROC_EXEC z PRIV_LIMIT"
+
+#: src/sudo.c:895
+#, c-format
+msgid "unknown login class %s"
+msgstr "nieznana klasa logowania %s"
+
+#: src/sudo.c:902 src/sudo.c:905
+#, c-format
+msgid "unable to set user context"
+msgstr "nie udało się ustawić kontekstu użytkownika"
+
+#: src/sudo.c:916
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr "nie udało się ustawić efektywnego gid-a w celu działania jako gid %u"
+
+#: src/sudo.c:921
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr "nie udało się ustawić gid-a w celu działania jako gid %u"
+
+#: src/sudo.c:929 src/sudo.c:935
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr "nie udało się ustawić ID dodatkowych grup"
+
+#: src/sudo.c:943
+#, c-format
+msgid "unable to set process priority"
+msgstr "nie udało się ustawić priorytetu procesu"
+
+#: src/sudo.c:951
+#, c-format
+msgid "unable to change root to %s"
+msgstr "nie udało się zmienić katalogu głównego na %s"
+
+#: src/sudo.c:961 src/sudo.c:967 src/sudo.c:973
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr "nie udało się zmienić uid-ów, aby działać jako (%u, %u)"
+
+#: src/sudo.c:987
+#, c-format
+msgid "unable to change directory to %s"
+msgstr "nie udało się zmienić katalogu na %s"
+
+#: src/sudo.c:1078
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr "nieoczekiwane zakończenie procesu potomnego: %d"
+
+#: src/sudo.c:1118
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr "wtyczka polityki %s nie obsługuje wypisywania uprawnień"
+
+#: src/sudo.c:1129
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr "wtyczka polityki %s nie obsługuje opcji -v"
+
+#: src/sudo.c:1140
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr "wtyczka polityki %s nie obsługuje opcji -k/-K"
+
+#: src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "nie udało się zmienić uid-a na roota (%u)"
+
+#: src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr "błąd wtyczki: brak listy plików dla sudoedit"
+
+#: src/sudo_edit.c:172 src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s: nie jest zwykłym plikiem"
+
+#: src/sudo_edit.c:206 src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr "%s: skrócony zapis"
+
+#: src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr "pozostawiono bez zmian: %s"
+
+#: src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "nie zmieniono: %s"
+
+#: src/sudo_edit.c:306 src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "nie udało się zapisać do %s"
+
+#: src/sudo_edit.c:307 src/sudo_edit.c:325 src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr "zawartość sesji edycji pozostawiono w %s"
+
+#: src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "nie udało się odczytać pliku tymczasowego"
+
+#: src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "brak tty i nie podano programu pytającego o hasło"
+
+#: src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "nie podano programu pytającego o hasło, proszę spróbować ustawić SUDO_ASKPASS"
+
+#: src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "nie udało się ustawić gid-a na %u"
+
+#: src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "nie udało się ustawić uid-a na %u"
+
+#: src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "nie udało się uruchomić %s"
+
+#: src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "nie udało się zapisać standardowego wejścia"
+
+#: src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "nie udało się wykonać dup2 na standardowym wejściu"
+
+#: src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "nie udało się przywrócić standardowego wejścia"
+
+#: common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "nie udało się otworzyć userdb"
+
+#: common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "nie udało się przełączyć na rejestr \"%s\" dla %s"
+
+#: common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "nie udało się odtworzyć rejestru"
+
+#: common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "błąd wewnętrzny, próbowano wykonać emalloc(0)"
+
+#: common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "błąd wewnętrzny, próbowano wykonać emalloc2(0)"
+
+#: common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "błąd wewnętrzny, przepełnienie emalloc2()"
+
+#: common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "błąd wewnętrzny, próbowano wykonać erealloc(0)"
+
+#: common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "błąd wewnętrzny, próbowano wykonać erealloc3(0)"
+
+#: common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "błąd wewnętrzny, przepełnienie erealloc3()"
+
+#: compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "Nieznany sygnał"
diff --git a/src/po/ru.mo b/src/po/ru.mo
new file mode 100644 (file)
index 0000000..7a7e712
Binary files /dev/null and b/src/po/ru.mo differ
diff --git a/src/po/ru.po b/src/po/ru.po
new file mode 100644 (file)
index 0000000..54fa170
--- /dev/null
@@ -0,0 +1,743 @@
+# Transation of sudo messages to Russian.
+# This file is put in the public domain.
+# This file is distributed under the same license as the sudo package.
+#
+# Pavel Maryanov <acid@jack.kiev.ua>, 2011.
+# Yuri Kozlov <yuray@komyakino.ru>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2-rc9\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-05 13:34-0400\n"
+"PO-Revision-Date: 2011-08-09 22:08+0400\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: \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"
+
+#: src/error.c:82 src/error.c:86
+msgid ": "
+msgstr ": "
+
+#: src/exec.c:125 src/exec_pty.c:573 src/exec_pty.c:880 src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "не удаётся создать дочерний процесс"
+
+#: src/exec.c:246
+#, c-format
+msgid "unable to create sockets"
+msgstr "не удаётся создать сокеты"
+
+#: src/exec.c:253 src/exec_pty.c:526 src/exec_pty.c:534 src/exec_pty.c:541
+#: src/exec_pty.c:826 src/exec_pty.c:877 src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "не удаётся создать канал"
+
+#: src/exec.c:319 src/exec_pty.c:944 src/exec_pty.c:1077
+#, c-format
+msgid "select failed"
+msgstr "ошибка select"
+
+#: src/exec.c:387
+#, c-format
+msgid "unable to restore tty label"
+msgstr "не удаётся создать восстановить метку tty"
+
+#: src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr "не удаётся выделить pty"
+
+#: src/exec_pty.c:566
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr "не удаётся перевести терминал в «сырой» режим"
+
+#: src/exec_pty.c:858
+#, c-format
+msgid "unable to set controlling tty"
+msgstr "не удаётся установить управляющий tty"
+
+#: src/exec_pty.c:952
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "ошибка чтения из сигнального канала"
+
+#: src/exec_pty.c:971
+#, c-format
+msgid "error reading from pipe"
+msgstr "ошибка чтения из канала"
+
+#: src/exec_pty.c:987
+#, c-format
+msgid "error reading from socketpair"
+msgstr "ошибка чтения из пары сокетов"
+
+#: src/exec_pty.c:991
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "неожиданный тип ответа в резервном канале: %d"
+
+#: src/load_plugins.c:158
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: src/load_plugins.c:164
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: src/load_plugins.c:174
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s должен принадлежать пользователю с uid %d"
+
+#: src/load_plugins.c:178
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "%s должен быть доступен на запись только владельцу"
+
+#: src/load_plugins.c:185
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "не удаётся выполнить dlopen для %s: %s"
+
+#: src/load_plugins.c:190
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s: не удаётся найти символ %s"
+
+#: src/load_plugins.c:196
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s: неизвестный тип политики %d"
+
+#: src/load_plugins.c:200
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr "%s: несовместимая основная версия политики %d, ожидалась %d"
+
+#: src/load_plugins.c:207
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr "%s: может быть загружен только один модуль политики"
+
+#: src/load_plugins.c:225
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr "%s: необходимо указать не менее одного модуля политики"
+
+#: src/load_plugins.c:230
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr "модуль политики %s не содержит метод check_policy"
+
+#: src/net_ifs.c:155 src/net_ifs.c:164 src/net_ifs.c:176 src/net_ifs.c:185
+#: src/net_ifs.c:295 src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces: обнаружено переполнение"
+
+#: src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "не удаётся открыть сокет"
+
+#: src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "аргумент для -C должен быть числом, которое больше или равно 3"
+
+#: src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "аргумент для -D должен быть в диапазоне от 1 до 9 включительно"
+
+#: src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "неизвестный пользователь: %s"
+
+#: src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "параметры «-i» и «-s» являются взаимоисключающими"
+
+#: src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "параметры «-i» и «-E» являются взаимоисключающими"
+
+#: src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "параметр «-E» не действует в режиме редактирования"
+
+#: src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "переменные окружения нельзя определять в режиме редактирования"
+
+#: src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "параметр «-U» можно использовать только с параметром «-l»"
+
+#: src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "параметры «-A» и «-S» являются взаимоисключающими"
+
+#: src/parse_args.c:429 src/sudo.c:435 src/sudo.c:455 src/sudo.c:463
+#: src/sudo.c:473 common/alloc.c:85 common/alloc.c:105 common/alloc.c:123
+#: common/alloc.c:145 common/alloc.c:203 common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "не удаётся выделить память"
+
+#: src/parse_args.c:442
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "sudoedit не поддерживается на этой платформе"
+
+#: src/parse_args.c:513
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "Можно указать только параметры -e, -h, -i, -K, -l, -s, -v или -V"
+
+#: src/parse_args.c:526
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s — редактирование файлов от имени другого пользователя\n"
+"\n"
+
+#: src/parse_args.c:528
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s — выполнение команд от имени другого пользователя\n"
+"\n"
+
+#: src/parse_args.c:533
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Параметры:\n"
+
+#: src/parse_args.c:536
+msgid "use helper program for password prompting\n"
+msgstr "использовать вспомогательную программу для ввода пароля\n"
+
+#: src/parse_args.c:539
+msgid "use specified BSD authentication type\n"
+msgstr "использовать указанный тип проверки подлинности BSD\n"
+
+#: src/parse_args.c:541
+msgid "run command in the background\n"
+msgstr "выполнить команду в фоновом режиме\n"
+
+#: src/parse_args.c:543
+msgid "close all file descriptors >= fd\n"
+msgstr "закрыть все дескрипторы файлов >= fd\n"
+
+#: src/parse_args.c:546
+msgid "run command with specified login class\n"
+msgstr "выполнить команду с указанным классом входа в систему\n"
+
+#: src/parse_args.c:549
+msgid "preserve user environment when executing command\n"
+msgstr "сохранить пользовательскую среду при выполнении команды\n"
+
+#: src/parse_args.c:551
+msgid "edit files instead of running a command\n"
+msgstr "редактировать файлы вместо выполнения команды\n"
+
+#: src/parse_args.c:553
+msgid "execute command as the specified group\n"
+msgstr "выполнить команду от имени указанной группы\n"
+
+#: src/parse_args.c:555
+msgid "set HOME variable to target user's home dir.\n"
+msgstr "установить для переменной HOME домашний каталог указанного пользователя\n"
+
+#: src/parse_args.c:557
+msgid "display help message and exit\n"
+msgstr "показать справку и выйти\n"
+
+#: src/parse_args.c:559
+msgid "run a login shell as target user\n"
+msgstr "запустить оболочку входа в систему от имени указанного пользователя\n"
+
+#: src/parse_args.c:561
+msgid "remove timestamp file completely\n"
+msgstr "полностью удалить файл timestamp\n"
+
+#: src/parse_args.c:563
+msgid "invalidate timestamp file\n"
+msgstr "объявить недействительным файл timestamp\n"
+
+#: src/parse_args.c:565
+msgid "list user's available commands\n"
+msgstr "вывести список команд, доступных пользователю\n"
+
+#: src/parse_args.c:567
+msgid "non-interactive mode, will not prompt user\n"
+msgstr "автономный режим без не вывода запросов пользователю\n"
+
+#: src/parse_args.c:569
+msgid "preserve group vector instead of setting to target's\n"
+msgstr "сохранить вектор группы вместо установки целевой группы\n"
+
+#: src/parse_args.c:571
+msgid "use specified password prompt\n"
+msgstr "использовать указанный запрос пароля\n"
+
+#: src/parse_args.c:574 src/parse_args.c:582
+msgid "create SELinux security context with specified role\n"
+msgstr "создать контекст безопасности SELinux с указанной ролью\n"
+
+#: src/parse_args.c:577
+msgid "read password from standard input\n"
+msgstr "читать пароль из стандартного ввода\n"
+
+#: src/parse_args.c:579
+msgid "run a shell as target user\n"
+msgstr "запустить оболочку от имени указанного пользователя\n"
+
+#: src/parse_args.c:585
+msgid "when listing, list specified user's privileges\n"
+msgstr "при выводе списка показать привилегии пользователя\n"
+
+#: src/parse_args.c:587
+msgid "run command (or edit file) as specified user\n"
+msgstr "выполнить команду (или редактировать файл) от имени указанного пользователя\n"
+
+#: src/parse_args.c:589
+msgid "display version information and exit\n"
+msgstr "показать сведения о версии и выйти\n"
+
+#: src/parse_args.c:591
+msgid "update user's timestamp without running a command\n"
+msgstr "обновить временную метку пользователя без выполнения команды\n"
+
+#: src/parse_args.c:593
+msgid "stop processing command line arguments\n"
+msgstr "прекратить обработку аргументов командной строки\n"
+
+#: src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr "не удаётся открыть систему аудита"
+
+#: src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr "не удаётся отправить сообщение аудита"
+
+#: src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "не удаётся выполнить fgetfilecon %s"
+
+#: src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr "изменено меток: %s"
+
+#: src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr "не удаётся восстановить контекст для %s"
+
+#: src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr "не удаётся открыть %s, tty без возможности переименования"
+
+#: src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr "не удаётся получить контекст текущего tty, tty без возможности переименования"
+
+#: src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr "не удаётся получить контекст tty, tty без возможности переименования"
+
+#: src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr "не удаётся установить новый контекст tty"
+
+#: src/selinux.c:194 src/selinux.c:207 src/sudo.c:323
+#, c-format
+msgid "unable to open %s"
+msgstr "не удаётся открыть %s"
+
+#: src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr "необходимо указать роль для типа %s"
+
+#: src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr "не удаётся получить тип по умолчанию для роли %s"
+
+#: src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr "не удалось установить новую роль %s"
+
+#: src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr "не удалось установить новый тип %s"
+
+#: src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr "%s не является допустимым контекстом"
+
+#: src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr "не удалось получить old_context"
+
+#: src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr "не удаётся определить принудительный режим"
+
+#: src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr "не удаётся настроить контекст tty для %s"
+
+#: src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr "не удаётся установить для контекста exec значение %s"
+
+#: src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr "не удаётся установить для контекста создания ключа значение %s"
+
+#: src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "укажите не менее одного аргумента"
+
+#: src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "не удаётся выполнить %s"
+
+#: src/sudo.c:191
+#, c-format
+msgid "must be setuid root"
+msgstr "требуется setuid пользователя root"
+
+#: src/sudo.c:209
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "Sudo версия %s\n"
+
+#: src/sudo.c:211
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "Параметры настройки: %s\n"
+
+#: src/sudo.c:216
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "фатальная ошибка, не удалось загрузить модули"
+
+#: src/sudo.c:224
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr "не удаётся инициализировать модуль политики"
+
+#: src/sudo.c:279
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "ошибка инициализации модуля ввода-вывода %s"
+
+#: src/sudo.c:300
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr "неожиданный режим sudo: 0x%x"
+
+#: src/sudo.c:389
+#, c-format
+msgid "unable to get group vector"
+msgstr "не удаётся получить вектор группы"
+
+#: src/sudo.c:431
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr "неизвестный uid %u: кто вы?"
+
+#: src/sudo.c:773
+#, c-format
+msgid "resource control limit has been reached"
+msgstr "достигнут лимит управления ресурсами"
+
+#: src/sudo.c:776
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr "пользователь «%s» не является членом проекта «%s»"
+
+#: src/sudo.c:780
+#, c-format
+msgid "the invoking task is final"
+msgstr "вызывающе задание — последнее"
+
+#: src/sudo.c:783
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "не удалось присоединиться к проекту «%s»"
+
+#: src/sudo.c:788
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr "для проекта «%s» не существует пула ресурсов, принимающих привязки по умолчанию"
+
+#: src/sudo.c:792
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr "у проекта «%s» нет указанного пула ресурсов"
+
+#: src/sudo.c:796
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr "не удаётся подключиться к пулу ресурсов по умолчанию проекта «%s»"
+
+#: src/sudo.c:802
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "setproject завершилась с ошибкой для проекта «%s»"
+
+#: src/sudo.c:804
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr "предупреждение: назначение контроля за ресурсами завершилось с ошибкой для проекта «%s»"
+
+#: src/sudo.c:832
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr "не удаётся удалить PRIV_PROC_EXEC из PRIV_LIMIT"
+
+#: src/sudo.c:938
+#, c-format
+msgid "unknown login class %s"
+msgstr "неизвестный класс входа %s"
+
+#: src/sudo.c:945 src/sudo.c:948
+#, c-format
+msgid "unable to set user context"
+msgstr "не удаётся назначить контекст пользователя"
+
+#: src/sudo.c:959
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr "не удаётся назначить эффективный gid на runas gid %u"
+
+#: src/sudo.c:964
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr "не удаётся назначить gid на runas gid %u"
+
+#: src/sudo.c:971
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr "не удаётся назначить дополнительные идентификаторы групп"
+
+#: src/sudo.c:979
+#, c-format
+msgid "unable to set process priority"
+msgstr "не удаётся назначить приоритет процесса"
+
+#: src/sudo.c:987
+#, c-format
+msgid "unable to change root to %s"
+msgstr "не удаётся изменить root на %s"
+
+#: src/sudo.c:997 src/sudo.c:1003 src/sudo.c:1009
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr "не удаётся изменить на runas uid (%u, %u)"
+
+#: src/sudo.c:1023
+#, c-format
+msgid "unable to change directory to %s"
+msgstr "не удаётся сменить каталог на %s"
+
+#: src/sudo.c:1090
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr "неожиданное условие завершения потомка: %d"
+
+#: src/sudo.c:1130
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr "модуль политики %s не поддерживает списка прав"
+
+#: src/sudo.c:1141
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr "модуль политики %s не поддерживает параметр -v"
+
+#: src/sudo.c:1152
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr "модуль политики %s не поддерживает параметры -k/-K"
+
+#: src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "Не удалось изменить uid на root (%u)"
+
+#: src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr "ошибка модуля: отсутствует список файлов для sudoedit"
+
+#: src/sudo_edit.c:172 src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s: не обычный файл"
+
+#: src/sudo_edit.c:206 src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr "%s: неполная запись"
+
+#: src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr "%s осталось неизменным"
+
+#: src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "%s не изменено"
+
+#: src/sudo_edit.c:306 src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "не удаётся записать в %s"
+
+#: src/sudo_edit.c:307 src/sudo_edit.c:325 src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr "содержимое сеанса редактирования сохранено в %s"
+
+#: src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "не удаётся прочесть временный файл"
+
+#: src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "нет tty и не указана программа askpass"
+
+#: src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "не указана программа askpass, попробуйте задать значение в SUDO_ASKPASS"
+
+#: src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "не удаётся назначить gid  равным %u"
+
+#: src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "не удаётся назначить uid  равным %u"
+
+#: src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "не удаётся выполнить %s"
+
+#: src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "не удаётся сохранить стандартный ввод"
+
+#: src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "не удаётся выполнить dup2 для стандартного ввода"
+
+#: src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "не удаётся восстановить стандартный ввод"
+
+#: common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "не удаётся открыть userdb"
+
+#: common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "не удаётся переключиться на реестр «%s» для %s"
+
+#: common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "не удаётся восстановить реестр"
+
+#: common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "внутренняя ошибка, попытка выполнить emalloc(0)"
+
+#: common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "внутренняя ошибка, попытка выполнить emalloc2(0)"
+
+#: common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "внутренняя ошибка, переполнение emalloc2()"
+
+#: common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "внутренняя ошибка, попытка выполнить erealloc(0)"
+
+#: common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "внутренняя ошибка, попытка выполнить erealloc3(0)"
+
+#: common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "внутренняя ошибка, переполнение erealloc3()"
+
+#: compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "Неизвестный сигнал"
diff --git a/src/po/sudo.pot b/src/po/sudo.pot
new file mode 100644 (file)
index 0000000..b2ef767
--- /dev/null
@@ -0,0 +1,735 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-08-05 13:34-0400\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"
+
+#: src/error.c:82 src/error.c:86
+msgid ": "
+msgstr ""
+
+#: src/exec.c:125 src/exec_pty.c:573 src/exec_pty.c:880 src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr ""
+
+#: src/exec.c:246
+#, c-format
+msgid "unable to create sockets"
+msgstr ""
+
+#: src/exec.c:253 src/exec_pty.c:526 src/exec_pty.c:534 src/exec_pty.c:541
+#: src/exec_pty.c:826 src/exec_pty.c:877 src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr ""
+
+#: src/exec.c:319 src/exec_pty.c:944 src/exec_pty.c:1077
+#, c-format
+msgid "select failed"
+msgstr ""
+
+#: src/exec.c:387
+#, c-format
+msgid "unable to restore tty label"
+msgstr ""
+
+#: src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr ""
+
+#: src/exec_pty.c:566
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr ""
+
+#: src/exec_pty.c:858
+#, c-format
+msgid "unable to set controlling tty"
+msgstr ""
+
+#: src/exec_pty.c:952
+#, c-format
+msgid "error reading from signal pipe"
+msgstr ""
+
+#: src/exec_pty.c:971
+#, c-format
+msgid "error reading from pipe"
+msgstr ""
+
+#: src/exec_pty.c:987
+#, c-format
+msgid "error reading from socketpair"
+msgstr ""
+
+#: src/exec_pty.c:991
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr ""
+
+#: src/load_plugins.c:158
+#, c-format
+msgid "%s: %s"
+msgstr ""
+
+#: src/load_plugins.c:164
+#, c-format
+msgid "%s%s: %s"
+msgstr ""
+
+#: src/load_plugins.c:174
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr ""
+
+#: src/load_plugins.c:178
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr ""
+
+#: src/load_plugins.c:185
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr ""
+
+#: src/load_plugins.c:190
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr ""
+
+#: src/load_plugins.c:196
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr ""
+
+#: src/load_plugins.c:200
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr ""
+
+#: src/load_plugins.c:207
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr ""
+
+#: src/load_plugins.c:225
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr ""
+
+#: src/load_plugins.c:230
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr ""
+
+#: src/net_ifs.c:155 src/net_ifs.c:164 src/net_ifs.c:176 src/net_ifs.c:185
+#: src/net_ifs.c:295 src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr ""
+
+#: src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr ""
+
+#: src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr ""
+
+#: src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr ""
+
+#: src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr ""
+
+#: src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr ""
+
+#: src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr ""
+
+#: src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr ""
+
+#: src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr ""
+
+#: src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr ""
+
+#: src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr ""
+
+#: src/parse_args.c:429 src/sudo.c:435 src/sudo.c:455 src/sudo.c:463
+#: src/sudo.c:473 common/alloc.c:85 common/alloc.c:105 common/alloc.c:123
+#: common/alloc.c:145 common/alloc.c:203 common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr ""
+
+#: src/parse_args.c:442
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr ""
+
+#: src/parse_args.c:513
+#, c-format
+msgid ""
+"Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr ""
+
+#: src/parse_args.c:526
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+
+#: src/parse_args.c:528
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+
+#: src/parse_args.c:533
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: src/parse_args.c:536
+msgid "use helper program for password prompting\n"
+msgstr ""
+
+#: src/parse_args.c:539
+msgid "use specified BSD authentication type\n"
+msgstr ""
+
+#: src/parse_args.c:541
+msgid "run command in the background\n"
+msgstr ""
+
+#: src/parse_args.c:543
+msgid "close all file descriptors >= fd\n"
+msgstr ""
+
+#: src/parse_args.c:546
+msgid "run command with specified login class\n"
+msgstr ""
+
+#: src/parse_args.c:549
+msgid "preserve user environment when executing command\n"
+msgstr ""
+
+#: src/parse_args.c:551
+msgid "edit files instead of running a command\n"
+msgstr ""
+
+#: src/parse_args.c:553
+msgid "execute command as the specified group\n"
+msgstr ""
+
+#: src/parse_args.c:555
+msgid "set HOME variable to target user's home dir.\n"
+msgstr ""
+
+#: src/parse_args.c:557
+msgid "display help message and exit\n"
+msgstr ""
+
+#: src/parse_args.c:559
+msgid "run a login shell as target user\n"
+msgstr ""
+
+#: src/parse_args.c:561
+msgid "remove timestamp file completely\n"
+msgstr ""
+
+#: src/parse_args.c:563
+msgid "invalidate timestamp file\n"
+msgstr ""
+
+#: src/parse_args.c:565
+msgid "list user's available commands\n"
+msgstr ""
+
+#: src/parse_args.c:567
+msgid "non-interactive mode, will not prompt user\n"
+msgstr ""
+
+#: src/parse_args.c:569
+msgid "preserve group vector instead of setting to target's\n"
+msgstr ""
+
+#: src/parse_args.c:571
+msgid "use specified password prompt\n"
+msgstr ""
+
+#: src/parse_args.c:574 src/parse_args.c:582
+msgid "create SELinux security context with specified role\n"
+msgstr ""
+
+#: src/parse_args.c:577
+msgid "read password from standard input\n"
+msgstr ""
+
+#: src/parse_args.c:579
+msgid "run a shell as target user\n"
+msgstr ""
+
+#: src/parse_args.c:585
+msgid "when listing, list specified user's privileges\n"
+msgstr ""
+
+#: src/parse_args.c:587
+msgid "run command (or edit file) as specified user\n"
+msgstr ""
+
+#: src/parse_args.c:589
+msgid "display version information and exit\n"
+msgstr ""
+
+#: src/parse_args.c:591
+msgid "update user's timestamp without running a command\n"
+msgstr ""
+
+#: src/parse_args.c:593
+msgid "stop processing command line arguments\n"
+msgstr ""
+
+#: src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr ""
+
+#: src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr ""
+
+#: src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr ""
+
+#: src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr ""
+
+#: src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr ""
+
+#: src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr ""
+
+#: src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr ""
+
+#: src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr ""
+
+#: src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr ""
+
+#: src/selinux.c:194 src/selinux.c:207 src/sudo.c:323
+#, c-format
+msgid "unable to open %s"
+msgstr ""
+
+#: src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr ""
+
+#: src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr ""
+
+#: src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr ""
+
+#: src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr ""
+
+#: src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr ""
+
+#: src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr ""
+
+#: src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr ""
+
+#: src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr ""
+
+#: src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr ""
+
+#: src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr ""
+
+#: src/sesh.c:48
+msgid "requires at least one argument"
+msgstr ""
+
+#: src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr ""
+
+#: src/sudo.c:191
+#, c-format
+msgid "must be setuid root"
+msgstr ""
+
+#: src/sudo.c:209
+#, c-format
+msgid "Sudo version %s\n"
+msgstr ""
+
+#: src/sudo.c:211
+#, c-format
+msgid "Configure options: %s\n"
+msgstr ""
+
+#: src/sudo.c:216
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr ""
+
+#: src/sudo.c:224
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr ""
+
+#: src/sudo.c:279
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr ""
+
+#: src/sudo.c:300
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr ""
+
+#: src/sudo.c:389
+#, c-format
+msgid "unable to get group vector"
+msgstr ""
+
+#: src/sudo.c:431
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr ""
+
+#: src/sudo.c:773
+#, c-format
+msgid "resource control limit has been reached"
+msgstr ""
+
+#: src/sudo.c:776
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr ""
+
+#: src/sudo.c:780
+#, c-format
+msgid "the invoking task is final"
+msgstr ""
+
+#: src/sudo.c:783
+#, c-format
+msgid "could not join project \"%s\""
+msgstr ""
+
+#: src/sudo.c:788
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:792
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:796
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:802
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:804
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr ""
+
+#: src/sudo.c:832
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr ""
+
+#: src/sudo.c:938
+#, c-format
+msgid "unknown login class %s"
+msgstr ""
+
+#: src/sudo.c:945 src/sudo.c:948
+#, c-format
+msgid "unable to set user context"
+msgstr ""
+
+#: src/sudo.c:959
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr ""
+
+#: src/sudo.c:964
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr ""
+
+#: src/sudo.c:971
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr ""
+
+#: src/sudo.c:979
+#, c-format
+msgid "unable to set process priority"
+msgstr ""
+
+#: src/sudo.c:987
+#, c-format
+msgid "unable to change root to %s"
+msgstr ""
+
+#: src/sudo.c:997 src/sudo.c:1003 src/sudo.c:1009
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr ""
+
+#: src/sudo.c:1023
+#, c-format
+msgid "unable to change directory to %s"
+msgstr ""
+
+#: src/sudo.c:1090
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr ""
+
+#: src/sudo.c:1130
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr ""
+
+#: src/sudo.c:1141
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr ""
+
+#: src/sudo.c:1152
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr ""
+
+#: src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr ""
+
+#: src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr ""
+
+#: src/sudo_edit.c:172 src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr ""
+
+#: src/sudo_edit.c:206 src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr ""
+
+#: src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr ""
+
+#: src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr ""
+
+#: src/sudo_edit.c:306 src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr ""
+
+#: src/sudo_edit.c:307 src/sudo_edit.c:325 src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr ""
+
+#: src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr ""
+
+#: src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr ""
+
+#: src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr ""
+
+#: src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr ""
+
+#: src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr ""
+
+#: src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr ""
+
+#: src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr ""
+
+#: src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr ""
+
+#: src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr ""
+
+#: common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr ""
+
+#: common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr ""
+
+#: common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr ""
+
+#: common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr ""
+
+#: common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr ""
+
+#: common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr ""
+
+#: common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr ""
+
+#: common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr ""
+
+#: common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr ""
+
+#: compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr ""
diff --git a/src/po/uk.mo b/src/po/uk.mo
new file mode 100644 (file)
index 0000000..e2d0047
Binary files /dev/null and b/src/po/uk.mo differ
diff --git a/src/po/uk.po b/src/po/uk.po
new file mode 100644 (file)
index 0000000..1fd3a15
--- /dev/null
@@ -0,0 +1,752 @@
+# Ukrainian translation for sudo.
+# This file is put in the public domain.
+#
+# Yuri Chornoivan <yurchor@ukr.net>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo 1.8.2-rc1\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-05-20 15:33-0400\n"
+"PO-Revision-Date: 2011-05-25 20:07+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: \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"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../../trunk/src/error.c:82 ../../trunk/src/error.c:86
+msgid ": "
+msgstr ": "
+
+#: ../../trunk/src/exec.c:125 ../../trunk/src/exec_pty.c:569
+#: ../../trunk/src/exec_pty.c:876 ../../trunk/src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "не вдалося створити відгалуження"
+
+#: ../../trunk/src/exec.c:247
+#, c-format
+msgid "unable to create sockets"
+msgstr "не вдалося створити сокети"
+
+#: ../../trunk/src/exec.c:254 ../../trunk/src/exec_pty.c:522
+#: ../../trunk/src/exec_pty.c:530 ../../trunk/src/exec_pty.c:537
+#: ../../trunk/src/exec_pty.c:822 ../../trunk/src/exec_pty.c:873
+#: ../../trunk/src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "не вдалося створити канал"
+
+#: ../../trunk/src/exec.c:320 ../../trunk/src/exec_pty.c:940
+#: ../../trunk/src/exec_pty.c:1073
+#, c-format
+msgid "select failed"
+msgstr "спроба виконати select зазнала невдачі"
+
+#: ../../trunk/src/exec.c:388
+#, c-format
+msgid "unable to restore tty label"
+msgstr "не вдалося відновити позначку tty"
+
+#: ../../trunk/src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr "не вдалося розмістити pty"
+
+#: ../../trunk/src/exec_pty.c:562
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr "не вдалося перевести термінал у режим без обробки"
+
+#: ../../trunk/src/exec_pty.c:854
+#, c-format
+msgid "unable to set controlling tty"
+msgstr "не вдалося встановити tty для керування"
+
+#: ../../trunk/src/exec_pty.c:948
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "помилка під час спроби читання з каналу сигналів"
+
+#: ../../trunk/src/exec_pty.c:967
+#, c-format
+msgid "error reading from pipe"
+msgstr "помилка під час спроби читання з каналу"
+
+#: ../../trunk/src/exec_pty.c:983
+#, c-format
+msgid "error reading from socketpair"
+msgstr "помилка під час спроби читання з пари сокетів"
+
+#: ../../trunk/src/exec_pty.c:987
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "неочікуваний тип відповіді на зворотному каналі: %d"
+
+#: ../../trunk/src/load_plugins.c:154
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: ../../trunk/src/load_plugins.c:160
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s: %s"
+
+#: ../../trunk/src/load_plugins.c:170
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s має належати користувачеві з uid %d"
+
+#: ../../trunk/src/load_plugins.c:174
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "%s має бути доступним до запису лише для власника"
+
+#: ../../trunk/src/load_plugins.c:181
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "не вдалося виконати dlopen для %s: %s"
+
+#: ../../trunk/src/load_plugins.c:186
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s: не вдалося знайти символ %s"
+
+#: ../../trunk/src/load_plugins.c:192
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s: невідомий тип правил %d"
+
+#: ../../trunk/src/load_plugins.c:196
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr "%s: несумісна основна версія правил %d, мало бути — %d"
+
+#: ../../trunk/src/load_plugins.c:203
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr "%s: можна завантажувати лише єдиний додаток правил"
+
+#: ../../trunk/src/load_plugins.c:221
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr "%s: мало бути вказано принаймні один додаток правил"
+
+#: ../../trunk/src/load_plugins.c:226
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr "до додатка правил %s не включено метод check_policy"
+
+#: ../../trunk/src/net_ifs.c:155 ../../trunk/src/net_ifs.c:164
+#: ../../trunk/src/net_ifs.c:176 ../../trunk/src/net_ifs.c:185
+#: ../../trunk/src/net_ifs.c:295 ../../trunk/src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces: виявлено переповнення"
+
+#: ../../trunk/src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "не вдалося відкрити сокет"
+
+#: ../../trunk/src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "аргументом параметра -C mмає бути число не менше за 3"
+
+#: ../../trunk/src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "аргументом параметра -D має бути число з діапазону від 1 до 9, включно"
+
+#: ../../trunk/src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "невідомий користувач: %s"
+
+#: ../../trunk/src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "не можна одночасно вказувати параметри «-i» і «-s»"
+
+#: ../../trunk/src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "не можна одночасно вказувати параметри «-i» і «-E»"
+
+#: ../../trunk/src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "не можна використовувати «-E» у режимі редагування"
+
+#: ../../trunk/src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "не можна вказувати змінні середовища у режимі редагування"
+
+#: ../../trunk/src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "параметр «-U» можна використовувати лише разом з параметром «-l»"
+
+#: ../../trunk/src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "параметри «-A» і «-S» не можна використовувати одночасно"
+
+#: ../../trunk/src/parse_args.c:418 ../../trunk/src/sudo.c:398
+#: ../../trunk/src/sudo.c:418 ../../trunk/src/sudo.c:426
+#: ../../trunk/src/sudo.c:436 ../../trunk/common/alloc.c:85
+#: ../../trunk/common/alloc.c:105 ../../trunk/common/alloc.c:123
+#: ../../trunk/common/alloc.c:145 ../../trunk/common/alloc.c:203
+#: ../../trunk/common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "не вдалося отримати потрібний об’єм пам’яті"
+
+#: ../../trunk/src/parse_args.c:431
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "підтримки sudoedit для цієї платформи не передбачено"
+
+#: ../../trunk/src/parse_args.c:502
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "Можна використовувати лише такі параметри: -e, -h, -i, -K, -l, -s, -v та -V"
+
+#: ../../trunk/src/parse_args.c:515
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s — редагувати файли від імені іншого користувача\n"
+"\n"
+
+#: ../../trunk/src/parse_args.c:517
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s — виконати команду від імені іншого користувача\n"
+"\n"
+
+#: ../../trunk/src/parse_args.c:522
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Параметри:\n"
+
+#: ../../trunk/src/parse_args.c:525
+msgid "use helper program for password prompting\n"
+msgstr "використовувати допоміжну програму для запитів щодо пароля\n"
+
+#: ../../trunk/src/parse_args.c:528
+msgid "use specified BSD authentication type\n"
+msgstr "використовувати вказаний тип розпізнавання BSD\n"
+
+#: ../../trunk/src/parse_args.c:530
+msgid "run command in the background\n"
+msgstr "виконати команду у фоновому режимі\n"
+
+#: ../../trunk/src/parse_args.c:532
+msgid "close all file descriptors >= fd\n"
+msgstr "закрити всі дескриптори файлів >= fd\n"
+
+#: ../../trunk/src/parse_args.c:535
+msgid "run command with specified login class\n"
+msgstr "виконати команду з вказаним класом доступу\n"
+
+#: ../../trunk/src/parse_args.c:538
+msgid "preserve user environment when executing command\n"
+msgstr "зберегти середовище користувача на час виконання команди\n"
+
+#: ../../trunk/src/parse_args.c:540
+msgid "edit files instead of running a command\n"
+msgstr "редагувати файли замість виконання команди\n"
+
+#: ../../trunk/src/parse_args.c:542
+msgid "execute command as the specified group\n"
+msgstr "виконати команду від імені вказаної групи користувачів\n"
+
+#: ../../trunk/src/parse_args.c:544
+msgid "set HOME variable to target user's home dir.\n"
+msgstr "встановити для змінної HOME значення домашнього каталогу вказаного користувача.\n"
+
+#: ../../trunk/src/parse_args.c:546
+msgid "display help message and exit\n"
+msgstr "показати довідкове повідомлення і завершити роботу\n"
+
+#: ../../trunk/src/parse_args.c:548
+msgid "run a login shell as target user\n"
+msgstr "запустити оболонку для входу до системи від імені вказаного користувача\n"
+
+#: ../../trunk/src/parse_args.c:550
+msgid "remove timestamp file completely\n"
+msgstr "повністю вилучити файл часового штампу\n"
+
+#: ../../trunk/src/parse_args.c:552
+msgid "invalidate timestamp file\n"
+msgstr "позбавити чинності файл часового штампу\n"
+
+#: ../../trunk/src/parse_args.c:554
+msgid "list user's available commands\n"
+msgstr "показати список доступних користувачеві команд\n"
+
+#: ../../trunk/src/parse_args.c:556
+msgid "non-interactive mode, will not prompt user\n"
+msgstr "неінтерактивний режим, не просити користувача відповідати на питання\n"
+
+#: ../../trunk/src/parse_args.c:558
+msgid "preserve group vector instead of setting to target's\n"
+msgstr "зберегти вектор групи, не встановлювати вектор вказаного користувача\n"
+
+#: ../../trunk/src/parse_args.c:560
+msgid "use specified password prompt\n"
+msgstr "використовувати вказаний інструмент отримання паролів\n"
+
+#: ../../trunk/src/parse_args.c:563 ../../trunk/src/parse_args.c:571
+msgid "create SELinux security context with specified role\n"
+msgstr "створити контекст захисту SELinux з вказаною роллю\n"
+
+#: ../../trunk/src/parse_args.c:566
+msgid "read password from standard input\n"
+msgstr "прочитати пароль зі стандартного джерела вхідних даних\n"
+
+#: ../../trunk/src/parse_args.c:568
+msgid "run a shell as target user\n"
+msgstr "запустити командну оболонку від імені вказаного користувача\n"
+
+#: ../../trunk/src/parse_args.c:574
+msgid "when listing, list specified user's privileges\n"
+msgstr "у списку показати права доступу вказаного користувача\n"
+
+#: ../../trunk/src/parse_args.c:576
+msgid "run command (or edit file) as specified user\n"
+msgstr "виконати команду (або редагувати файл) від імені вказаного користувача\n"
+
+#: ../../trunk/src/parse_args.c:578
+msgid "display version information and exit\n"
+msgstr "показати дані щодо версії і завершити роботу\n"
+
+#: ../../trunk/src/parse_args.c:580
+msgid "update user's timestamp without running a command\n"
+msgstr "оновити штамп часу користувача без виконання команди\n"
+
+#: ../../trunk/src/parse_args.c:582
+msgid "stop processing command line arguments\n"
+msgstr "зупинити обробку аргументів командного рядка\n"
+
+#: ../../trunk/src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr "не вдалося відкрити систему аудита"
+
+#: ../../trunk/src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr "не вдалося надіслати повідомлення аудита"
+
+#: ../../trunk/src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "не вдалося виконати fgetfilecon %s"
+
+#: ../../trunk/src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr "%s змінено позначки"
+
+#: ../../trunk/src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr "не вдалося відновити контекст %s"
+
+#: ../../trunk/src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr "не вдалося відкрити %s, не змінюємо позначки tty"
+
+#: ../../trunk/src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr "не вдалося отримати поточний контекст tty, не змінюємо позначки tty"
+
+#: ../../trunk/src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr "не вдалося отримати новий контекст tty, не змінюємо позначки tty"
+
+#: ../../trunk/src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr "не вдалося встановити новий контекст tty"
+
+#: ../../trunk/src/selinux.c:194 ../../trunk/src/selinux.c:207
+#: ../../trunk/src/sudo.c:330
+#, c-format
+msgid "unable to open %s"
+msgstr "не вдалося відкрити %s"
+
+#: ../../trunk/src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr "вам слід вказати роль для типу %s"
+
+#: ../../trunk/src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr "не вдалося отримати типовий тип для ролі %s"
+
+#: ../../trunk/src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr "не вдалося встановити нову роль %s"
+
+#: ../../trunk/src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr "не вдалося встановити новий тип %s"
+
+#: ../../trunk/src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr "%s не є коректним контекстом"
+
+#: ../../trunk/src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr "не вдалося отримати old_context"
+
+#: ../../trunk/src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr "не вдалося визначити режим примушення."
+
+#: ../../trunk/src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr "не вдалося налаштувати контекст tty для %s"
+
+#: ../../trunk/src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr "не вдалося встановити контекст виконання у значення %s"
+
+#: ../../trunk/src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr "не вдалося встановити контекст ключа створення у значення %s"
+
+#: ../../trunk/src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "потребує принаймні одного аргументу"
+
+#: ../../trunk/src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "не вдалося виконати %s"
+
+#: ../../trunk/src/sudo.c:192
+#, c-format
+msgid "must be setuid root"
+msgstr "має виконуватися з setuid root"
+
+#: ../../trunk/src/sudo.c:210
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "Версія sudo %s\n"
+
+#: ../../trunk/src/sudo.c:212
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "Параметри налаштування: %s\n"
+
+#: ../../trunk/src/sudo.c:217
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "критична помилка, не вдалося завантажити додатки"
+
+#: ../../trunk/src/sudo.c:225
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr "не вдалося ініціалізувати додаток правил"
+
+#: ../../trunk/src/sudo.c:280
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "помилка під час спроби ініціалізації додатка введення/виведення даних %s"
+
+#: ../../trunk/src/sudo.c:307
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr "неочікуваний режим sudo 0x%x"
+
+#: ../../trunk/src/sudo.c:356
+#, c-format
+msgid "unable to get group vector"
+msgstr "не вдалося отримати вектор групи"
+
+#: ../../trunk/src/sudo.c:394
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr "невідомий uid %u: хто ви такий?"
+
+#: ../../trunk/src/sudo.c:734
+#, c-format
+msgid "resource control limit has been reached"
+msgstr "перевищено обмеження керування ресурсами"
+
+#: ../../trunk/src/sudo.c:737
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr "користувач «%s» не є учасником проекту «%s»"
+
+#: ../../trunk/src/sudo.c:741
+#, c-format
+msgid "the invoking task is final"
+msgstr "викликане завдання є завершальним"
+
+#: ../../trunk/src/sudo.c:744
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "не вдалося приєднатися до проекту «%s»"
+
+#: ../../trunk/src/sudo.c:749
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr "для проекту «%s» не існує сховища ресурсів, яке приймає типові прив’язки"
+
+#: ../../trunk/src/sudo.c:753
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr "у проекті «%s» не існує вказаного сховища ресурсів"
+
+#: ../../trunk/src/sudo.c:757
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr "не вдалося виконати прив’язку до типового сховища ресурсів проекту «%s»"
+
+#: ../../trunk/src/sudo.c:763
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "помилка під час виконання setproject для проекту «%s»"
+
+#: ../../trunk/src/sudo.c:765
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr "попередження, помилка призначення керування ресурсами проекту «%s»"
+
+#: ../../trunk/src/sudo.c:791
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr "не вдалося вилучити PRIV_PROC_EXEC з PRIV_LIMIT"
+
+#: ../../trunk/src/sudo.c:895
+#, c-format
+msgid "unknown login class %s"
+msgstr "невідомий клас входу %s"
+
+#: ../../trunk/src/sudo.c:902 ../../trunk/src/sudo.c:905
+#, c-format
+msgid "unable to set user context"
+msgstr "не вдалося встановити контекст користувача"
+
+#: ../../trunk/src/sudo.c:916
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr "не вдалося встановити ефективний ідентифікатор групи для ідентифікатора групи запуску %u"
+
+#: ../../trunk/src/sudo.c:921
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr "не вдалося встановити ідентифікатор групи для ідентифікатора групи запуску %u"
+
+#: ../../trunk/src/sudo.c:929 ../../trunk/src/sudo.c:935
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr "не вдалося встановити ідентифікатори додаткових груп"
+
+#: ../../trunk/src/sudo.c:943
+#, c-format
+msgid "unable to set process priority"
+msgstr "не вдалося встановити пріоритет процесу"
+
+#: ../../trunk/src/sudo.c:951
+#, c-format
+msgid "unable to change root to %s"
+msgstr "не вдалося змінити root на %s"
+
+#: ../../trunk/src/sudo.c:961 ../../trunk/src/sudo.c:967
+#: ../../trunk/src/sudo.c:973
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr "не вдалося змінити uid користувача, від імені якого відбувається виконання (%u, %u)"
+
+#: ../../trunk/src/sudo.c:987
+#, c-format
+msgid "unable to change directory to %s"
+msgstr "не вдалося змінити каталог на %s"
+
+#: ../../trunk/src/sudo.c:1078
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr "неочікувана умова переривання дочірнього процесу: %d"
+
+#: ../../trunk/src/sudo.c:1118
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr "у додатку правил %s не передбачено підтримки побудови списку прав доступу"
+
+#: ../../trunk/src/sudo.c:1129
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr "у додатку правил %s не передбачено підтримки параметра -v"
+
+#: ../../trunk/src/sudo.c:1140
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr "у додатку правил %s не передбачено підтримки параметрів -k/-K"
+
+#: ../../trunk/src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "не вдалося змінити значення uid на значення root (%u)"
+
+#: ../../trunk/src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr "помилка додатка: не вистачає списку файлів для sudoedit"
+
+#: ../../trunk/src/sudo_edit.c:172 ../../trunk/src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s: не є звичайним файлом"
+
+#: ../../trunk/src/sudo_edit.c:206 ../../trunk/src/sudo_edit.c:316
+#, c-format
+msgid "%s: short write"
+msgstr "%s: короткий запис"
+
+#: ../../trunk/src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr "%s залишено без змін"
+
+#: ../../trunk/src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "%s не змінено"
+
+#: ../../trunk/src/sudo_edit.c:306 ../../trunk/src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "не вдалося виконати запис до %s"
+
+#: ../../trunk/src/sudo_edit.c:307 ../../trunk/src/sudo_edit.c:325
+#: ../../trunk/src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr "дані сеансу редагування залишилися у %s"
+
+#: ../../trunk/src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "не вдалося виконати читання з файла тимчасових даних"
+
+#: ../../trunk/src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "не виявлено tty і не вказано програми askpass"
+
+#: ../../trunk/src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "не вказано програми askpass, спробуйте встановити значення змінної SUDO_ASKPASS"
+
+#: ../../trunk/src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "не вдалося встановити gid у значення %u"
+
+#: ../../trunk/src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "не вдалося встановити uid у значення %u"
+
+#: ../../trunk/src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "не вдалося виконати %s"
+
+#: ../../trunk/src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "не вдалося зберегти stdin"
+
+#: ../../trunk/src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "не вдалося виконати dup2 для stdin"
+
+#: ../../trunk/src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "не вдалося відновити stdin"
+
+#: ../../trunk/common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "не вдалося відкрити userdb"
+
+#: ../../trunk/common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "не вдалося перемкнутися на регістр «%s» для %s"
+
+#: ../../trunk/common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "не вдалося відновити регістр"
+
+#: ../../trunk/common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "внутрішня помилка, спроба виконання emalloc(0)"
+
+#: ../../trunk/common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "внутрішня помилка, спроба виконання emalloc2(0)"
+
+#: ../../trunk/common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "внутрішня помилка, переповнення emalloc2()"
+
+#: ../../trunk/common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "внутрішня помилка, спроба виконання erealloc(0)"
+
+#: ../../trunk/common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "внутрішня помилка, спроба виконання erealloc3(0)"
+
+#: ../../trunk/common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "внутрішня помилка, переповнення erealloc3()"
+
+#: ../../trunk/compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "Невідомий сигнал"
diff --git a/src/po/zh_CN.mo b/src/po/zh_CN.mo
new file mode 100644 (file)
index 0000000..0b2efe3
Binary files /dev/null and b/src/po/zh_CN.mo differ
diff --git a/src/po/zh_CN.po b/src/po/zh_CN.po
new file mode 100644 (file)
index 0000000..09f2fc9
--- /dev/null
@@ -0,0 +1,740 @@
+# Chinese simplified translation for sudo.
+# sudo 的简体中文翻译。
+# This file is put in the public domain.
+# Wylmer Wang <wantinghard@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sudo-1.8.2-rc8\n"
+"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n"
+"POT-Creation-Date: 2011-07-27 14:21-0400\n"
+"PO-Revision-Date: 2011-07-28 17:11+0800\n"
+"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/error.c:82 src/error.c:86
+msgid ": "
+msgstr ":"
+
+#: src/exec.c:125 src/exec_pty.c:573 src/exec_pty.c:880 src/tgetpass.c:224
+#, c-format
+msgid "unable to fork"
+msgstr "无法执行 fork"
+
+#: src/exec.c:246
+#, c-format
+msgid "unable to create sockets"
+msgstr "无法创建套接字"
+
+#: src/exec.c:253 src/exec_pty.c:526 src/exec_pty.c:534 src/exec_pty.c:541
+#: src/exec_pty.c:826 src/exec_pty.c:877 src/tgetpass.c:221
+#, c-format
+msgid "unable to create pipe"
+msgstr "无法创建管道"
+
+#: src/exec.c:319 src/exec_pty.c:944 src/exec_pty.c:1077
+#, c-format
+msgid "select failed"
+msgstr "select 失败"
+
+#: src/exec.c:387
+#, c-format
+msgid "unable to restore tty label"
+msgstr "无法恢复终端标签"
+
+#: src/exec_pty.c:136
+#, c-format
+msgid "unable to allocate pty"
+msgstr "无法分配伪终端"
+
+#: src/exec_pty.c:566
+#, c-format
+msgid "unable to set terminal to raw mode"
+msgstr "无法将终端设为原始模式"
+
+#: src/exec_pty.c:858
+#, c-format
+msgid "unable to set controlling tty"
+msgstr "无法设置控制终端"
+
+#: src/exec_pty.c:952
+#, c-format
+msgid "error reading from signal pipe"
+msgstr "从单管道读取出错"
+
+#: src/exec_pty.c:971
+#, c-format
+msgid "error reading from pipe"
+msgstr "从管道读取出错"
+
+#: src/exec_pty.c:987
+#, c-format
+msgid "error reading from socketpair"
+msgstr "从套接字对读取出错"
+
+#: src/exec_pty.c:991
+#, c-format
+msgid "unexpected reply type on backchannel: %d"
+msgstr "联络通道的回应类型异常:%d"
+
+#: src/load_plugins.c:158
+#, c-format
+msgid "%s: %s"
+msgstr "%s:%s"
+
+#: src/load_plugins.c:164
+#, c-format
+msgid "%s%s: %s"
+msgstr "%s%s:%s"
+
+#: src/load_plugins.c:174
+#, c-format
+msgid "%s must be owned by uid %d"
+msgstr "%s 必须属于用户 ID %d(的用户)"
+
+#: src/load_plugins.c:178
+#, c-format
+msgid "%s must be only be writable by owner"
+msgstr "%s 必须只对其所有者可写"
+
+#: src/load_plugins.c:185
+#, c-format
+msgid "unable to dlopen %s: %s"
+msgstr "无法 dlopen %s:%s"
+
+#: src/load_plugins.c:190
+#, c-format
+msgid "%s: unable to find symbol %s"
+msgstr "%s:找不到符号 %s"
+
+#: src/load_plugins.c:196
+#, c-format
+msgid "%s: unknown policy type %d"
+msgstr "%s:未知的策略类型 %d"
+
+#: src/load_plugins.c:200
+#, c-format
+msgid "%s: incompatible policy major version %d, expected %d"
+msgstr "%s:不兼容的策略主版本号 %d,应为 %d"
+
+#: src/load_plugins.c:207
+#, c-format
+msgid "%s: only a single policy plugin may be loaded"
+msgstr "%s:只能加载一个策略插件"
+
+#: src/load_plugins.c:225
+#, c-format
+msgid "%s: at least one policy plugin must be specified"
+msgstr "%s:至少要指定一个策略插件"
+
+#: src/load_plugins.c:230
+#, c-format
+msgid "policy plugin %s does not include a check_policy method"
+msgstr "策略插件 %s 不包含 check_policy 方法"
+
+#: src/net_ifs.c:155 src/net_ifs.c:164 src/net_ifs.c:176 src/net_ifs.c:185
+#: src/net_ifs.c:295 src/net_ifs.c:319
+#, c-format
+msgid "load_interfaces: overflow detected"
+msgstr "load_interfaces:检测到溢出"
+
+#: src/net_ifs.c:224
+#, c-format
+msgid "unable to open socket"
+msgstr "无法打开套接字"
+
+#: src/parse_args.c:180
+#, c-format
+msgid "the argument to -C must be a number greater than or equal to 3"
+msgstr "-C 选项的参数必须是一个大于等于 3 的数字"
+
+#: src/parse_args.c:192
+#, c-format
+msgid "the argument to -D must be between 1 and 9 inclusive"
+msgstr "-D 选项的参数必须介于 1 到 9(含 1 和 9)"
+
+#: src/parse_args.c:273
+#, c-format
+msgid "unknown user: %s"
+msgstr "未知用户:%s"
+
+#: src/parse_args.c:332
+#, c-format
+msgid "you may not specify both the `-i' and `-s' options"
+msgstr "您不能同时指定“-i”和“-s”选项"
+
+#: src/parse_args.c:336
+#, c-format
+msgid "you may not specify both the `-i' and `-E' options"
+msgstr "您不能同时指定“-i”和“-E”选项"
+
+#: src/parse_args.c:346
+#, c-format
+msgid "the `-E' option is not valid in edit mode"
+msgstr "“-E”选项在编辑模式中无效"
+
+#: src/parse_args.c:348
+#, c-format
+msgid "you may not specify environment variables in edit mode"
+msgstr "在编辑模式中您不能指定环境变量"
+
+#: src/parse_args.c:356
+#, c-format
+msgid "the `-U' option may only be used with the `-l' option"
+msgstr "“-U”选项只能与“-l”选项一起使用"
+
+#: src/parse_args.c:360
+#, c-format
+msgid "the `-A' and `-S' options may not be used together"
+msgstr "“-A”和“-S”选项不可同时使用"
+
+#: src/parse_args.c:418 src/sudo.c:442 src/sudo.c:462 src/sudo.c:470
+#: src/sudo.c:480 common/alloc.c:85 common/alloc.c:105 common/alloc.c:123
+#: common/alloc.c:145 common/alloc.c:203 common/alloc.c:217
+#, c-format
+msgid "unable to allocate memory"
+msgstr "无法分配内存"
+
+#: src/parse_args.c:431
+#, c-format
+msgid "sudoedit is not supported on this platform"
+msgstr "此平台不支持 sudoedit"
+
+#: src/parse_args.c:502
+#, c-format
+msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified"
+msgstr "只能指定 -e、-h、-i、-K、-l、-s、-v 或 -V 选项中的一个"
+
+#: src/parse_args.c:515
+#, c-format
+msgid ""
+"%s - edit files as another user\n"
+"\n"
+msgstr ""
+"%s - 以其他用户身份编辑文件\n"
+"\n"
+
+#: src/parse_args.c:517
+#, c-format
+msgid ""
+"%s - execute a command as another user\n"
+"\n"
+msgstr ""
+"%s - 以其他用户身份执行一条命令\n"
+"\n"
+
+#: src/parse_args.c:522
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"选项:\n"
+
+#: src/parse_args.c:525
+msgid "use helper program for password prompting\n"
+msgstr "使用助手程序进行密码提示\n"
+
+#: src/parse_args.c:528
+msgid "use specified BSD authentication type\n"
+msgstr "使用指定的 BSD 认证类型\n"
+
+#: src/parse_args.c:530
+msgid "run command in the background\n"
+msgstr "在后台运行命令\n"
+
+#: src/parse_args.c:532
+msgid "close all file descriptors >= fd\n"
+msgstr "关闭所有 >= fd 的文件描述符\n"
+
+#: src/parse_args.c:535
+msgid "run command with specified login class\n"
+msgstr "以指定的登录类别运行命令\n"
+
+#: src/parse_args.c:538
+msgid "preserve user environment when executing command\n"
+msgstr "在执行命令时保留用户环境\n"
+
+#: src/parse_args.c:540
+msgid "edit files instead of running a command\n"
+msgstr "编辑文件而非执行命令\n"
+
+#: src/parse_args.c:542
+msgid "execute command as the specified group\n"
+msgstr "以指定的用户组执行命令\n"
+
+#: src/parse_args.c:544
+msgid "set HOME variable to target user's home dir.\n"
+msgstr "将 HOME 变量设为目标用户的主目录。\n"
+
+#: src/parse_args.c:546
+msgid "display help message and exit\n"
+msgstr "显示帮助消息并退出\n"
+
+#: src/parse_args.c:548
+msgid "run a login shell as target user\n"
+msgstr "以目标用户身份运行一个登录 shell\n"
+
+#: src/parse_args.c:550
+msgid "remove timestamp file completely\n"
+msgstr "完全移除时间戳文件\n"
+
+#: src/parse_args.c:552
+msgid "invalidate timestamp file\n"
+msgstr "无效的时间戳文件\n"
+
+#: src/parse_args.c:554
+msgid "list user's available commands\n"
+msgstr "列出用户能执行的命令\n"
+
+#: src/parse_args.c:556
+msgid "non-interactive mode, will not prompt user\n"
+msgstr "非交互模式,将不提示用户\n"
+
+#: src/parse_args.c:558
+msgid "preserve group vector instead of setting to target's\n"
+msgstr "保留组向量,而非设置为目标的组向量\n"
+
+#: src/parse_args.c:560
+msgid "use specified password prompt\n"
+msgstr "使用指定的密码提示\n"
+
+#: src/parse_args.c:563 src/parse_args.c:571
+msgid "create SELinux security context with specified role\n"
+msgstr "以指定的角色创建 SELinux 安全环境\n"
+
+#: src/parse_args.c:566
+msgid "read password from standard input\n"
+msgstr "从标准输入读取密码\n"
+
+#: src/parse_args.c:568
+msgid "run a shell as target user\n"
+msgstr "以目标用户身份运行 shell\n"
+
+#: src/parse_args.c:574
+msgid "when listing, list specified user's privileges\n"
+msgstr "在列表时,列出指定用户的权限\n"
+
+#: src/parse_args.c:576
+msgid "run command (or edit file) as specified user\n"
+msgstr "以指定用户身份运行命令(或编辑文件)\n"
+
+#: src/parse_args.c:578
+msgid "display version information and exit\n"
+msgstr "显示版本信息并退出\n"
+
+#: src/parse_args.c:580
+msgid "update user's timestamp without running a command\n"
+msgstr "更新用户的时间戳而不执行命令\n"
+
+#: src/parse_args.c:582
+msgid "stop processing command line arguments\n"
+msgstr "停止处理命令行参数\n"
+
+#: src/selinux.c:75
+#, c-format
+msgid "unable to open audit system"
+msgstr "无法打开审查系统"
+
+#: src/selinux.c:85
+#, c-format
+msgid "unable to send audit message"
+msgstr "无法发送审查消息"
+
+#: src/selinux.c:112
+#, c-format
+msgid "unable to fgetfilecon %s"
+msgstr "无法 fgetfilecon %s"
+
+#: src/selinux.c:117
+#, c-format
+msgid "%s changed labels"
+msgstr "%s 修改了标签"
+
+#: src/selinux.c:122
+#, c-format
+msgid "unable to restore context for %s"
+msgstr "无法恢复 %s 的环境"
+
+#: src/selinux.c:161
+#, c-format
+msgid "unable to open %s, not relabeling tty"
+msgstr "无法打开 %s,将不重新标记终端"
+
+#: src/selinux.c:170
+#, c-format
+msgid "unable to get current tty context, not relabeling tty"
+msgstr "无法获取当前终端的环境,将不重新标记终端"
+
+#: src/selinux.c:177
+#, c-format
+msgid "unable to get new tty context, not relabeling tty"
+msgstr "无法获取新终端的环境,将不重新标记终端"
+
+#: src/selinux.c:184
+#, c-format
+msgid "unable to set new tty context"
+msgstr "无法设置新终端的环境"
+
+#: src/selinux.c:194 src/selinux.c:207 src/sudo.c:330
+#, c-format
+msgid "unable to open %s"
+msgstr "打不开 %s"
+
+#: src/selinux.c:249
+#, c-format
+msgid "you must specify a role for type %s"
+msgstr "您必须为 %s 类型指定一个角色"
+
+#: src/selinux.c:255
+#, c-format
+msgid "unable to get default type for role %s"
+msgstr "无法获取 %s 角色的默认类型"
+
+#: src/selinux.c:273
+#, c-format
+msgid "failed to set new role %s"
+msgstr "设置新角色 %s 失败"
+
+#: src/selinux.c:277
+#, c-format
+msgid "failed to set new type %s"
+msgstr "设置新类型 %s 失败"
+
+#: src/selinux.c:286
+#, c-format
+msgid "%s is not a valid context"
+msgstr "%s 不是有效的环境"
+
+#: src/selinux.c:320
+#, c-format
+msgid "failed to get old_context"
+msgstr "无法获取 old_context"
+
+#: src/selinux.c:326
+#, c-format
+msgid "unable to determine enforcing mode."
+msgstr "无法确定强制模式。"
+
+#: src/selinux.c:338
+#, c-format
+msgid "unable to setup tty context for %s"
+msgstr "无法设置 %s 的终端环境"
+
+#: src/selinux.c:367
+#, c-format
+msgid "unable to set exec context to %s"
+msgstr "无法向 %s 设置 exec 环境"
+
+#: src/selinux.c:374
+#, c-format
+msgid "unable to set key creation context to %s"
+msgstr "无法向 %s 设置键创建环境"
+
+#: src/sesh.c:48
+msgid "requires at least one argument"
+msgstr "要求至少有一个参数"
+
+#: src/sesh.c:64
+#, c-format
+msgid "unable to execute %s"
+msgstr "无法执行 %s"
+
+#: src/sudo.c:192
+#, c-format
+msgid "must be setuid root"
+msgstr "必须为 setuid root"
+
+#: src/sudo.c:210
+#, c-format
+msgid "Sudo version %s\n"
+msgstr "Sudo 版本 %s\n"
+
+#: src/sudo.c:212
+#, c-format
+msgid "Configure options: %s\n"
+msgstr "当前选项:%s\n"
+
+#: src/sudo.c:217
+#, c-format
+msgid "fatal error, unable to load plugins"
+msgstr "致命错误,无法加载插件"
+
+#: src/sudo.c:225
+#, c-format
+msgid "unable to initialize policy plugin"
+msgstr "无法初始化策略插件"
+
+#: src/sudo.c:280
+#, c-format
+msgid "error initializing I/O plugin %s"
+msgstr "初始化 I/O 插件 %s 出错"
+
+#: src/sudo.c:307
+#, c-format
+msgid "unexpected sudo mode 0x%x"
+msgstr "异常的 sudo 模式 0x%x"
+
+#: src/sudo.c:396
+#, c-format
+msgid "unable to get group vector"
+msgstr "无法获取组向量"
+
+#: src/sudo.c:438
+#, c-format
+msgid "unknown uid %u: who are you?"
+msgstr "未知的用户 ID %u:您是?"
+
+#: src/sudo.c:780
+#, c-format
+msgid "resource control limit has been reached"
+msgstr "达到了资源控制限制"
+
+#: src/sudo.c:783
+#, c-format
+msgid "user \"%s\" is not a member of project \"%s\""
+msgstr "用户“%s”不是项目“%s”的成员"
+
+#: src/sudo.c:787
+#, fuzzy, c-format
+msgid "the invoking task is final"
+msgstr "调用任务是最终的"
+
+#: src/sudo.c:790
+#, c-format
+msgid "could not join project \"%s\""
+msgstr "无法加入项目“%s”"
+
+#: src/sudo.c:795
+#, c-format
+msgid "no resource pool accepting default bindings exists for project \"%s\""
+msgstr "不存在对应于项目“%s”的、接受默认绑定的资源池"
+
+#: src/sudo.c:799
+#, c-format
+msgid "specified resource pool does not exist for project \"%s\""
+msgstr "指定的对应于项目“%s”的资源池不存在"
+
+#: src/sudo.c:803
+#, c-format
+msgid "could not bind to default resource pool for project \"%s\""
+msgstr "无法为项目“%s”绑定到默认的资源池"
+
+#: src/sudo.c:809
+#, c-format
+msgid "setproject failed for project \"%s\""
+msgstr "对项目“%s”执行 setproject 失败"
+
+#: src/sudo.c:811
+#, c-format
+msgid "warning, resource control assignment failed for project \"%s\""
+msgstr "警告,对项目“%s”的资源控制分配失败"
+
+#: src/sudo.c:839
+#, c-format
+msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"
+msgstr "无法从 PRIV_LIMIT 中移除 PRIV_PROC_EXEC"
+
+#: src/sudo.c:945
+#, c-format
+msgid "unknown login class %s"
+msgstr "未知的登录类别 %s"
+
+#: src/sudo.c:952 src/sudo.c:955
+#, c-format
+msgid "unable to set user context"
+msgstr "无法设置用户环境"
+
+#: src/sudo.c:966
+#, c-format
+msgid "unable to set effective gid to runas gid %u"
+msgstr "无法设置有效组 ID 来以组 ID %u 运行"
+
+#: src/sudo.c:971
+#, c-format
+msgid "unable to set gid to runas gid %u"
+msgstr "无法设置组 ID 来以组 ID %u 运行"
+
+#: src/sudo.c:978
+#, c-format
+msgid "unable to set supplementary group IDs"
+msgstr "无法设置补充组 ID"
+
+#: src/sudo.c:986
+#, c-format
+msgid "unable to set process priority"
+msgstr "无法设置进程优先级"
+
+#: src/sudo.c:994
+#, c-format
+msgid "unable to change root to %s"
+msgstr "无法从 root 切换到 %s"
+
+#: src/sudo.c:1004 src/sudo.c:1010 src/sudo.c:1016
+#, c-format
+msgid "unable to change to runas uid (%u, %u)"
+msgstr "无法切换到以用户 ID(%u,%u)运行"
+
+#: src/sudo.c:1030
+#, c-format
+msgid "unable to change directory to %s"
+msgstr "无法将目录切换到 %s"
+
+#: src/sudo.c:1121
+#, c-format
+msgid "unexpected child termination condition: %d"
+msgstr "异常的子进程终止条件:%d"
+
+#: src/sudo.c:1161
+#, c-format
+msgid "policy plugin %s does not support listing privileges"
+msgstr "策略插件 %s 不支持列出权限"
+
+#: src/sudo.c:1172
+#, c-format
+msgid "policy plugin %s does not support the -v option"
+msgstr "策略插件 %s不支持 -v 选项"
+
+#: src/sudo.c:1183
+#, c-format
+msgid "policy plugin %s does not support the -k/-K options"
+msgstr "策略插件 %s 不支持 -k/-K 选项"
+
+#: src/sudo_edit.c:108
+#, c-format
+msgid "unable to change uid to root (%u)"
+msgstr "无法将用户 ID 切换到 root(%u)"
+
+#: src/sudo_edit.c:140
+#, c-format
+msgid "plugin error: missing file list for sudoedit"
+msgstr "插件错误:缺少 sudoedit 的文件列表"
+
+#: src/sudo_edit.c:172 src/sudo_edit.c:280
+#, c-format
+msgid "%s: not a regular file"
+msgstr "%s:不是常规文件"
+
+#: src/sudo_edit.c:206 src/sudo_edit.c:316
+#, fuzzy, c-format
+msgid "%s: short write"
+msgstr "%s:短写入"
+
+#: src/sudo_edit.c:281
+#, c-format
+msgid "%s left unmodified"
+msgstr "%s 并未修改"
+
+#: src/sudo_edit.c:294
+#, c-format
+msgid "%s unchanged"
+msgstr "%s 已更改"
+
+#: src/sudo_edit.c:306 src/sudo_edit.c:327
+#, c-format
+msgid "unable to write to %s"
+msgstr "无法写入 %s"
+
+#: src/sudo_edit.c:307 src/sudo_edit.c:325 src/sudo_edit.c:328
+#, c-format
+msgid "contents of edit session left in %s"
+msgstr "编辑会话的内容留在了 %s 中"
+
+#: src/sudo_edit.c:324
+#, c-format
+msgid "unable to read temporary file"
+msgstr "无法读取临时文件"
+
+#: src/tgetpass.c:95
+#, c-format
+msgid "no tty present and no askpass program specified"
+msgstr "没有终端存在,且未指定 askpass 程序"
+
+#: src/tgetpass.c:104
+#, c-format
+msgid "no askpass program specified, try setting SUDO_ASKPASS"
+msgstr "没有指定 askpass 程序,尝试设置 SUDO_ASKPASS"
+
+#: src/tgetpass.c:234
+#, c-format
+msgid "unable to set gid to %u"
+msgstr "无法将组 ID 设为 %u"
+
+#: src/tgetpass.c:238
+#, c-format
+msgid "unable to set uid to %u"
+msgstr "无法将用户 ID 设为 %u"
+
+#: src/tgetpass.c:243
+#, c-format
+msgid "unable to run %s"
+msgstr "无法执行 %s"
+
+#: src/utmp.c:263
+#, c-format
+msgid "unable to save stdin"
+msgstr "无法保存 stdin"
+
+#: src/utmp.c:265
+#, c-format
+msgid "unable to dup2 stdin"
+msgstr "无法 dup2 stdin"
+
+#: src/utmp.c:268
+#, c-format
+msgid "unable to restore stdin"
+msgstr "无法恢复 stdin"
+
+#: common/aix.c:144
+#, c-format
+msgid "unable to open userdb"
+msgstr "无法打开 userdb"
+
+#: common/aix.c:147
+#, c-format
+msgid "unable to switch to registry \"%s\" for %s"
+msgstr "无法为 %2$s 切换到注册表“%1$s”"
+
+#: common/aix.c:161
+#, c-format
+msgid "unable to restore registry"
+msgstr "无法恢复注册表"
+
+#: common/alloc.c:82
+#, c-format
+msgid "internal error, tried to emalloc(0)"
+msgstr "内部错误,试图 emalloc(0)"
+
+#: common/alloc.c:99
+#, c-format
+msgid "internal error, tried to emalloc2(0)"
+msgstr "内部错误,试图 emalloc2(0)"
+
+#: common/alloc.c:101
+#, c-format
+msgid "internal error, emalloc2() overflow"
+msgstr "内部错误,emalloc2() 溢出"
+
+#: common/alloc.c:119
+#, c-format
+msgid "internal error, tried to erealloc(0)"
+msgstr "内部错误,试图 erealloc(0)"
+
+#: common/alloc.c:138
+#, c-format
+msgid "internal error, tried to erealloc3(0)"
+msgstr "内部错误,试图 erealloc3(0)"
+
+#: common/alloc.c:140
+#, c-format
+msgid "internal error, erealloc3() overflow"
+msgstr "内部错误,erealloc3() 错误"
+
+#: compat/strsignal.c:47
+msgid "Unknown signal"
+msgstr "未知信号"
index 9e77f0b4a5f46de142a5c3a9cf93ef190e25a5e0..cb0bdde18402d5f7185554ee0d464fb37d74cc00 100644 (file)
@@ -27,5 +27,5 @@ struct sudo_preload_table {
 } sudo_preload_table[] = {
     { "sudoers_policy", (void *) &sudoers_policy},
     { "sudoers_io", (void *) &sudoers_io},
-    { NULL, NULL }
+    { (const char *)0, (void *)0 }
 };
index b5c3dc8421a40f70d1d160542aed34fd183b2311..dc519731a48c91a33437d1cfb8c1ae32cfb5f958 100644 (file)
@@ -72,7 +72,7 @@ audit_role_change(const security_context_t old_context,
         /* Kernel may not have audit support. */
         if (errno != EINVAL && errno != EPROTONOSUPPORT && errno != EAFNOSUPPORT
 )
-            error(1, "unable to open audit system");
+            error(1, _("unable to open audit system"));
        return -1;
     }
 
@@ -82,7 +82,7 @@ audit_role_change(const security_context_t old_context,
     rc = audit_log_user_message(au_fd, AUDIT_USER_ROLE_CHANGE,
        message, NULL, NULL, ttyn, 1);
     if (rc <= 0)
-       warning("unable to send audit message");
+       warning(_("unable to send audit message"));
 
     efree(message);
     close(au_fd);
@@ -109,17 +109,17 @@ selinux_restore_tty(void)
 
     /* Verify that the tty still has the context set by sudo. */
     if ((retval = fgetfilecon(se_state.ttyfd, &chk_tty_context)) < 0) {
-       warning("unable to fgetfilecon %s", se_state.ttyn);
+       warning(_("unable to fgetfilecon %s"), se_state.ttyn);
        goto skip_relabel;
     }
 
     if ((retval = strcmp(chk_tty_context, se_state.new_tty_context))) {
-       warningx("%s changed labels.", se_state.ttyn);
+       warningx(_("%s changed labels"), se_state.ttyn);
        goto skip_relabel;
     }
 
     if ((retval = fsetfilecon(se_state.ttyfd, se_state.tty_context)) < 0)
-       warning("unable to restore context for %s", se_state.ttyn);
+       warning(_("unable to restore context for %s"), se_state.ttyn);
 
 skip_relabel:
     if (se_state.ttyfd != -1) {
@@ -158,7 +158,7 @@ relabel_tty(const char *ttyn, int ptyfd)
     if (ptyfd == -1) {
        se_state.ttyfd = open(ttyn, O_RDWR|O_NONBLOCK);
        if (se_state.ttyfd == -1) {
-           warning("unable to open %s, not relabeling tty", ttyn);
+           warning(_("unable to open %s, not relabeling tty"), ttyn);
            if (se_state.enforcing)
                goto bad;
        }
@@ -167,21 +167,21 @@ relabel_tty(const char *ttyn, int ptyfd)
     }
 
     if (fgetfilecon(se_state.ttyfd, &tty_con) < 0) {
-       warning("unable to get current tty context, not relabeling tty");
+       warning(_("unable to get current tty context, not relabeling tty"));
        if (se_state.enforcing)
            goto bad;
     }
 
     if (tty_con && (security_compute_relabel(se_state.new_context, tty_con,
        SECCLASS_CHR_FILE, &new_tty_con) < 0)) {
-       warning("unable to get new tty context, not relabeling tty");
+       warning(_("unable to get new tty context, not relabeling tty"));
        if (se_state.enforcing)
            goto bad;
     }
 
     if (new_tty_con != NULL) {
        if (fsetfilecon(se_state.ttyfd, new_tty_con) < 0) {
-           warning("unable to set new tty context");
+           warning(_("unable to set new tty context"));
            if (se_state.enforcing)
                goto bad;
        }
@@ -191,7 +191,7 @@ relabel_tty(const char *ttyn, int ptyfd)
        /* Reopen pty that was relabeled, std{in,out,err} are reset later. */
        se_state.ttyfd = open(ttyn, O_RDWR|O_NOCTTY, 0);
        if (se_state.ttyfd == -1) {
-           warning("cannot open %s", ttyn);
+           warning(_("unable to open %s"), ttyn);
            if (se_state.enforcing)
                goto bad;
        }
@@ -204,7 +204,7 @@ relabel_tty(const char *ttyn, int ptyfd)
        close(se_state.ttyfd);
        se_state.ttyfd = open(ttyn, O_RDWR|O_NONBLOCK);
        if (se_state.ttyfd == -1) {
-           warning("unable to open %s", ttyn);
+           warning(_("unable to open %s"), ttyn);
            goto bad;
        }
        (void)fcntl(se_state.ttyfd, F_SETFL,
@@ -246,13 +246,13 @@ get_exec_context(security_context_t old_context, const char *role, const char *t
     
     /* We must have a role, the type is optional (we can use the default). */
     if (!role) {
-       warningx("you must specify a role for type %s", type);
+       warningx(_("you must specify a role for type %s"), type);
        errno = EINVAL;
        return NULL;
     }
     if (!type) {
        if (get_default_type(role, &typebuf)) {
-           warningx("unable to get default type for role %s", role);
+           warningx(_("unable to get default type for role %s"), role);
            errno = EINVAL;
            return NULL;
        }
@@ -270,11 +270,11 @@ get_exec_context(security_context_t old_context, const char *role, const char *t
      * type we will be running the command as.
      */
     if (context_role_set(context, role)) {
-       warning("failed to set new role %s", role);
+       warning(_("failed to set new role %s"), role);
        goto bad;
     }
     if (context_type_set(context, type)) {
-       warning("failed to set new type %s", type);
+       warning(_("failed to set new type %s"), type);
        goto bad;
     }
       
@@ -283,7 +283,7 @@ get_exec_context(security_context_t old_context, const char *role, const char *t
      */
     new_context = estrdup(context_str(context));
     if (security_check_context(new_context) < 0) {
-       warningx("%s is not a valid context", new_context);
+       warningx(_("%s is not a valid context"), new_context);
        errno = EINVAL;
        goto bad;
     }
@@ -317,13 +317,13 @@ selinux_setup(const char *role, const char *type, const char *ttyn,
 
     /* Store the caller's SID in old_context. */
     if (getprevcon(&se_state.old_context)) {
-       warning("failed to get old_context");
+       warning(_("failed to get old_context"));
        goto done;
     }
 
     se_state.enforcing = security_getenforce();
     if (se_state.enforcing < 0) {
-       warning("unable to determine enforcing mode.");
+       warning(_("unable to determine enforcing mode."));
        goto done;
     }
 
@@ -335,7 +335,7 @@ selinux_setup(const char *role, const char *type, const char *ttyn,
        goto done;
     
     if (relabel_tty(ttyn, ptyfd) < 0) {
-       warning("unable to setup tty context for %s", se_state.new_context);
+       warning(_("unable to setup tty context for %s"), se_state.new_context);
        goto done;
     }
 
@@ -364,14 +364,14 @@ selinux_execve(const char *path, char *argv[], char *envp[])
     int argc, serrno;
 
     if (setexeccon(se_state.new_context)) {
-       warning("unable to set exec context to %s", se_state.new_context);
+       warning(_("unable to set exec context to %s"), se_state.new_context);
        if (se_state.enforcing)
            return;
     }
 
 #ifdef HAVE_SETKEYCREATECON
     if (setkeycreatecon(se_state.new_context)) {
-       warning("unable to set key creation context to %s", se_state.new_context);
+       warning(_("unable to set key creation context to %s"), se_state.new_context);
        if (se_state.enforcing)
            return;
     }
index e0aef78f8e1d8a11e79fb3f7f4ed3e0bdaca49f4..f6818ce60181e2762c6d84ee216ee46508424678 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#ifdef HAVE_SETLOCALE
+# include <locale.h>
+#endif
 
 #include "missing.h"
+#include "gettext.h"
 
 int
 main (int argc, char *argv[])
 {
     char *cp, *cmnd;
 
+#ifdef HAVE_SETLOCALE 
+    setlocale(LC_ALL, "");
+#endif
+    bindtextdomain(PACKAGE_NAME, LOCALEDIR);
+    textdomain(PACKAGE_NAME);
+
     if (argc < 2)
-       errx(EXIT_FAILURE, "requires at least one argument");
+       errx(EXIT_FAILURE, _("requires at least one argument"));
 
     /* Shift argv and make a copy of the command to execute. */
     argv++;
@@ -51,6 +61,6 @@ main (int argc, char *argv[])
        *cp = '-';
     }
     execv(cmnd, argv);
-    warn("unable to execute %s", argv[0]);
+    warn(_("unable to execute %s"), argv[0]);
     _exit(EXIT_FAILURE);
 }
index 1f9b5653a178e99137b356b5bf306513836fecba..658d23eeaa588897431fc4596a38c94d5ceb23a0 100644 (file)
@@ -121,7 +121,6 @@ static int iolog_open(struct plugin_container *plugin, char * const settings[],
     int argc, char * const argv[], char * const user_env[]);
 static void iolog_close(struct plugin_container *plugin, int exit_status,
     int error);
-static char *escape_cmnd(const char *src);
 
 /* Policy plugin convenience functions. */
 static int policy_open(struct plugin_container *plugin, char * const settings[],
@@ -169,15 +168,17 @@ main(int argc, char *argv[], char *envp[])
     malloc_options = "AFGJPR";
 #endif
 
-#ifdef HAVE_SETLOCALE
-    setlocale(LC_ALL, "");
-#endif
-
 #if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME)
     if (argc > 0)
        setprogname(argv[0]);
 #endif
 
+#ifdef HAVE_SETLOCALE
+    setlocale(LC_ALL, "");
+#endif
+    bindtextdomain(PACKAGE_NAME, LOCALEDIR);
+    textdomain(PACKAGE_NAME);
+
     /* Must be done before we do any password lookups */
 #if defined(HAVE_GETPRPWNAM) && defined(HAVE_SET_AUTH_PARAMETERS)
     (void) set_auth_parameters(argc, argv);
@@ -187,7 +188,7 @@ main(int argc, char *argv[], char *envp[])
 #endif /* HAVE_GETPRPWNAM && HAVE_SET_AUTH_PARAMETERS */
 
     if (geteuid() != 0)
-       errorx(1, "must be setuid root");
+       errorx(1, _("must be setuid root"));
 
     /* Reset signal mask, disable core dumps and make sure fds 0-2 are open. */
     (void) sigemptyset(&mask);
@@ -205,14 +206,14 @@ main(int argc, char *argv[], char *envp[])
 
     /* Print sudo version early, in case of plugin init failure. */
     if (ISSET(sudo_mode, MODE_VERSION)) {
-       printf("Sudo version %s\n", PACKAGE_VERSION);
+       printf(_("Sudo version %s\n"), PACKAGE_VERSION);
        if (user_details.uid == ROOT_UID)
-           (void) printf("Configure args: %s\n", CONFIGURE_ARGS);
+           (void) printf(_("Configure options: %s\n"), CONFIGURE_ARGS);
     }
 
     /* Read sudo.conf and load plugins. */
     if (!sudo_load_plugins(_PATH_SUDO_CONF, &policy_plugin, &io_plugins))
-       errorx(1, "fatal error, unable to load plugins");
+       errorx(1, _("fatal error, unable to load plugins"));
 
     /* Open policy plugin. */
     ok = policy_open(&policy_plugin, settings, user_info, envp);
@@ -220,7 +221,7 @@ main(int argc, char *argv[], char *envp[])
        if (ok == -2)
            usage(1);
        else
-           errorx(1, "unable to initialize policy plugin");
+           errorx(1, _("unable to initialize policy plugin"));
     }
 
     switch (sudo_mode & MODE_MASK) {
@@ -275,7 +276,8 @@ main(int argc, char *argv[], char *envp[])
                    usage(1);
                    break;
                default:
-                   errorx(1, "error initializing I/O plugin %s", plugin->name);
+                   errorx(1, _("error initializing I/O plugin %s"),
+                       plugin->name);
                }
            }
            command_info_to_details(command_info, &command_details);
@@ -290,18 +292,12 @@ main(int argc, char *argv[], char *envp[])
            if (ISSET(command_details.flags, CD_SUDOEDIT)) {
                exitcode = sudo_edit(&command_details);
            } else {
-               if (ISSET(sudo_mode, MODE_SHELL)) {
-                   /* Escape meta chars if running a shell with args. */
-                   if (argv_out[1] != NULL && strcmp(argv_out[1], "-c") == 0 &&
-                       argv_out[2] != NULL && argv_out[3] == NULL)
-                       argv_out[2] = escape_cmnd(argv_out[2]);
-               }
                exitcode = run_command(&command_details);
            }
            /* The close method was called by sudo_edit/run_command. */
            break;
        default:
-           errorx(1, "unexpected sudo mode 0x%x", sudo_mode);
+           errorx(1, _("unexpected sudo mode 0x%x"), sudo_mode);
     }
     exit(exitcode);
 }
@@ -324,7 +320,7 @@ fix_fds(void)
     miss[STDERR_FILENO] = fcntl(STDERR_FILENO, F_GETFL, 0) == -1;
     if (miss[STDIN_FILENO] || miss[STDOUT_FILENO] || miss[STDERR_FILENO]) {
        if ((devnull = open(_PATH_DEVNULL, O_RDWR, 0644)) == -1)
-           error(1, "unable to open %s", _PATH_DEVNULL);
+           error(1, _("unable to open %s"), _PATH_DEVNULL);
        if (miss[STDIN_FILENO] && dup2(devnull, STDIN_FILENO) == -1)
            error(1, "dup2");
        if (miss[STDOUT_FILENO] && dup2(devnull, STDOUT_FILENO) == -1)
@@ -336,21 +332,66 @@ fix_fds(void)
     }
 }
 
+/*
+ * Allocate space for groups and fill in using getgrouplist()
+ * for when we cannot use getgroups().
+ */
+static int
+fill_group_list(struct user_details *ud)
+{
+    int maxgroups, tries, rval = -1;
+
+#if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX)
+    maxgroups = (int)sysconf(_SC_NGROUPS_MAX);
+    if (maxgroups < 0)
+#endif
+       maxgroups = NGROUPS_MAX;
+
+    /*
+     * It is possible to belong to more groups in the group database
+     * than NGROUPS_MAX.  We start off with NGROUPS_MAX * 2 entries
+     * and double this as needed.
+     */
+    ud->groups = NULL;
+    ud->ngroups = maxgroups;
+    for (tries = 0; tries < 10 && rval == -1; tries++) {
+       ud->ngroups *= 2;
+       efree(ud->groups);
+       ud->groups = emalloc2(ud->ngroups, sizeof(GETGROUPS_T));
+       rval = getgrouplist(ud->username, ud->gid, ud->groups, &ud->ngroups);
+    }
+    return rval;
+}
+
 static char *
 get_user_groups(struct user_details *ud)
 {
-    char *gid_list = NULL;
-#ifdef HAVE_GETGROUPS
+    char *cp, *gid_list = NULL;
     size_t glsize;
-    char *cp;
     int i, len;
 
-    if ((ud->ngroups = getgroups(0, NULL)) <= 0)
-       return NULL;
+    /*
+     * Systems with mbr_check_membership() support more than NGROUPS_MAX
+     * groups so we cannot use getgroups().
+     */
+    ud->groups = NULL;
+#ifndef HAVE_MBR_CHECK_MEMBERSHIP
+    if ((ud->ngroups = getgroups(0, NULL)) > 0) {
+       ud->groups = emalloc2(ud->ngroups, sizeof(GETGROUPS_T));
+       if (getgroups(ud->ngroups, ud->groups) < 0) {
+           efree(ud->groups);
+           ud->groups = NULL;
+       }
+    }
+#endif /* HAVE_MBR_CHECK_MEMBERSHIP */
+    if (ud->groups == NULL) {
+       if (fill_group_list(ud) == -1)
+           error(1, _("unable to get group vector"));
+    }
 
-    ud->groups = emalloc2(ud->ngroups, sizeof(GETGROUPS_T));
-    if (getgroups(ud->ngroups, ud->groups) < 0)
-       error(1, "can't get group vector");
+    /*
+     * Format group list as a comma-separated string of gids.
+     */
     glsize = sizeof("groups=") - 1 + (ud->ngroups * (MAX_UID_T_LEN + 1));
     gid_list = emalloc(glsize);
     memcpy(gid_list, "groups=", sizeof("groups=") - 1);
@@ -361,7 +402,6 @@ get_user_groups(struct user_details *ud)
            i ? "," : "", (unsigned int)ud->groups[i]);
        cp += len;
     }
-#endif
     return gid_list;
 }
 
@@ -388,11 +428,11 @@ get_user_info(struct user_details *ud)
 
     pw = getpwuid(ud->uid);
     if (pw == NULL)
-       errorx(1, "unknown uid %u: who are you?", (unsigned int)ud->uid);
+       errorx(1, _("unknown uid %u: who are you?"), (unsigned int)ud->uid);
 
     user_info[i] = fmt_string("user", pw->pw_name);
     if (user_info[i] == NULL)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     ud->username = user_info[i] + sizeof("user=") - 1;
 
     /* Stash user's shell for use with the -s flag; don't pass to plugin. */
@@ -412,7 +452,7 @@ get_user_info(struct user_details *ud)
     if (getcwd(cwd, sizeof(cwd)) != NULL) {
        user_info[++i] = fmt_string("cwd", cwd);
        if (user_info[i] == NULL)
-           errorx(1, "unable to allocate memory");
+           errorx(1, _("unable to allocate memory"));
        ud->cwd = user_info[i] + sizeof("cwd=") - 1;
     }
 
@@ -420,7 +460,7 @@ get_user_info(struct user_details *ud)
        (cp = ttyname(STDERR_FILENO))) {
        user_info[++i] = fmt_string("tty", cp);
        if (user_info[i] == NULL)
-           errorx(1, "unable to allocate memory");
+           errorx(1, _("unable to allocate memory"));
        ud->tty = user_info[i] + sizeof("tty=") - 1;
     }
 
@@ -430,7 +470,7 @@ get_user_info(struct user_details *ud)
        strlcpy(host, "localhost", sizeof(host));
     user_info[++i] = fmt_string("host", host);
     if (user_info[i] == NULL)
-       errorx(1, "unable to allocate memory");
+       errorx(1, _("unable to allocate memory"));
     ud->host = user_info[i] + sizeof("host=") - 1;
 
     get_ttysize(&ud->ts_lines, &ud->ts_cols);
@@ -509,11 +549,13 @@ command_info_to_details(char * const info[], struct command_details *details)
                        SET(details->flags, CD_NOEXEC);
                    break;
                }
+#ifdef _PATH_SUDO_NOEXEC
                /* XXX - deprecated */
                if (strncmp("noexec_file=", info[i], sizeof("noexec_file=") - 1) == 0) {
                    noexec_path = info[i] + sizeof("noexec_file=") - 1;
                    break;
                }
+#endif /* _PATH_SUDO_NOEXEC */
                break;
            case 'p':
                if (strncmp("preserve_groups=", info[i], sizeof("preserve_groups=") - 1) == 0) {
@@ -728,39 +770,39 @@ set_project(struct passwd *pw)
        case SETPROJ_ERR_TASK:
            switch (errno) {
            case EAGAIN:
-               warningx("resource control limit has been reached");
+               warningx(_("resource control limit has been reached"));
                break;
            case ESRCH:
-               warningx("user \"%s\" is not a member of project \"%s\"",
+               warningx(_("user \"%s\" is not a member of project \"%s\""),
                    pw->pw_name, proj.pj_name);
                break;
            case EACCES:
-               warningx("the invoking task is final");
+               warningx(_("the invoking task is final"));
                break;
            default:
-               warningx("could not join project \"%s\"", proj.pj_name);
+               warningx(_("could not join project \"%s\""), proj.pj_name);
            }
        case SETPROJ_ERR_POOL:
            switch (errno) {
            case EACCES:
-               warningx("no resource pool accepting default bindings "
-                   "exists for project \"%s\"", proj.pj_name);
+               warningx(_("no resource pool accepting default bindings "
+                   "exists for project \"%s\""), proj.pj_name);
                break;
            case ESRCH:
-               warningx("specified resource pool does not exist for "
-                   "project \"%s\"", proj.pj_name);
+               warningx(_("specified resource pool does not exist for "
+                   "project \"%s\""), proj.pj_name);
                break;
            default:
-               warningx("could not bind to default resource pool for "
-                   "project \"%s\"", proj.pj_name);
+               warningx(_("could not bind to default resource pool for "
+                   "project \"%s\""), proj.pj_name);
            }
            break;
        default:
            if (errval <= 0) {
-               warningx("setproject failed for project \"%s\"", proj.pj_name);
+               warningx(_("setproject failed for project \"%s\""), proj.pj_name);
            } else {
-               warningx("warning, resource control assignment failed for "
-                   "project \"%s\"", proj.pj_name);
+               warningx(_("warning, resource control assignment failed for "
+                   "project \"%s\""), proj.pj_name);
            }
        }
     } else {
@@ -778,16 +820,19 @@ set_project(struct passwd *pw)
 static void
 disable_execute(struct command_details *details)
 {
+#ifdef _PATH_SUDO_NOEXEC
     char *cp, **ev, **nenvp;
     int env_len = 0, env_size = 128;
+#endif /* _PATH_SUDO_NOEXEC */
 
 #ifdef HAVE_PRIV_SET
     /* Solaris privileges, remove PRIV_PROC_EXEC post-execve. */
     if (priv_set(PRIV_OFF, PRIV_LIMIT, "PRIV_PROC_EXEC", NULL) == 0)
        return;
-    warning("unable to remove PRIV_PROC_EXEC from PRIV_LIMIT");
+    warning(_("unable to remove PRIV_PROC_EXEC from PRIV_LIMIT"));
 #endif /* HAVE_PRIV_SET */
 
+#ifdef _PATH_SUDO_NOEXEC
     nenvp = emalloc2(env_size, sizeof(char *));
     for (ev = details->envp; *ev != NULL; ev++) {
        if (env_len + 2 > env_size) {
@@ -798,21 +843,21 @@ disable_execute(struct command_details *details)
         * Prune out existing preloaded libraries.
         * XXX - should save and append instead of replacing.
         */
-#if defined(__darwin__) || defined(__APPLE__)
+# if defined(__darwin__) || defined(__APPLE__)
        if (strncmp(*ev, "DYLD_INSERT_LIBRARIES=", sizeof("DYLD_INSERT_LIBRARIES=") - 1) == 0)
            continue;
        if (strncmp(*ev, "DYLD_FORCE_FLAT_NAMESPACE=", sizeof("DYLD_INSERT_LIBRARIES=") - 1) == 0)
            continue;
-#elif defined(__osf__) || defined(__sgi)
+# elif defined(__osf__) || defined(__sgi)
        if (strncmp(*ev, "_RLD_LIST=", sizeof("_RLD_LIST=") - 1) == 0)
            continue;
-#elif defined(_AIX)
+# elif defined(_AIX)
        if (strncmp(*ev, "LDR_PRELOAD=", sizeof("LDR_PRELOAD=") - 1) == 0)
            continue;
-#else
+# else
        if (strncmp(*ev, "LD_PRELOAD=", sizeof("LD_PRELOAD=") - 1) == 0)
            continue;
-#endif
+# endif
        nenvp[env_len++] = *ev;
     }
 
@@ -821,22 +866,23 @@ disable_execute(struct command_details *details)
      * http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html
      * XXX - need to support 32-bit and 64-bit variants
      */
-#if defined(__darwin__) || defined(__APPLE__)
+# if defined(__darwin__) || defined(__APPLE__)
     nenvp[env_len++] = "DYLD_FORCE_FLAT_NAMESPACE=";
     cp = fmt_string("DYLD_INSERT_LIBRARIES", noexec_path);
-#elif defined(__osf__) || defined(__sgi)
+# elif defined(__osf__) || defined(__sgi)
     easprintf(&cp, "_RLD_LIST=%s:DEFAULT", noexec_path);
-#elif defined(_AIX)
+# elif defined(_AIX)
     cp = fmt_string("LDR_PRELOAD", noexec_path);
-#else
+# else
     cp = fmt_string("LD_PRELOAD", noexec_path);
-#endif
+# endif
     if (cp == NULL)
        error(1, NULL);
     nenvp[env_len++] = cp;
     nenvp[env_len] = NULL;
 
     details->envp = nenvp;
+#endif /* _PATH_SUDO_NOEXEC */
 }
 
 /*
@@ -889,17 +935,17 @@ exec_setup(struct command_details *details, const char *ptyname, int ptyfd)
             */
            lc = login_getclass((char *)details->login_class);
            if (!lc) {
-               warningx("unknown login class %s", details->login_class);
+               warningx(_("unknown login class %s"), details->login_class);
                errno = ENOENT;
                goto done;
            }
            flags = LOGIN_SETRESOURCES|LOGIN_SETPRIORITY;
            if (setusercontext(lc, pw, pw->pw_uid, flags)) {
                if (pw->pw_uid != ROOT_UID) {
-                   warning("unable to set user context");
+                   warning(_("unable to set user context"));
                    goto done;
                } else
-                   warning("unable to set user context");
+                   warning(_("unable to set user context"));
            }
        }
 #endif /* HAVE_LOGIN_CAP_H */
@@ -910,34 +956,27 @@ exec_setup(struct command_details *details, const char *ptyname, int ptyfd)
      */
 #ifdef HAVE_SETEUID
     if (ISSET(details->flags, CD_SET_EGID) && setegid(details->egid)) {
-       warning("unable to set egid to runas gid %u", details->egid);
+       warning(_("unable to set effective gid to runas gid %u"), details->egid);
        goto done;
     }
 #endif
     if (ISSET(details->flags, CD_SET_GID) && setgid(details->gid)) {
-       warning("unable to set gid to runas gid %u", details->gid);
+       warning(_("unable to set gid to runas gid %u"), details->gid);
        goto done;
     }
 
     if (!ISSET(details->flags, CD_PRESERVE_GROUPS)) {
-#ifdef HAVE_GETGROUPS
        if (details->ngroups >= 0) {
-           if (setgroups(details->ngroups, details->groups) < 0) {
-               warning("unable to set supplementary group IDs");
+           if (sudo_setgroups(details->ngroups, details->groups) < 0) {
+               warning(_("unable to set supplementary group IDs"));
                goto done;
            }
        }
-#else
-       if (pw && initgroups(pw->pw_name, pw->pw_gid) < 0) {
-           warning("unable to set supplementary group IDs");
-           goto done;
-       }
-#endif
     }
 
     if (ISSET(details->flags, CD_SET_PRIORITY)) {
        if (setpriority(PRIO_PROCESS, 0, details->priority) != 0) {
-           warning("unable to set process priority");
+           warning(_("unable to set process priority"));
            goto done;
        }
     }
@@ -945,7 +984,7 @@ exec_setup(struct command_details *details, const char *ptyname, int ptyfd)
        (void) umask(details->umask);
     if (details->chroot) {
        if (chroot(details->chroot) != 0 || chdir("/") != 0) {
-           warning("unable to change root to %s", details->chroot);
+           warning(_("unable to change root to %s"), details->chroot);
            goto done;
        }
     }
@@ -955,19 +994,19 @@ exec_setup(struct command_details *details, const char *ptyname, int ptyfd)
 
 #ifdef HAVE_SETRESUID
     if (setresuid(details->uid, details->euid, details->euid) != 0) {
-       warning("unable to change to runas uid (%u, %u)", details->uid,
+       warning(_("unable to change to runas uid (%u, %u)"), details->uid,
            details->euid);
        goto done;
     }
 #elif HAVE_SETREUID
     if (setreuid(details->uid, details->euid) != 0) {
-       warning("unable to change to runas uid (%u, %u)", details->uid,
+       warning(_("unable to change to runas uid (%u, %u)"), details->uid,
            details->euid);
        goto done;
     }
 #else
     if (seteuid(details->euid) != 0 || setuid(details->euid) != 0) {
-       warning("unable to change to runas uid (%u, %u)", details->uid,
+       warning(_("unable to change to runas uid (%u, %u)"), details->uid,
            details->euid);
        goto done;
     }
@@ -981,7 +1020,7 @@ exec_setup(struct command_details *details, const char *ptyname, int ptyfd)
        if (details->chroot || strcmp(details->cwd, user_details.cwd) != 0) {
            /* Note: cwd is relative to the new root, if any. */
            if (chdir(details->cwd) != 0) {
-               warning("unable to change directory to %s", details->cwd);
+               warning(_("unable to change directory to %s"), details->cwd);
                goto done;
            }
        }
@@ -1008,30 +1047,6 @@ done:
     return rval;
 }
 
-/*
- * Escape any non-alpha numeric or blank characters to make sure
- * they are not interpreted specially by the shell.
- */
-static char *
-escape_cmnd(const char *src)
-{
-    char *cmnd, *dst;
-
-    /* Worst case scenario, we have to escape everything. */
-    cmnd = dst = emalloc((2 * strlen(src)) + 1);
-    while (*src != '\0') {
-       if (!isalnum((unsigned char)*src) && !isspace((unsigned char)*src) &&
-           *src != '_' && *src != '-') {
-           /* quote potential meta character */
-           *dst++ = '\\';
-       }
-       *dst++ = *src++;
-    }
-    *dst++ = '\0';
-
-    return cmnd;
-}
-
 /*
  * Run the command and wait for it to complete.
  */
@@ -1072,7 +1087,7 @@ run_command(struct command_details *details)
            exitcode = WTERMSIG(cstat.val) | 128;
        break;
     default:
-       warningx("unexpected child termination condition: %d", cstat.type);
+       warningx(_("unexpected child termination condition: %d"), cstat.type);
        break;
     }
     return exitcode;
@@ -1112,7 +1127,7 @@ policy_list(struct plugin_container *plugin, int argc, char * const argv[],
     int verbose, const char *list_user)
 {
     if (plugin->u.policy->list == NULL) {
-       warningx("policy plugin %s does not support listing privileges",
+       warningx(_("policy plugin %s does not support listing privileges"),
            plugin->name);
        return FALSE;
     }
@@ -1123,7 +1138,7 @@ static int
 policy_validate(struct plugin_container *plugin)
 {
     if (plugin->u.policy->validate == NULL) {
-       warningx("policy plugin %s does not support the -v flag",
+       warningx(_("policy plugin %s does not support the -v option"),
            plugin->name);
        return FALSE;
     }
@@ -1134,7 +1149,7 @@ static void
 policy_invalidate(struct plugin_container *plugin, int remove)
 {
     if (plugin->u.policy->invalidate == NULL) {
-       errorx(1, "policy plugin %s does not support the -k/-K flags",
+       errorx(1, _("policy plugin %s does not support the -k/-K options"),
            plugin->name);
     }
     plugin->u.policy->invalidate(remove);
index 46a68f153d076059673c6a0cbe7871d40ef29424..cbf4860d3e2cb4e957541c62068a2f95ba2146e2 100644 (file)
 #define _SUDO_SUDO_H
 
 #include <limits.h>
-
 #include <pathnames.h>
+
 #include "missing.h"
 #include "alloc.h"
 #include "error.h"
 #include "fileops.h"
 #include "list.h"
+#include "gettext.h"
 
 #ifdef __TANDEM
 # define ROOT_UID       65535
@@ -226,6 +227,9 @@ void aix_setauthdb(char *user);
 /* interfaces.c */
 int get_net_ifs(char **addrinfo);
 
+/* setgroups.c */
+int sudo_setgroups(int ngids, const GETGROUPS_T *gids);
+
 #ifndef errno
 extern int errno;
 #endif
index 0be9d31fdfa1b41852427f911041d0a56d888068..0a4d511f80f2f91aa4f7ac251dd0ac9f5793ecf7 100644 (file)
@@ -64,12 +64,12 @@ switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups)
        if (seteuid(ROOT_UID) != 0)
            error(1, "seteuid(ROOT_UID)");
     }
+    if (setegid(egid) != 0)
+       error(1, "setegid(%d)", (int)egid);
     if (ngroups != -1) {
-       if (setgroups(ngroups, groups) != 0)
+       if (sudo_setgroups(ngroups, groups) != 0)
            error(1, "setgroups");
     }
-    if (setegid(egid) != 0)
-       error(1, "setegid(%d)", (int)egid);
     if (euid != ROOT_UID) {
        if (seteuid(euid) != 0)
            error(1, "seteuid(%d)", (int)euid);
@@ -105,7 +105,7 @@ sudo_edit(struct command_details *command_details)
      * We will change the euid as needed below.
      */
     if (setuid(ROOT_UID) != 0) {
-       warning("unable to change to uid to root (%u)", ROOT_UID);
+       warning(_("unable to change uid to root (%u)"), ROOT_UID);
        return 1;
     }
 
@@ -137,7 +137,7 @@ sudo_edit(struct command_details *command_details)
            editor_argc++;
     }
     if (nfiles == 0) {
-       warningx("plugin error: missing file list for sudoedit");
+       warningx(_("plugin error: missing file list for sudoedit"));
        return 1;
     }
 
@@ -169,7 +169,7 @@ sudo_edit(struct command_details *command_details)
            if (rc)
                warning("%s", files[i]);
            else
-               warningx("%s: not a regular file", files[i]);
+               warningx(_("%s: not a regular file"), files[i]);
            if (ofd != -1)
                close(ofd);
            continue;
@@ -203,7 +203,7 @@ sudo_edit(struct command_details *command_details)
                    if (nwritten == -1)
                        warning("%s", tf[j].tfile);
                    else
-                       warningx("%s: short write", tf[j].tfile);
+                       warningx(_("%s: short write"), tf[j].tfile);
                    goto cleanup;
                }
            }
@@ -277,8 +277,8 @@ sudo_edit(struct command_details *command_details)
            if (rc)
                warning("%s", tf[i].tfile);
            else
-               warningx("%s: not a regular file", tf[i].tfile);
-           warningx("%s left unmodified", tf[i].ofile);
+               warningx(_("%s: not a regular file"), tf[i].tfile);
+           warningx(_("%s left unmodified"), tf[i].ofile);
            if (tfd != -1)
                close(tfd);
            continue;
@@ -291,7 +291,7 @@ sudo_edit(struct command_details *command_details)
             */
            timevalsub(&tv1, &tv2);
            if (timevalisset(&tv2)) {
-               warningx("%s unchanged", tf[i].ofile);
+               warningx(_("%s unchanged"), tf[i].ofile);
                unlink(tf[i].tfile);
                close(tfd);
                continue;
@@ -303,8 +303,8 @@ sudo_edit(struct command_details *command_details)
        switch_user(ROOT_UID, user_details.egid,
            user_details.ngroups, user_details.groups);
        if (ofd == -1) {
-           warning("unable to write to %s", tf[i].ofile);
-           warningx("contents of edit session left in %s", tf[i].tfile);
+           warning(_("unable to write to %s"), tf[i].ofile);
+           warningx(_("contents of edit session left in %s"), tf[i].tfile);
            close(tfd);
            continue;
        }
@@ -313,7 +313,7 @@ sudo_edit(struct command_details *command_details)
                if (nwritten == -1)
                    warning("%s", tf[i].ofile);
                else
-                   warningx("%s: short write", tf[i].ofile);
+                   warningx(_("%s: short write"), tf[i].ofile);
                break;
            }
        }
@@ -321,11 +321,11 @@ sudo_edit(struct command_details *command_details)
            /* success, got EOF */
            unlink(tf[i].tfile);
        } else if (nread < 0) {
-           warning("unable to read temporary file");
-           warningx("contents of edit session left in %s", tf[i].tfile);
+           warning(_("unable to read temporary file"));
+           warningx(_("contents of edit session left in %s"), tf[i].tfile);
        } else {
-           warning("unable to write to %s", tf[i].ofile);
-           warningx("contents of edit session left in %s", tf[i].tfile);
+           warning(_("unable to write to %s"), tf[i].ofile);
+           warningx(_("contents of edit session left in %s"), tf[i].tfile);
        }
        close(ofd);
     }
index bbd5652b5b8ebe85a423132c3adf62c5a4056470..f1e9dac34443d170c04012f3242cc66283646d12 100644 (file)
@@ -92,7 +92,7 @@ tgetpass(const char *prompt, int timeout, int flags)
     if (!ISSET(flags, TGP_STDIN|TGP_ECHO|TGP_ASKPASS|TGP_NOECHO_TRY) &&
        !tty_present()) {
        if (askpass == NULL || getenv("DISPLAY") == NULL) {
-           warningx("no tty present and no askpass program specified");
+           warningx(_("no tty present and no askpass program specified"));
            return NULL;
        }
        SET(flags, TGP_ASKPASS);
@@ -101,7 +101,7 @@ tgetpass(const char *prompt, int timeout, int flags)
     /* If using a helper program to get the password, run it instead. */
     if (ISSET(flags, TGP_ASKPASS)) {
        if (askpass == NULL || *askpass == '\0')
-           errorx(1, "no askpass program specified, try setting SUDO_ASKPASS");
+           errorx(1, _("no askpass program specified, try setting SUDO_ASKPASS"));
        return sudo_askpass(askpass, prompt);
     }
 
@@ -218,10 +218,10 @@ sudo_askpass(const char *askpass, const char *prompt)
     pid_t pid;
 
     if (pipe(pfd) == -1)
-       error(1, "unable to create pipe");
+       error(1, _("unable to create pipe"));
 
     if ((pid = fork()) == -1)
-       error(1, "unable to fork");
+       error(1, _("unable to fork"));
 
     if (pid == 0) {
        /* child, point stdout to output side of the pipe and exec askpass */
@@ -231,16 +231,16 @@ sudo_askpass(const char *askpass, const char *prompt)
        }
        (void) setuid(ROOT_UID);
        if (setgid(user_details.gid)) {
-           warning("unable to set gid to %u", (unsigned int)user_details.gid);
+           warning(_("unable to set gid to %u"), (unsigned int)user_details.gid);
            _exit(255);
        }
        if (setuid(user_details.uid)) {
-           warning("unable to set uid to %u", (unsigned int)user_details.uid);
+           warning(_("unable to set uid to %u"), (unsigned int)user_details.uid);
            _exit(255);
        }
        closefrom(STDERR_FILENO + 1);
        execl(askpass, askpass, prompt, (char *)NULL);
-       warning("unable to run %s", askpass);
+       warning(_("unable to run %s"), askpass);
        _exit(255);
     }
 
index dc6d45fe6fb166d3f4aecc2154b246992f2e1bac..befbaf6f2cbddac893e615779a3ae74d4f38c396 100644 (file)
@@ -260,12 +260,12 @@ utmp_slot(const char *line, int ttyfd)
      * doesn't take an argument.
      */
     if ((sfd = dup(STDIN_FILENO)) == -1)
-       error(1, "Can't save stdin");
+       error(1, _("unable to save stdin"));
     if (dup2(ttyfd, STDIN_FILENO) == -1)
-       error(1, "Can't dup2 stdin");
+       error(1, _("unable to dup2 stdin"));
     slot = ttyslot();
     if (dup2(sfd, STDIN_FILENO) == -1)
-       error(1, "Can't restore stdin");
+       error(1, _("unable to restore stdin"));
     close(sfd);
 
     return slot;
diff --git a/sudo.pp b/sudo.pp
index 6b9cd926807a4201e72e4c86d9a80853c1919cd2..77daeb5fbce12f6ab3f9d7b408d02d4d443ed24c 100644 (file)
--- a/sudo.pp
+++ b/sudo.pp
@@ -6,7 +6,7 @@
                name="sudo"
                pp_kit_package="sudo"
        fi
-       summary="Provide limited super-user priveleges to specific users"
+       summary="Provide limited super-user privileges to specific users"
        description="Sudo is a program designed to allow a sysadmin to give \
 limited root privileges to users and log root activity.  \
 The basic philosophy is to give as few privileges as possible but \
@@ -187,6 +187,8 @@ still allow people to get their work done."
        $timedir/               0700 root:
        $docdir/
        $docdir/*
+       $localedir/             optional
+       $localedir/**           optional
        /etc/pam.d/*            volatile,optional
 %if [rpm,deb]
        $sudoersdir/sudoers $sudoers_mode $sudoers_uid:$sudoers_gid volatile
@@ -206,7 +208,10 @@ still allow people to get their work done."
        # Don't overwrite an existing sudoers file
        sudoersdir=%{sudoersdir}
        if test ! -r $sudoersdir/sudoers; then
-               cp -p $sudoersdir/sudoers.dist $sudoersdir/sudoers
+               cp $sudoersdir/sudoers.dist $sudoersdir/sudoers
+               chmod %{sudoers_mode} $sudoersdir/sudoers
+               chown %{sudoers_uid} $sudoersdir/sudoers
+               chgrp %{sudoers_gid} $sudoersdir/sudoers
        fi
 
 %post [deb]
index 469db66339c36fa3890b2ad5d4c09df3a2da84e4..10faf0b4096dd14c6ae1c40d49906049b078b52d 100644 (file)
@@ -57,38 +57,6 @@ Makefile: $(srcdir)/Makefile.in
 libz.la: $(LTOBJS)
        $(LIBTOOL) --mode=link $(CC) -o $@ $(LTOBJS) -no-install
 
-# Dependencies
-adler32.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/adler32.c
-compress.lo: $(srcdir)/zlib.h ./zconf.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/compress.c
-crc32.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h $(srcdir)/crc32.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/crc32.c
-deflate.lo: $(srcdir)/deflate.h $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/deflate.c
-gzclose.lo: $(srcdir)/zlib.h ./zconf.h $(srcdir)/gzguts.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzclose.c
-gzlib.lo: $(srcdir)/zlib.h ./zconf.h $(srcdir)/gzguts.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzlib.c
-gzread.lo: $(srcdir)/zlib.h ./zconf.h $(srcdir)/gzguts.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzread.c
-gzwrite.lo: $(srcdir)/zlib.h ./zconf.h $(srcdir)/gzguts.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzwrite.c
-infback.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h $(srcdir)/inftrees.h $(srcdir)/inflate.h $(srcdir)/inffast.h $(srcdir)/inffixed.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/infback.c
-inffast.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h $(srcdir)/inftrees.h $(srcdir)/inflate.h $(srcdir)/inffast.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/inffast.c
-inflate.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h $(srcdir)/inftrees.h $(srcdir)/inflate.h $(srcdir)/inffast.h $(srcdir)/inffixed.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/inflate.c
-inftrees.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h $(srcdir)/inftrees.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/inftrees.c
-trees.lo: $(srcdir)/deflate.h $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h $(srcdir)/trees.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/trees.c
-uncompr.lo: $(srcdir)/zlib.h ./zconf.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/uncompr.c
-zutil.lo: $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h
-       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/zutil.c
-
 pre-install:
 
 install:
@@ -121,3 +89,44 @@ realclean: distclean
        rm -f TAGS tags
 
 cleandir: realclean
+
+# Autogenerated dependencies, do not modify
+adler32.lo: $(srcdir)/adler32.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/adler32.c
+compress.lo: $(srcdir)/compress.c $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/compress.c
+crc32.lo: $(srcdir)/crc32.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h \
+          $(srcdir)/crc32.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/crc32.c
+deflate.lo: $(srcdir)/deflate.c $(srcdir)/deflate.h $(srcdir)/zutil.h \
+            $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/deflate.c
+gzclose.lo: $(srcdir)/gzclose.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzclose.c
+gzlib.lo: $(srcdir)/gzlib.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzlib.c
+gzread.lo: $(srcdir)/gzread.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzread.c
+gzwrite.lo: $(srcdir)/gzwrite.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/gzwrite.c
+infback.lo: $(srcdir)/infback.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h \
+            $(srcdir)/inftrees.h $(srcdir)/inflate.h $(srcdir)/inffast.h \
+            $(srcdir)/inffixed.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/infback.c
+inffast.lo: $(srcdir)/inffast.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h \
+            $(srcdir)/inftrees.h $(srcdir)/inflate.h $(srcdir)/inffast.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/inffast.c
+inflate.lo: $(srcdir)/inflate.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h \
+            $(srcdir)/inftrees.h $(srcdir)/inflate.h $(srcdir)/inffast.h \
+            $(srcdir)/inffixed.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/inflate.c
+inftrees.lo: $(srcdir)/inftrees.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h \
+             $(srcdir)/inftrees.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/inftrees.c
+trees.lo: $(srcdir)/trees.c $(srcdir)/deflate.h $(srcdir)/zutil.h \
+          $(srcdir)/zlib.h ./zconf.h $(srcdir)/trees.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/trees.c
+uncompr.lo: $(srcdir)/uncompr.c $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/uncompr.c
+zutil.lo: $(srcdir)/zutil.c $(srcdir)/zutil.h $(srcdir)/zlib.h ./zconf.h
+       $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/zutil.c