From db542536bfb942d0168310cac588babc62657621 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Wed, 24 Aug 2011 09:39:56 -0600 Subject: [PATCH] Imported Upstream version 1.8.2 --- ChangeLog | 762 ++++ INSTALL | 19 +- MANIFEST | 40 + Makefile.in | 157 +- NEWS | 56 + README | 2 - common/Makefile.in | 54 +- common/aix.c | 9 +- common/alloc.c | 27 +- common/lbuf.c | 122 +- common/setgroups.c | 56 + compat/Makefile.in | 120 +- compat/getgrouplist.c | 131 + compat/strsignal.c | 5 +- config.guess | 21 +- config.h.in | 19 +- config.sub | 83 +- configure | 3123 +++++++++++------ configure.in | 190 +- doc/CONTRIBUTORS | 133 + doc/Makefile.in | 14 +- doc/UPGRADE | 24 + doc/contributors.pod | 135 + doc/license.pod | 2 +- doc/sudo.cat | 9 +- doc/sudo.man.in | 9 +- doc/sudo.pod | 7 +- doc/sudo_plugin.cat | 2 +- doc/sudo_plugin.man.in | 2 +- doc/sudoers.cat | 15 +- doc/sudoers.ldap.cat | 22 +- doc/sudoers.ldap.man.in | 12 +- doc/sudoers.ldap.pod | 10 +- doc/sudoers.man.in | 11 +- doc/sudoers.pod | 9 +- doc/sudoreplay.cat | 2 +- doc/sudoreplay.man.in | 2 +- doc/visudo.cat | 8 +- doc/visudo.man.in | 8 +- doc/visudo.pod | 7 + include/error.h | 8 +- include/gettext.h | 66 + include/lbuf.h | 4 +- include/missing.h | 3 + ltmain.sh | 2405 +++++++++---- m4/libtool.m4 | 1042 ++++-- m4/ltversion.m4 | 12 +- mkdep.pl | 211 ++ mkpkg | 42 +- plugins/sample/Makefile.in | 9 +- plugins/sample_group/Makefile.in | 13 +- plugins/sudoers/Makefile.in | 523 ++- plugins/sudoers/alias.c | 29 +- plugins/sudoers/audit.c | 8 +- plugins/sudoers/auth/aix_auth.c | 39 +- plugins/sudoers/auth/bsdauth.c | 6 +- plugins/sudoers/auth/fwtk.c | 12 +- plugins/sudoers/auth/kerb5.c | 20 +- plugins/sudoers/auth/pam.c | 28 +- plugins/sudoers/auth/rfc1938.c | 2 +- plugins/sudoers/auth/securid.c | 2 +- plugins/sudoers/auth/securid5.c | 22 +- plugins/sudoers/auth/sia.c | 2 +- plugins/sudoers/auth/sudo_auth.c | 20 +- plugins/sudoers/bsm_audit.c | 42 +- plugins/sudoers/check.c | 101 +- plugins/sudoers/def_data.c | 162 +- plugins/sudoers/defaults.c | 95 +- plugins/sudoers/defaults.h | 2 +- plugins/sudoers/env.c | 10 +- plugins/sudoers/find_path.c | 7 +- plugins/sudoers/getdate.c | 2 +- plugins/sudoers/getdate.y | 2 +- plugins/sudoers/gram.c | 2 +- plugins/sudoers/gram.y | 2 +- plugins/sudoers/group_plugin.c | 19 +- plugins/sudoers/interfaces.c | 2 +- plugins/sudoers/iolog.c | 39 +- plugins/sudoers/iolog_path.c | 2 +- plugins/sudoers/ldap.c | 172 +- plugins/sudoers/linux_audit.c | 7 +- plugins/sudoers/logging.c | 112 +- plugins/sudoers/logging.h | 6 + plugins/sudoers/logwrap.c | 72 + plugins/sudoers/match.c | 4 + plugins/sudoers/mkdefaults | 2 +- plugins/sudoers/parse.c | 116 +- plugins/sudoers/plugin_error.c | 7 +- plugins/sudoers/po/README | 14 + plugins/sudoers/po/da.mo | Bin 0 -> 34539 bytes plugins/sudoers/po/da.po | 1742 +++++++++ plugins/sudoers/po/eu.mo | Bin 0 -> 6381 bytes plugins/sudoers/po/eu.po | 1678 +++++++++ plugins/sudoers/po/fi.mo | Bin 0 -> 37072 bytes plugins/sudoers/po/fi.po | 1763 ++++++++++ plugins/sudoers/po/pl.mo | Bin 0 -> 36717 bytes plugins/sudoers/po/pl.po | 1731 +++++++++ plugins/sudoers/po/sudoers.pot | 1696 +++++++++ plugins/sudoers/po/uk.mo | Bin 0 -> 48004 bytes plugins/sudoers/po/uk.po | 1745 +++++++++ plugins/sudoers/po/zh_CN.mo | Bin 0 -> 31289 bytes plugins/sudoers/po/zh_CN.po | 1740 +++++++++ plugins/sudoers/pwutil.c | 317 +- plugins/sudoers/regress/logging/check_wrap.c | 103 + plugins/sudoers/regress/logging/check_wrap.in | 4 + .../sudoers/regress/logging/check_wrap.out.ok | 175 + plugins/sudoers/set_perms.c | 378 +- plugins/sudoers/sudo_nss.c | 50 +- plugins/sudoers/sudo_nss.h | 2 +- plugins/sudoers/sudoers.c | 296 +- plugins/sudoers/sudoers.h | 41 +- plugins/sudoers/sudoreplay.c | 100 +- plugins/sudoers/testsudoers.c | 51 +- plugins/sudoers/toke.c | 62 +- plugins/sudoers/toke.l | 20 +- plugins/sudoers/toke_util.c | 8 +- plugins/sudoers/visudo.c | 232 +- src/Makefile.in | 131 +- src/error.c | 7 +- src/exec.c | 29 +- src/exec_pty.c | 63 +- src/load_plugins.c | 35 +- src/net_ifs.c | 17 +- src/parse_args.c | 166 +- src/po/README | 14 + src/po/da.mo | Bin 0 -> 14327 bytes src/po/da.po | 748 ++++ src/po/eu.mo | Bin 0 -> 6748 bytes src/po/eu.po | 741 ++++ src/po/fi.mo | Bin 0 -> 15366 bytes src/po/fi.po | 760 ++++ src/po/pl.mo | Bin 0 -> 15259 bytes src/po/pl.po | 739 ++++ src/po/ru.mo | Bin 0 -> 19687 bytes src/po/ru.po | 743 ++++ src/po/sudo.pot | 735 ++++ src/po/uk.mo | Bin 0 -> 20309 bytes src/po/uk.po | 752 ++++ src/po/zh_CN.mo | Bin 0 -> 13332 bytes src/po/zh_CN.po | 740 ++++ src/preload.c | 2 +- src/selinux.c | 42 +- src/sesh.c | 14 +- src/sudo.c | 225 +- src/sudo.h | 6 +- src/sudo_edit.c | 34 +- src/tgetpass.c | 14 +- src/utmp.c | 6 +- sudo.pp | 9 +- zlib/Makefile.in | 73 +- 150 files changed, 27510 insertions(+), 4237 deletions(-) create mode 100644 common/setgroups.c create mode 100644 compat/getgrouplist.c create mode 100644 doc/CONTRIBUTORS create mode 100644 doc/contributors.pod create mode 100644 include/gettext.h create mode 100755 mkdep.pl create mode 100644 plugins/sudoers/logwrap.c create mode 100644 plugins/sudoers/po/README create mode 100644 plugins/sudoers/po/da.mo create mode 100644 plugins/sudoers/po/da.po create mode 100644 plugins/sudoers/po/eu.mo create mode 100644 plugins/sudoers/po/eu.po create mode 100644 plugins/sudoers/po/fi.mo create mode 100644 plugins/sudoers/po/fi.po create mode 100644 plugins/sudoers/po/pl.mo create mode 100644 plugins/sudoers/po/pl.po create mode 100644 plugins/sudoers/po/sudoers.pot create mode 100644 plugins/sudoers/po/uk.mo create mode 100644 plugins/sudoers/po/uk.po create mode 100644 plugins/sudoers/po/zh_CN.mo create mode 100644 plugins/sudoers/po/zh_CN.po create mode 100644 plugins/sudoers/regress/logging/check_wrap.c create mode 100644 plugins/sudoers/regress/logging/check_wrap.in create mode 100644 plugins/sudoers/regress/logging/check_wrap.out.ok create mode 100644 src/po/README create mode 100644 src/po/da.mo create mode 100644 src/po/da.po create mode 100644 src/po/eu.mo create mode 100644 src/po/eu.po create mode 100644 src/po/fi.mo create mode 100644 src/po/fi.po create mode 100644 src/po/pl.mo create mode 100644 src/po/pl.po create mode 100644 src/po/ru.mo create mode 100644 src/po/ru.po create mode 100644 src/po/sudo.pot create mode 100644 src/po/uk.mo create mode 100644 src/po/uk.po create mode 100644 src/po/zh_CN.mo create mode 100644 src/po/zh_CN.po diff --git a/ChangeLog b/ChangeLog index 5eaab26..3383f48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,765 @@ +2011-08-17 Todd C. Miller + + * 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 + + * 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 + + * NEWS: + sync + [73649a44d934] <1.8> + +2011-08-13 Todd C. Miller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * configure, configure.in: + Make sure compiler supports static-libgcc before using it. + [6c98e8809291] <1.8> + +2011-08-01 Todd C. Miller + + * Link libsudo_noexec.la with LDLDFLAGS for -static-libgcc + [a0a3a3fa6470] <1.8> + +2011-07-30 Todd C. Miller + + * Add new Russian sudo translation from translationproject.org and + rebuild the other translation files. + [e953d7d1ca6d] <1.8> + +2011-07-29 Todd C. Miller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * NEWS, doc/UPGRADE: + Document group lookup change and possible side effects. + [fe4b2d2701b2] <1.8> + +2011-07-01 Todd C. Miller + + * 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 + + * NEWS: + Update for 1.8.2rc5 + [f6a3aa2edf7a] <1.8> + +2011-06-26 Todd C. Miller + + * 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 + + * 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 + + * 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 + + * Sync Chinese (simplified) PO files from translationproject.org + [a4cf84dd9ddf] <1.8> + +2011-06-18 Todd C. Miller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * INSTALL, configure, configure.in: + Add support for --enable-nls[=location] + [0ea8e7bd1739] <1.8> + +2011-05-28 Todd C. Miller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 * Don't let the fnmatch/glob macros expand the function prototype. diff --git a/INSTALL b/INSTALL index b8156e6..6597087 100644 --- 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 ============================== diff --git a/MANIFEST b/MANIFEST index f50d03e..b670813 100644 --- 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 diff --git a/Makefile.in b/Makefile.in index 6df0c07..1f5f713 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 729ad66..abcbcc9 100644 --- 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 3ed6c5b..919c74a 100644 --- 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 diff --git a/common/Makefile.in b/common/Makefile.in index a0fd01d..a1319ef 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -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 diff --git a/common/aix.c b/common/aix.c index 00c0f6a..875eb8c 100644 --- a/common/aix.c +++ b/common/aix.c @@ -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, ®istry, 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 diff --git a/common/alloc.c b/common/alloc.c index 7fbf3c8..d3a2516 100644 --- a/common/alloc.c +++ b/common/alloc.c @@ -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; } diff --git a/common/lbuf.c b/common/lbuf.c index 92f489e..dc2b7bf 100644 --- a/common/lbuf.c +++ b/common/lbuf.c @@ -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 index 0000000..c469d20 --- /dev/null +++ b/common/setgroups.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2011 Todd C. Miller + * + * 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 + +#include +#include +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif /* STDC_HEADERS */ +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#include +#include + +#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; +} diff --git a/compat/Makefile.in b/compat/Makefile.in index 79b7da4..5d971c6 100644 --- a/compat/Makefile.in +++ b/compat/Makefile.in @@ -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 index 0000000..2d22714 --- /dev/null +++ b/compat/getgrouplist.c @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2010 Todd C. Miller + * + * 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 + +#include +#include +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif /* STDC_HEADERS */ +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include + +#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 */ diff --git a/compat/strsignal.c b/compat/strsignal.c index 1e5d791..a13346c 100644 --- a/compat/strsignal.c +++ b/compat/strsignal.c @@ -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"); } diff --git a/config.guess b/config.guess index d53e309..2852378 100644 --- a/config.guess +++ b/config.guess @@ -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 ;; diff --git a/config.h.in b/config.h.in index 0f7384d..a0c7045 100644 --- a/config.h.in +++ b/config.h.in @@ -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 header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H @@ -156,9 +153,15 @@ /* 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 @@ -217,9 +220,6 @@ /* Define to 1 if 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 @@ -310,6 +310,9 @@ /* 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 header file. */ +#undef HAVE_LIBINTL_H + /* Define to 1 to enable Linux audit support. */ #undef HAVE_LINUX_AUDIT @@ -868,7 +871,7 @@ #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/config.sub b/config.sub index acb095a..43e9be3 100755 --- a/config.sub +++ b/config.sub @@ -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 ." 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 diff --git a/configure b/configure index cad0d5c..aa7b4c8 100755 --- 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 . # # # 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 &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 if you have headers in a nonstandard directory 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 <&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 @@ -9795,13 +10337,18 @@ fi + + + + + # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if 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 @@ -10781,23 +11398,36 @@ fi 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 @@ -12201,12 +12890,12 @@ fi *) 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 @@ -12909,18 +13598,53 @@ fi 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 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 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 @@ -13056,13 +13780,30 @@ fi 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 #include " -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 #include " -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 " -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 #include " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 " -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 #include " -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 @@ -16364,16 +17231,16 @@ 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 @@ -16500,12 +17367,12 @@ 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 @@ -16681,11 +17548,104 @@ fi 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 +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 " -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 " -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 " -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 -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 @@ -17051,14 +17942,14 @@ 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 +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 @@ -17459,15 +18357,14 @@ 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="-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 +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 " -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 " -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 +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 +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 " -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" @@ -18781,6 +19690,13 @@ fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +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 +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 @@ -20107,9 +21068,10 @@ fi # 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` 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 = "" @@ -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 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" @@ -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 diff --git a/configure.in b/configure.in index d180df4..7212ba8 100644 --- a/configure.in +++ b/configure.in @@ -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 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 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 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 ]], [(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 ]], [(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 ], [found=yes; break]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include ]])], [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 ], [found=yes; break]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include ]])], [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 ], [found=yes], [found=no]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include ]])], [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 ], [found=yes; break]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include ]])], [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 ], [found="gssapi/gssapi.h"; break], [AC_PREPROC_IFELSE([#include ], [found="gssapi.h"; break])]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include ]])], [found="gssapi/gssapi.h"; break], [AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include ]])], [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 . (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 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 index 0000000..4608cfc --- /dev/null +++ b/doc/CONTRIBUTORS @@ -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 + diff --git a/doc/Makefile.in b/doc/Makefile.in index 414d8c0..eadb05c 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -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: diff --git a/doc/UPGRADE b/doc/UPGRADE index 35ca9a5..9ecab12 100644 --- a/doc/UPGRADE +++ b/doc/UPGRADE @@ -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 index 0000000..0218d4b --- /dev/null +++ b/doc/contributors.pod @@ -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 diff --git a/doc/license.pod b/doc/license.pod index 5786e38..c3c23a9 100644 --- a/doc/license.pod +++ b/doc/license.pod @@ -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 Permission to use, copy, modify, and distribute this software for any diff --git a/doc/sudo.cat b/doc/sudo.cat index 08e1ac8..30a6aca 100644 --- a/doc/sudo.cat +++ b/doc/sudo.cat @@ -114,7 +114,7 @@ OOPPTTIIOONNSS _l_e_v_e_l may be a value from 1 through 9. -E The --EE (_p_r_e_s_e_r_v_e _e_n_v_i_r_o_n_m_e_n_t) 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 --EE option is specified and the user does not have permission to preserve the environment. @@ -177,7 +177,10 @@ OOPPTTIIOONNSS 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 _C_o_m_m_a_n_d _E_n_v_i_r_o_n_m_e_n_t + section in the _s_u_d_o_e_r_s(4) manual documents how the --ii + option affects the environment in which a command is run + when the _s_u_d_o_e_r_s policy is in use. -K The --KK (sure _k_i_l_l) option is like --kk except that it removes the user's cached credentials entirely and may not be used @@ -544,4 +547,4 @@ DDIISSCCLLAAIIMMEERR -1.8.1p2 May 16, 2011 SUDO(1m) +1.8.2 August 17, 2011 SUDO(1m) diff --git a/doc/sudo.man.in b/doc/sudo.man.in index 1d5ca05..435e305 100644 --- a/doc/sudo.man.in +++ b/doc/sudo.man.in @@ -149,7 +149,7 @@ .\" ======================================================================== .\" .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 diff --git a/doc/sudo.pod b/doc/sudo.pod index cdc5832..0921460 100644 --- a/doc/sudo.pod +++ b/doc/sudo.pod @@ -166,7 +166,7 @@ may be a value from 1 through 9. =item -E The B<-E> (I I) 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 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 section in the +L manual documents how the B<-i> option affects the +environment in which a command is run when the I policy +is in use. =item -K diff --git a/doc/sudo_plugin.cat b/doc/sudo_plugin.cat index a486f02..2638092 100644 --- a/doc/sudo_plugin.cat +++ b/doc/sudo_plugin.cat @@ -1030,4 +1030,4 @@ DDIISSCCLLAAIIMMEERR -1.8.1p2 May 16, 2011 SUDO_PLUGIN(1m) +1.8.2 May 22, 2011 SUDO_PLUGIN(1m) diff --git a/doc/sudo_plugin.man.in b/doc/sudo_plugin.man.in index 9f26bfc..2fe44c6 100644 --- a/doc/sudo_plugin.man.in +++ b/doc/sudo_plugin.man.in @@ -139,7 +139,7 @@ .\" ======================================================================== .\" .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 diff --git a/doc/sudoers.cat b/doc/sudoers.cat index a30ffc7..8026596 100644 --- a/doc/sudoers.cat +++ b/doc/sudoers.cat @@ -90,7 +90,7 @@ DDEESSCCRRIIPPTTIIOONN before ssuuddoo even begins execution and, as such, it is not possible for ssuuddoo to preserve them. - As a special case, If ssuuddoo's --ii option (initial login) is specified, + As a special case, if ssuuddoo's --ii option (initial login) is specified, _s_u_d_o_e_r_s will initialize the environment regardless of the value of _e_n_v___r_e_s_e_t. The _D_I_S_P_L_A_Y, _P_A_T_H and _T_E_R_M variables remain unchanged; _H_O_M_E, _M_A_I_L, _S_H_E_L_L, _U_S_E_R, and _L_O_G_N_A_M_E are set based on the target user. @@ -768,7 +768,7 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS log_year If set, the four-digit year will be logged in the (non- syslog) ssuuddoo log file. This flag is _o_f_f 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 SS//KKeeyy or OOPPIIEE, 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 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS 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 _f_q_d_n option is set) + domain name (only if the machine's host name is + fully qualified or the _f_q_d_n option is set) %h expanded to the local host name without the domain name @@ -1167,7 +1167,8 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS 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 _s_u_d_o_e_r_s group plugin with optional @@ -1183,7 +1184,7 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS For example, given _/_e_t_c_/_s_u_d_o_-_g_r_o_u_p, 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 _s_u_d_o___p_l_u_g_i_n(4). @@ -1681,4 +1682,4 @@ DDIISSCCLLAAIIMMEERR -1.8.1p2 May 16, 2011 SUDOERS(4) +1.8.2 August 17, 2011 SUDOERS(4) diff --git a/doc/sudoers.ldap.cat b/doc/sudoers.ldap.cat index 19f3294..89e122a 100644 --- a/doc/sudoers.ldap.cat +++ b/doc/sudoers.ldap.cat @@ -107,22 +107,26 @@ DDEESSCCRRIIPPTTIIOONN 1.7.0 and higher. ssuuddooNNoottBBeeffoorree - 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 + a 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 ssuuddoo versions 1.7.5 and higher and must be explicitly enabled via the SSUUDDOOEERRSS__TTIIMMEEDD option in _/_e_t_c_/_l_d_a_p_._c_o_n_f. ssuuddooNNoottAAfftteerr - 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 ssuuddoo versions 1.7.5 and higher and must be explicitly enabled via the SSUUDDOOEERRSS__TTIIMMEEDD @@ -738,4 +742,4 @@ DDIISSCCLLAAIIMMEERR -1.8.1p2 May 16, 2011 SUDOERS.LDAP(4) +1.8.2 August 17, 2011 SUDOERS.LDAP(4) diff --git a/doc/sudoers.ldap.man.in b/doc/sudoers.ldap.man.in index 4ad1a47..215713d 100644 --- a/doc/sudoers.ldap.man.in +++ b/doc/sudoers.ldap.man.in @@ -140,7 +140,7 @@ .\" ======================================================================== .\" .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 diff --git a/doc/sudoers.ldap.pod b/doc/sudoers.ldap.pod index a981654..b12c6e6 100644 --- a/doc/sudoers.ldap.pod +++ b/doc/sudoers.ldap.pod @@ -147,11 +147,12 @@ The C attribute is only available in B versions =item B -A timestamp in the form C that can be used to provide +A timestamp in the form C that can be used to provide a start date/time for when the C will be valid. If multiple C 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 attribute is only available in B versions 1.7.5 and higher and must be explicitly enabled via the B @@ -159,11 +160,12 @@ option in F<@ldap_conf@>. =item B -A timestamp in the form C that indicates an expiration +A timestamp in the form C that indicates an expiration date/time, after which the C will no longer be valid. If multiple C 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 attribute is only available in B versions 1.7.5 and higher and must be explicitly enabled via the B diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index 90868c8..faea227 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -148,7 +148,7 @@ .\" ======================================================================== .\" .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@). diff --git a/doc/sudoers.pod b/doc/sudoers.pod index 12509ca..b2257ca 100644 --- a/doc/sudoers.pod +++ b/doc/sudoers.pod @@ -115,7 +115,7 @@ C, C, and others. These type of variables are removed from the environment before B even begins execution and, as such, it is not possible for B to preserve them. -As a special case, If B's B<-i> option (initial login) is +As a special case, if B's B<-i> option (initial login) is specified, I will initialize the environment regardless of the value of I. The I, I and I variables remain unchanged; I, I, I, I, @@ -882,7 +882,7 @@ This flag is I 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 or B, 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 +(only if the machine's host name is fully qualified or the I option is set) =item C<%h> @@ -1369,6 +1369,7 @@ as I and I. =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, 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. diff --git a/doc/sudoreplay.cat b/doc/sudoreplay.cat index 254544c..f04f5fa 100644 --- a/doc/sudoreplay.cat +++ b/doc/sudoreplay.cat @@ -260,4 +260,4 @@ DDIISSCCLLAAIIMMEERR -1.8.1p2 May 16, 2011 SUDOREPLAY(1m) +1.8.2 May 22, 2011 SUDOREPLAY(1m) diff --git a/doc/sudoreplay.man.in b/doc/sudoreplay.man.in index 1c7557a..f821d76 100644 --- a/doc/sudoreplay.man.in +++ b/doc/sudoreplay.man.in @@ -139,7 +139,7 @@ .\" ======================================================================== .\" .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 diff --git a/doc/visudo.cat b/doc/visudo.cat index 5aa5f0f..ad117f3 100644 --- a/doc/visudo.cat +++ b/doc/visudo.cat @@ -109,6 +109,12 @@ DDIIAAGGNNOOSSTTIICCSS used. You may wish to comment out or remove the unused alias. In --ss (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 ssuuddoo will ignore cycles when parsing + the _s_u_d_o_e_r_s file. + SSEEEE AALLSSOO _v_i(1), _s_u_d_o_e_r_s(4), _s_u_d_o(1m), _v_i_p_w(1m) @@ -143,4 +149,4 @@ DDIISSCCLLAAIIMMEERR -1.8.1p2 May 16, 2011 VISUDO(1m) +1.8.2 August 17, 2011 VISUDO(1m) diff --git a/doc/visudo.man.in b/doc/visudo.man.in index 9003ea8..a711ea7 100644 --- a/doc/visudo.man.in +++ b/doc/visudo.man.in @@ -144,7 +144,7 @@ .\" ======================================================================== .\" .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@) diff --git a/doc/visudo.pod b/doc/visudo.pod index cffb321..2812109 100644 --- a/doc/visudo.pod +++ b/doc/visudo.pod @@ -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 will ignore cycles when parsing +the I file. + =back =head1 SEE ALSO diff --git a/include/error.h b/include/error.h index 190bd26..e64afdf 100644 --- a/include/error.h +++ b/include/error.h @@ -19,9 +19,9 @@ #include -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 index 0000000..27f0796 --- /dev/null +++ b/include/gettext.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2011 Todd C. Miller + * + * 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 +#endif + +#ifdef HAVE_LIBINTL_H + +# include + +/* + * 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 */ diff --git a/include/lbuf.h b/include/lbuf.h index 501eeaf..c6d5093 100644 --- a/include/lbuf.h +++ b/include/lbuf.h @@ -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 */ diff --git a/include/missing.h b/include/missing.h index 68d5879..e7eae3e 100644 --- a/include/missing.h +++ b/include/missing.h @@ -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 diff --git a/ltmain.sh b/ltmain.sh index 04eaea4..3061e3c 100755 --- 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 , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, @@ -70,17 +69,19 @@ # 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 . +# GNU libtool home page: . +# General help using GNU software: . 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 </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 < "$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 . + $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 </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" diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 22924a8..d812584 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -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 diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 index 93fc771..9c7b5d4 100644 --- a/m4/ltversion.m4 +++ b/m4/ltversion.m4 @@ -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 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, ") { + 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 = ; + } 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/\$ 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 = ; + 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 12c1d84..d2aec97 100755 --- 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 diff --git a/plugins/sample/Makefile.in b/plugins/sample/Makefile.in index 180dee3..12d77d4 100644 --- a/plugins/sample/Makefile.in +++ b/plugins/sample/Makefile.in @@ -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 diff --git a/plugins/sample_group/Makefile.in b/plugins/sample_group/Makefile.in index eda9f1f..9c4207a 100644 --- a/plugins/sample_group/Makefile.in +++ b/plugins/sample_group/Makefile.in @@ -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 diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index d8c298b..e22abfa 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -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 diff --git a/plugins/sudoers/alias.c b/plugins/sudoers/alias.c index 274b446..0b2ad0e 100644 --- a/plugins/sudoers/alias.c +++ b/plugins/sudoers/alias.c @@ -44,6 +44,7 @@ #include "parse.h" #include "redblack.h" #include +#include /* * 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); } diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index 2cb1130..c3d35a2 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -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); diff --git a/plugins/sudoers/auth/aix_auth.c b/plugins/sudoers/auth/aix_auth.c index 9f54f91..6abc48c 100644 --- a/plugins/sudoers/auth/aix_auth.c +++ b/plugins/sudoers/auth/aix_auth.c @@ -41,6 +41,7 @@ # include #endif /* HAVE_UNISTD_H */ #include +#include #include "sudoers.h" #include "sudo_auth.h" @@ -52,19 +53,37 @@ 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; } diff --git a/plugins/sudoers/auth/bsdauth.c b/plugins/sudoers/auth/bsdauth.c index f70e424..ac32a1e 100644 --- a/plugins/sudoers/auth/bsdauth.c +++ b/plugins/sudoers/auth/bsdauth.c @@ -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; } diff --git a/plugins/sudoers/auth/fwtk.c b/plugins/sudoers/auth/fwtk.c index a3a5cff..a6e45b2 100644 --- a/plugins/sudoers/auth/fwtk.c +++ b/plugins/sudoers/auth/fwtk.c @@ -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; } diff --git a/plugins/sudoers/auth/kerb5.c b/plugins/sudoers/auth/kerb5.c index 38d84cb..d12e11f 100644 --- a/plugins/sudoers/auth/kerb5.c +++ b/plugins/sudoers/auth/kerb5.c @@ -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 diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index 4ff4eed..d66e302 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -49,8 +49,7 @@ # include #endif -#ifdef HAVE_DGETTEXT -# include +#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:"))))) diff --git a/plugins/sudoers/auth/rfc1938.c b/plugins/sudoers/auth/rfc1938.c index 846b7b2..fe5b28f 100644 --- a/plugins/sudoers/auth/rfc1938.c +++ b/plugins/sudoers/auth/rfc1938.c @@ -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; diff --git a/plugins/sudoers/auth/securid.c b/plugins/sudoers/auth/securid.c index bcea4e9..0f53511 100644 --- a/plugins/sudoers/auth/securid.c +++ b/plugins/sudoers/auth/securid.c @@ -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; } } diff --git a/plugins/sudoers/auth/securid5.c b/plugins/sudoers/auth/securid5.c index 9d0ed4f..45513c9 100644 --- a/plugins/sudoers/auth/securid5.c +++ b/plugins/sudoers/auth/securid5.c @@ -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; } diff --git a/plugins/sudoers/auth/sia.c b/plugins/sudoers/auth/sia.c index 65c6653..20d0c14 100644 --- a/plugins/sudoers/auth/sia.c +++ b/plugins/sudoers/auth/sia.c @@ -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; } diff --git a/plugins/sudoers/auth/sudo_auth.c b/plugins/sudoers/auth/sudo_auth.c index fc69716..f82b5cb 100644 --- a/plugins/sudoers/auth/sudo_auth.c +++ b/plugins/sudoers/auth/sudo_auth.c @@ -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"); diff --git a/plugins/sudoers/bsm_audit.c b/plugins/sudoers/bsm_audit.c index 8354fe3..df53ea0 100644 --- a/plugins/sudoers/bsm_audit.c +++ b/plugins/sudoers/bsm_audit.c @@ -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")); } diff --git a/plugins/sudoers/check.c b/plugins/sudoers/check.c index af2412f..6a36105 100644 --- a/plugins/sudoers/check.c +++ b/plugins/sudoers/check.c @@ -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; diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index ca02ced..200d76a 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -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 diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index f9e9961..e449b1c 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -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); diff --git a/plugins/sudoers/defaults.h b/plugins/sudoers/defaults.h index 1329124..711a7ad 100644 --- a/plugins/sudoers/defaults.h +++ b/plugins/sudoers/defaults.h @@ -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; diff --git a/plugins/sudoers/env.c b/plugins/sudoers/env.c index 9d1201f..6d65718 100644 --- a/plugins/sudoers/env.c +++ b/plugins/sudoers/env.c @@ -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); } diff --git a/plugins/sudoers/find_path.c b/plugins/sudoers/find_path.c index 2566733..4064248 100644 --- a/plugins/sudoers/find_path.c +++ b/plugins/sudoers/find_path.c @@ -42,6 +42,7 @@ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ +#include #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; diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index cb6aac5..f12d394 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -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 diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 13483ff..5ebe29e 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -100,7 +100,7 @@ static time_t yyRelSeconds; static int yyerror(char *s); static int yylex(void); -static int yyparse(void); + int yyparse(void); %} diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index d95b834..51cf588 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -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; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index b1eed89..0ec084e 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -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; diff --git a/plugins/sudoers/group_plugin.c b/plugins/sudoers/group_plugin.c index bd5203a..a60a87d 100644 --- a/plugins/sudoers/group_plugin.c +++ b/plugins/sudoers/group_plugin.c @@ -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; diff --git a/plugins/sudoers/interfaces.c b/plugins/sudoers/interfaces.c index acf0568..1096358 100644 --- a/plugins/sudoers/interfaces.c +++ b/plugins/sudoers/interfaces.c @@ -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); diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index 903aedf..00fd7ea 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -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); diff --git a/plugins/sudoers/iolog_path.c b/plugins/sudoers/iolog_path.c index 74f5fdf..7a4ee7e 100644 --- a/plugins/sudoers/iolog_path.c +++ b/plugins/sudoers/iolog_path.c @@ -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"); } diff --git a/plugins/sudoers/ldap.c b/plugins/sudoers/ldap.c index 8d64c35..a788543 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -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; } diff --git a/plugins/sudoers/linux_audit.c b/plugins/sudoers/linux_audit.c index 7505f69..e8e25aa 100644 --- a/plugins/sudoers/linux_audit.c +++ b/plugins/sudoers/linux_audit.c @@ -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); diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 82f3e69..35d6a00 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -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")); } diff --git a/plugins/sudoers/logging.h b/plugins/sudoers/logging.h index 43d5ff0..7a89738 100644 --- a/plugins/sudoers/logging.h +++ b/plugins/sudoers/logging.h @@ -47,11 +47,17 @@ # 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 index 0000000..054b9ac --- /dev/null +++ b/plugins/sudoers/logwrap.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011 Todd C. Miller + * + * 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 + +#include +#include +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif /* STDC_HEADERS */ +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#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); +} diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index 8e06a4d..79176a2 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -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) diff --git a/plugins/sudoers/mkdefaults b/plugins/sudoers/mkdefaults index 7befe15..427cff7 100755 --- a/plugins/sudoers/mkdefaults +++ b/plugins/sudoers/mkdefaults @@ -66,7 +66,7 @@ while() { s/^"//; s/"$//; s/"/\\"/g; - $desc = "\"$_\""; + $desc = "N_(\"$_\")"; } } elsif ($field == 3 || $field == 4) { if (s/^\*//) { diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index 985c435..303d135 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -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; } } diff --git a/plugins/sudoers/plugin_error.c b/plugins/sudoers/plugin_error.c index 2d42871..3d9f84c 100644 --- a/plugins/sudoers/plugin_error.c +++ b/plugins/sudoers/plugin_error.c @@ -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 index 0000000..ff9b845 --- /dev/null +++ b/plugins/sudoers/po/README @@ -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 index 0000000000000000000000000000000000000000..a8124adda2b6f7c14dd9499e985cd5df532d5dd9 GIT binary patch literal 34539 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, 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 \n" +"Language-Team: Danish \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 index 0000000000000000000000000000000000000000..9d5854929f05c044642e10115ee40819c451fea1 GIT binary patch literal 6381 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 literal 0 HcmV?d00001 diff --git a/plugins/sudoers/po/eu.po b/plugins/sudoers/po/eu.po new file mode 100644 index 0000000..bda562a --- /dev/null +++ b/plugins/sudoers/po/eu.po @@ -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 , 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 \n" +"Language-Team: Basque \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 index 0000000000000000000000000000000000000000..5033c19697c01a9b20ddef3cf6d0b9d428b4b4a6 GIT binary patch literal 37072 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, 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 \n" +"Language-Team: Finnish \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 index 0000000000000000000000000000000000000000..a804700d21810a39719a7c6055bf1b18ed83d36f GIT binary patch literal 36717 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 I#45!91;`Yy>Hq)$ literal 0 HcmV?d00001 diff --git a/plugins/sudoers/po/pl.po b/plugins/sudoers/po/pl.po new file mode 100644 index 0000000..9f94c9e --- /dev/null +++ b/plugins/sudoers/po/pl.po @@ -0,0 +1,1731 @@ +# Polish translation for sudo/sudoers. +# This file is put in the public domain. +# Jakub Bogusz , 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 \n" +"Language-Team: Polish \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 index 0000000..21f6196 --- /dev/null +++ b/plugins/sudoers/po/sudoers.pot @@ -0,0 +1,1696 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \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 index 0000000000000000000000000000000000000000..131c776c6ec06b30dfb89c7d02d651c48284ca76 GIT binary patch literal 48004 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 literal 0 HcmV?d00001 diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po new file mode 100644 index 0000000..706220b --- /dev/null +++ b/plugins/sudoers/po/uk.po @@ -0,0 +1,1745 @@ +# Ukrainian translation for sudoers. +# This file is put in the public domain. +# +# Yuri Chornoivan , 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 \n" +"Language-Team: Ukrainian \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=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 index 0000000000000000000000000000000000000000..a569b804f07e7be55affc5d7030c52335614c987 GIT binary patch literal 31289 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 literal 0 HcmV?d00001 diff --git a/plugins/sudoers/po/zh_CN.po b/plugins/sudoers/po/zh_CN.po new file mode 100644 index 0000000..55b7206 --- /dev/null +++ b/plugins/sudoers/po/zh_CN.po @@ -0,0 +1,1740 @@ +# Chinese simplified translation for sudoers. +# This file is put in the public domain. +# Wylmer Wang , 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 \n" +"Language-Team: Chinese (simplified) \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”引用了自己" diff --git a/plugins/sudoers/pwutil.c b/plugins/sudoers/pwutil.c index ac0d34a..b511472 100644 --- a/plugins/sudoers/pwutil.c +++ b/plugins/sudoers/pwutil.c @@ -48,6 +48,12 @@ #ifdef HAVE_SETAUTHDB # include #endif /* HAVE_SETAUTHDB */ +#ifdef HAVE_UTMPX_H +# include +#else +# include +#endif /* HAVE_UTMPX_H */ +#include #include #include @@ -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 index 0000000..2b904d9 --- /dev/null +++ b/plugins/sudoers/regress/logging/check_wrap.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2011 Todd C. Miller + * + * 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 + +#include +#include +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif /* STDC_HEADERS */ +#ifdef HAVE_STRING_H +# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) +# include +# endif +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#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 index 0000000..a2d1f08 --- /dev/null +++ b/plugins/sudoers/regress/logging/check_wrap.in @@ -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 index 0000000..4842443 --- /dev/null +++ b/plugins/sudoers/regress/logging/check_wrap.out.ok @@ -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 diff --git a/plugins/sudoers/set_perms.c b/plugins/sudoers/set_perms.c index 17c87b4..84215fb 100644 --- a/plugins/sudoers/set_perms.c +++ b/plugins/sudoers/set_perms.c @@ -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 */ diff --git a/plugins/sudoers/sudo_nss.c b/plugins/sudoers/sudo_nss.c index 2f77d89..de0d5a6 100644 --- a/plugins/sudoers/sudo_nss.c +++ b/plugins/sudoers/sudo_nss.c @@ -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; diff --git a/plugins/sudoers/sudo_nss.h b/plugins/sudoers/sudo_nss.h index 8d08944..dab885d 100644 --- a/plugins/sudoers/sudo_nss.h +++ b/plugins/sudoers/sudo_nss.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007-2011 + * Copyright (c) 2007-2011 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index f533e59..a3816e2 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -74,14 +74,10 @@ #ifdef HAVE_SELINUX # include #endif -#ifdef HAVE_MBR_CHECK_MEMBERSHIP -# include -#endif #include #include #include "sudoers.h" -#include "lbuf.h" #include "interfaces.h" #include "sudoers_version.h" #include "auth/sudo_auth.h" @@ -90,19 +86,16 @@ * 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; } diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 7e5d56b..3c8c6a1 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -35,9 +35,18 @@ #include "sudo_nss.h" #include "sudo_plugin.h" -#ifdef HAVE_MBR_CHECK_MEMBERSHIP -# include -#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; diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index e40fcef..4e91566 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -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); } diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index 60e338b..5eda9d0 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -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) { diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 7e84b56..7bb8eb3 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -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; diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 9428049..398e1d1 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -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; diff --git a/plugins/sudoers/toke_util.c b/plugins/sudoers/toke_util.c index 16636b6..9254c45 100644 --- a/plugins/sudoers/toke_util.c +++ b/plugins/sudoers/toke_util.c @@ -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; diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index dd31f62..43119e2 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -58,6 +58,7 @@ #ifdef HAVE_UNISTD_H #include #endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -70,16 +71,15 @@ #if TIME_WITH_SYS_TIME # include #endif -#ifdef __STDC__ -# include -#else -# include +#ifdef HAVE_SETLOCALE +# include #endif #include "sudoers.h" #include "interfaces.h" #include "parse.h" #include "redblack.h" +#include "gettext.h" #include "sudoers_version.h" #include @@ -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); } diff --git a/src/Makefile.in b/src/Makefile.in index c1b15bc..49ed68e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -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 diff --git a/src/error.c b/src/error.c index 8e26789..ed3ccab 100644 --- a/src/error.c +++ b/src/error.c @@ -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); diff --git a/src/exec.c b/src/exec.c index 510ce11..52dbdbb 100644 --- a/src/exec.c +++ b/src/exec.c @@ -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 diff --git a/src/exec_pty.c b/src/exec_pty.c index 914d55f..b24d691 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -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; diff --git a/src/load_plugins.c b/src/load_plugins.c index 68be423..6bee3f8 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -48,11 +48,13 @@ #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; } diff --git a/src/net_ifs.c b/src/net_ifs.c index f6de080..3dc1f4d 100644 --- a/src/net_ifs.c +++ b/src/net_ifs.c @@ -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; diff --git a/src/parse_args.c b/src/parse_args.c index e9f09e4..f8aac4b 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -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 index 0000000..ff9b845 --- /dev/null +++ b/src/po/README @@ -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 index 0000000000000000000000000000000000000000..805ff889d3bc08517467c27fb3b84d4de88db8f0 GIT binary patch literal 14327 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, 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 \n" +"Language-Team: Danish \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 index 0000000000000000000000000000000000000000..ea726d49444f74da65173ab878b55a7cb885f5b8 GIT binary patch literal 6748 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 bvQ7@8, 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 \n" +"Language-Team: Basque \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 index 0000000000000000000000000000000000000000..b8756b460fb5b36ee7d49ee3cf7e8305d89c2468 GIT binary patch literal 15366 zcmb`Nd#oJSUB{<+(QebEN%L~(W1Mh_O}y9l+IikQ9Y3h!xORQ*qzP%9xw~`kj(2uu zGmpLA5Sp~*RSF~_Nf8M6%REE`4FVEGD_&NFR3#Ppg9?ghlU5*5i;9{`ph`4+zGu$N z&hFl8J5onJ_q#LmJLmk)@BCipH~!ki=RD_dJxhB(?ThC)&dcC~@8SWaRMescEL2wRif!Bl2f|r3` z0-N9);Dz9Y7ZiMb2-JADf@gvEfuer^+zUPez8Cxg$Uo;5{)pdy0j~!C54;K7$e=$8 zJ^)?^4!{qB&x14Imq4xWzd;w=z@V3d3!vx@fgb=L0j~j{1hxK`EWT#(TcGAW7a<8Z zgObaBd!N|*&sqEesQF(9wa)Vp=7+$I;8oxb@O@w#ya7B8?gT#%ZUx^2uLZA$XbX4% zyb*j1)H?qR+z$RHDEbdvQpkNjIM4m3LCy2$pyc*Xpw|0+Q0v@qY4LmqDEYNO?bG9+ z=>7;4-76ql=X}q;KZ{M$xO1TRSp-G*S@0*oKLxjeUjsLT7a{EH!CS!F!AHRBz!yNt z<=;Tb+qt6H|0_Y4+j&rY9RhzGj6kj9IS^Kymq7kGukuIx@$Vo*ISmG5iOy9PZv;hm z4=6qILGhD;8ut%D@$nicxqTbd`aZ}*w$9lBY9ALt@iPQ9|8o|f2c)#DZpI1Q9KLu*P z{umUWuY%(LO;G(VgGhYLf_lCeRR0h(>j1TH&)er;0TF@o7RVMl8yK9SoH==~3y&God zzzv}K-wjG$kAg1vBnXSn3-5uvk{P1Jf1fgc7t7XJjioBQvB8gDmDY5Y}i0sI5- zHt?JF`9>Bczj6rF^Cv*b<*z`k>wiJbcLh#P^1B7p^M}Ff!6!h5a$W>~5_|)cK5u4F zz2605D$b+ePVjReLpomt#m{-OMgJWjOLIa{&z}S3hyDTF1D=cUw4Qq`egc#nUjQ}! zS1f)P6rUHcXsu&AxEJh!8s{ZY{^kdu^z(8Cg=Ob@Q1nZn=KU>D>we9?{~oAyZ)8&r zfIC2z;5-dV5B?h52fhJneNCLd^!I-74)8dr_5B5?dEWqG!Fda0tDHF|y$O5(WGd$w zQ1ibGN>Ba+)VeN2sFL?}pq?KEHSW)YlE>%47Wj`KqH}J>h=m>SF!<{rQ##)UwQd)s z(s=tp@qHZB^An)xUIVqxb74+&+reAFhd|Buo1n)38&Lhe18V=@k1!>#8$qq-K2Xm; z1481Q0M-9rLG?SEO*e7?S*r5@csuwcxEuU3C_TS~$%P*W>FWF*sBvBg-vR2%Xb;jJ zp#1_(mvnCf?F!x0E`~Mwb0xS$(;7pXcrP#cBV8`-9-8>XY|V9$zrRWoub(kb9Oq6@ zdpxxFId~E69D84fM(ySZzqRM9H0||XT6z5iT2C1{j|Gi@=F)cHqv@D z#S__p^rcJtH0^HM#WY=gn)dGJXrG|HlXf2MLYl5;Xp80-`fTx0@KXExv*54LB`fzCuzFgOS_yVTa$m%CB6PNn)FQ99-4G$mu|QoraeUaAWfG~Yty#U zQrgeZJX(2SYEFkHyE~V5n07wxY}(bd@_IKvK2A&QgG<0q(PR&(udxHb_?NTvgX?kH zW3*$mqcqIX*!}y!pQ6pv2DBAgdA-N}cuLqf(9eQ6N*5Z=OzJjWza3=mauE8d>+vs& zvyPv*dFm&PlH$1E$}`{f+*aJ{c~N_9!dAzNR{XXbdP{zoYVaU+8IFDfFAUoBjxzsv zrZ=I#oVj__i`&6+;J5Xtm#3M#3+ zQizvbw%Tp_Tij-c7SQ(5LRv~2xGc7LZ`s@J6^xF=w3xT!ku(_kh~*^>Rw6HST49`` zHDPE3;kNy>l?44PPEz;w+uY@L!!a5WWvO^EdYJmDk*(1W_J&Pt#d+8^f?d+;kwV*F z_VO@u6F-gfq^0da9?NjsPvT?jhkMmbdR49Cv6!L8-zC0>MlbHZCy4UnZi<4VZo^VV z-PIuLxYbJCBo6(C(+<*ph!8q{*mrwy>aDOmc=C@2+30ntA3+35Jv0bi8Bx{DEr`<0 z_u5)~l1CBBF*31+<0lC#3Zftju%1WtcJI~$rP3mpf`Emz^=>(ddu~7I`)fTfHe~(R zajWZReJ@BH-`aZ3(xoILQLH3!-fuX|9v;K&#)^+oh3%uIb&uYpyovl(BR%cp^qWFk z^(ON|*DPoYZlP3n*@Rti>I68C1hp#3{2rPWx3+EC?8bVx#kQvmlQA-Et75F~Nb)7GqZ{D^H- z_}6Nz(ls189ap-u8Yk_-^`Np*+v6^X`Z?Y(@p~xZgf?r0eu!FzLs2}E2k3x17MtNJ z*WA3e-d&Cb2aHU6WGWq!lqDaw;GxwaV&Xb+n_;X_p5mHAWhceriY&%btpBd`b(@e? z<(@Zdn33Bv`H&f@q-Hv8*pk=kO4|uCKNL?7kECe77AWv+A3bk<9wjDf=36UCGcy$V$77VNTm+n#Fxt6JEqvO}UgX zAX_N+MeJMqDf2t4^f*x>UDhG%BTQxrevTycaC65s#>gLTE?!frw#g=By<~dGR{j@l zB=fXgc9)dpBt;5|(9I6X1z5@>6{QlCGJ7;*nms632umu{t6Yq{esgD)0eWtf_m;4M z6_kr;<7T9^%7V~T0uRL7r@QZ}x-a?Jsx))ntoCLs0Vk5;u}r5R8pK^$QHI~usz~NY zl19>W_Cjy8QC4cgB8 z+uSrGy3~lvjAd-)%P5naKE7jIBuv?@byo61>X*pbDJIz@W{U|diEoZFX3xe1uU=)e zGbxNrP&wlGTq3JG;)!{c8lCx^RU%lOMv72Z8`KJI`pIdQWBPfy&VlKWP|=$lq1eUA zr*etyrP@=r94+yCL_m-HLGmAaYXZW-LwoN%dhpPJokw?nZ1>J0c9>`P?A^cj@EAS* zh{KEB663DM_88}82smvKZO06zd^M>n<#UPM>}`EMocGxHsYm>p9D$65_3qs9nd1ym9PDeEL!qC=W65MDUm!&zk;hDiaehbD zM}je>kG$VjMA1EI#OP?D$Qb7wp{LKC(3%r2qGf;0!9eb<%Jz6jx{Z1_9FdNajk^|i zVHt$mC<|JJYH8JzWD^6K*GVD$s$N6{R2b%9%xt3*{i>Jfl)Q!9Zz4A&t)k{&a@O^- zB9qJ7ynIV>7#Q(x1vE<68x8`kl9YmwIt|4!k^<#4L7CH3nM!)bUD7fcS-VR;121zz zifQ%K$1taYS;?7K#2@Wcd8j^Eh_1P}-MqIbSy5V&j?K^BG`p>twB{R!e4SRB`%_#- z^R9d)Z61yn+)kGD7q)I)U0t0O{p@PGb%}S4g9i>bcUrH}+=X5(xZCFD=bLlaH@D5X z^VctI-`far~VnExnzt(MnGJrFq!*dJFEJfci<=ac|A+XquYhO0T&b z+^J1ZXA6x%Kr8-ij01v@=XOt?7-reY6UR=Th)$j; zYqe=EPt03R4AE)ndwI?o-;Fp~oqRE1Fo#31A5hQn-L4-F;!wFi=c_dEhMmkGnzAl4 zX4D3TB)*0_YFt^|^SWuE1FH$6Itj#KM!kYl4VoKs63@J2WYgUsp&Y0FysXhz1f!nD z#hKc!;nQQDID*4kS(kvVyTQp59V!GTPaq3-2qWas?6J<7nb$|E>B$pu>WQnKh~(5m z$mwVLYi)j%#{Iy|QSUu~XH)lW7Ii&S_Kn-IRuHf;8!nVs`w zcnp2>f^IjcG`*V-JQOA?OT~q*ahyt792Fso>1-;S_@Z0sV>i}5QkRt+2(sO-Pd&hQ zzwyLx&!qg(F2QD&(>aS#2TBonN-)V2;s>tQ!(=?Cq6&imHAmWZtW>AFaxf>%A z7;85|G3HP8P(FfH9%Bloq@qL6@;Hqe!!sgEgCI$;7g#Cn!^o|m4RcwjA*7tsRYlT{ zQhQVG;QADOmK1mWK9voPFyWnQQp$#i#Z87C)JN{jDfUucq$(}54P9SHMZk`vz)IoqR^okKLK(qn2sODE#$C?EMjU+T8Cf0%iYt<_7H%bAUHWAhE6GR2 z>E#tYfuqP%kuOo$cA!Pg|{gL2m|$E_0;UA>R>9@XV}BCrvmlc>tSlzRO<*7 z#1$9I_CjC2)rK*u*3vJ^U}IsdxZwq!naZtfB=iUP0IT1W6{o7*rF2maB2AX%&M1J$ z!I37bYT=|FwKp$P1R7F*8^)buen_&x#wyy4yjC{c;!1$bUMP|`UIAanuV|3MpO`>N znZxZ2i7(w$f2G@NxEZ|5f+jMtyuNNf;E}ry&)yifSPLG@7RbBAq=8Yyj1L7?ZPQ_0 z%8GmDtAYuMMqd})z7l~Pzlgh5fvs8Yl-;M;Sv#N>>4H%X#1wPVcTDG#97vrGo=LGW8_pZVeK}yB*(@tkQa4O{+rz689OV9=x=QHrTq@q~6 zi6s#=baSs9hz*)_tfStwbZpqeJIUb@n`|D&w_oF#HH4h1F@S1+$&tE2oDNUEh)v*X zwLvBtc+;lCh}}5C{ovI-42p<0mi%<&3(NW@g|d;_kXBVSK27i@q7- zHTi*LgJu;;AsHp)(|C;$1b~?JgK?c63aQ(&l6=bCntq9 zRGnCd<~X8mWjqjAB%viRU6Pq4XFYLFc zu^vc8S)@lJCS)|wGCphFXQCC)3=u9uiCE(E3dPiYj zfne-iKn`M*tx_u;Y{+cu15`u`a?Mg!WW?}QyE|3Sk!QjUF#{p9K9JIF825d>tG*Dd z$-_E5F&Yzt$&$y1+FV--c4-!Ca>=@osuwW9ant8?TkBTFZRHZ?Hy+#TkUfytOS`;T zr_63~i+IfGw9vI4Kzls?k6QC?+I0(;(XL!jK5BN7&4a}mcLRD5O9qq(cG ziyWuW^s&`e6k~C8P5zW@P{?@uyp8xNe3jXeH8Yd?yk^@guRXN~YrQ_bm};y@t2Dg% zEYQUEl4AsMvP)TEO&_X>?5PM&)_SX2WP54M1OqZDd>naytwWe|8q&PdbApN8ahqb- zDT`df&`x}QDY6{ms9XC6Gg=y@6T+s|;OcZMJyHb3C+KuNrqE+O62A*meiDp{VT@#C zKZK(7$)qcV){Ya6nOK=F7YRN*j&Y`3L7yUw7}lQ_6YdyRtT!n(wK%1Z@n`cvZ2)Hp z5-OGHrrdaqih$Nrw8Mf#tCDMBDy3VLW==ZeX)5D~`4lqRrP>@t_dKokiqvf~Xw=Bx z=IGPpKLnN$92L(9H&6P1hJ3H%K-QKCpAgJ{E3{v!e0Fy%3fJUeLdE!|jE9>VEf!bQ zK~Xe9e3x9Da8nQcHR5$5<0<#D7QQR7OxQ?mhB0rt#;zmfGM^|um>RQG3RRTGYO_rl zwXNBXBAHGpiWwLft|tvj5n~EeMny-Z)-5EI4ONWlWPDhdX*>1z0~MzT(?wAdw~*&J zIrM=@JVmVBl~XA(+I$_uX37fZL~`FXA-48@9od_&XI*AA$M!p%T92A6%vUry*MX@B z)ZXCl%d&>GTC;9!xIFVw#ImJ6ubA)@e7L(Xv}Rhi3BnpV+~?`cgA(0&w^ zGBR~BJLCj$HLBk+rD;w@HC{*CjMq>yZqFN|YNm>)lnhCT6BS7L|G(2DF#I zC?`iiI#nsII?CJHp}nuySHht=lvLj?$~3h&@>4hAzrJS5{_Dp$#F6R{N^)mTCOW(; v`wx`;8+SeVMn{hy%0Ma{%dt#zR6FO}Ln7y;$)k;_HWn7O*5`+!Z0Y, 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 \n" +"Language-Team: Finnish \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 index 0000000000000000000000000000000000000000..ede0b2f5b10420e63bffca8cac0c32a4256e4dec GIT binary patch literal 15259 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, 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 \n" +"Language-Team: Polish \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 index 0000000000000000000000000000000000000000..7a7e7122d8617c895b659e614b64dbe0da21685a GIT binary patch literal 19687 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 nVwgQilxWQyP, 2011. +# Yuri Kozlov , 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 \n" +"Language-Team: Russian \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 index 0000000..b2ef767 --- /dev/null +++ b/src/po/sudo.pot @@ -0,0 +1,735 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \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 index 0000000000000000000000000000000000000000..e2d0047610ed918f98857e1597189c7737d7008f GIT binary patch literal 20309 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 Cg5n$i literal 0 HcmV?d00001 diff --git a/src/po/uk.po b/src/po/uk.po new file mode 100644 index 0000000..1fd3a15 --- /dev/null +++ b/src/po/uk.po @@ -0,0 +1,752 @@ +# Ukrainian translation for sudo. +# This file is put in the public domain. +# +# Yuri Chornoivan , 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 \n" +"Language-Team: Ukrainian \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"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 index 0000000000000000000000000000000000000000..0b2efe302a5d538d827708f63d5d31d5c96143fa GIT binary patch literal 13332 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 literal 0 HcmV?d00001 diff --git a/src/po/zh_CN.po b/src/po/zh_CN.po new file mode 100644 index 0000000..09f2fc9 --- /dev/null +++ b/src/po/zh_CN.po @@ -0,0 +1,740 @@ +# Chinese simplified translation for sudo. +# sudo 的简体中文翻译。 +# This file is put in the public domain. +# Wylmer Wang , 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 \n" +"Language-Team: Chinese (simplified) \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 "未知信号" diff --git a/src/preload.c b/src/preload.c index 9e77f0b..cb0bdde 100644 --- a/src/preload.c +++ b/src/preload.c @@ -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 } }; diff --git a/src/selinux.c b/src/selinux.c index b5c3dc8..dc51973 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -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; } diff --git a/src/sesh.c b/src/sesh.c index e0aef78..f6818ce 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -26,16 +26,26 @@ #include #include #include +#ifdef HAVE_SETLOCALE +# include +#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); } diff --git a/src/sudo.c b/src/sudo.c index 1f9b565..658d23e 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -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); diff --git a/src/sudo.h b/src/sudo.h index 46a68f1..cbf4860 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -25,13 +25,14 @@ #define _SUDO_SUDO_H #include - #include + #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 diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 0be9d31..0a4d511 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -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); } diff --git a/src/tgetpass.c b/src/tgetpass.c index bbd5652..f1e9dac 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -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); } diff --git a/src/utmp.c b/src/utmp.c index dc6d45f..befbaf6 100644 --- a/src/utmp.c +++ b/src/utmp.c @@ -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 6b9cd92..77daeb5 100644 --- 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] diff --git a/zlib/Makefile.in b/zlib/Makefile.in index 469db66..10faf0b 100644 --- a/zlib/Makefile.in +++ b/zlib/Makefile.in @@ -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 -- 2.30.2