diff -Nru sudo-1.8.19p1/ChangeLog sudo-1.8.20p2/ChangeLog --- sudo-1.8.19p1/ChangeLog 2016-12-20 17:29:40.000000000 +0000 +++ sudo-1.8.20p2/ChangeLog 2017-05-31 15:17:29.000000000 +0000 @@ -1,3 +1,1048 @@ +2017-05-31 Todd C. Miller + + * NEWS, configure, configure.ac: + Sudo 1.8.20p2 + [47836f4c9834] + + * src/ttyname.c: + A command name may also contain newline characters so read + /proc/self/stat until EOF. It is not legal for /proc/self/stat to + contain embedded NUL bytes so treat the file as corrupt if we see + any. With help from Qualys. + + This is not exploitable due to the /dev traversal changes in sudo + 1.8.20p1 (thanks Solar!). + [15a46f4007dd] + +2017-05-30 Todd C. Miller + + * src/ttyname.c: + Use /proc/self consistently on Linux. As far as I know, only AIX + doesn't support /proc/self. + [6f3d9816541b] + + +2017-05-29 Todd C. Miller + + * NEWS, configure, configure.ac: + Sudo 1.8.20p1 + [94d010e2bb50] + + * src/ttyname.c: + Fix for CVE-2017-1000367, parsing of /proc/pid/stat on Linux when + the process name contains spaces. Since the user has control over + the command name this could be used by a user with sudo access to + overwrite an arbitrary file. Thanks to Qualys for investigating and + reporting this bug. + + Also stop performing a breadth-first traversal of /dev when looking + for the device. Only the directories specified in search_devs[] are + checked. + [d5dd22356194] + +2017-05-11 Todd C. Miller + + * plugins/sudoers/Makefile.in: + Fix "make check" when openssl or gcrypt is used. Bug #787 + [fd76c0bd8b80] + +2017-05-10 Todd C. Miller + + * plugins/sudoers/sudoreplay.c: + Only display string version of errno if sudo_ev_add() fails for now + [24244a02c93f] + +2017-05-08 Todd C. Miller + + * NEWS: + update + [8e3359235e24] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Be clear that #includedir diverts control to the files in the + specified directory and, when parsing of those files is complete, + returns control to the original file. Bug #775 + [f68769f15356] + +2017-05-07 Todd C. Miller + + * plugins/sudoers/po/sr.mo, plugins/sudoers/po/sr.po, po/sr.mo, + po/sr.po: + sync with translationproject.org + [4552eaf8fabf] + +2017-05-05 Todd C. Miller + + * NEWS: + update + [53d1c9424816] + + * src/exec_monitor.c: + Fix a hang introduced in the last commit. Don't close the pty slave + until after we have the controlling tty. + [c9c19beb60ed] + + * src/exec_monitor.c, src/exec_pty.c: + If any of std{in,out,err} are not hooked up to a tty only interpose + ourselves with a pipe if the plugin will actually log the data. This + avoids a problem with non-interactive commands where no tty is + present where sudo will consume stdin even when log_input is not + enabled in sudoers. + [a79edafdd307] + + * NEWS: + update + [144ff056cd01] + + * doc/TROUBLESHOOTING: + Update based on information from Michael Felt. + [7ea34380ba1d] + +2017-05-04 Todd C. Miller + + * plugins/sudoers/sudoreplay.c: + In check_input() when switch()ing on the return value of read(), use + the default label instead of 1 for the success case. It is only + reading a single byte so the two are equivalent but it reads better + using default. + [860682b86af5] + + * plugins/sudoers/sudoreplay.c: + Check sudo_ev_add() return value. Coverity CID 168362 + [b69779d3801f] + + * plugins/sudoers/iolog.c: + Add io_open() wrapper for open(2) that retries with PERM_IOLOG if + open(2) fails with EACCES. Use io_open() instead of duplicate copies + of the same fallback code. + [09f7992f681b] + + * plugins/sudoers/iolog.c: + Don't retry the open() if set_perms() fails. + [0808a9157037] + + * plugins/sudoers/iolog.c: + Fix typo (fd2 vs. fd) caught by coverity, CID 168359. + [f68df770e06f] + + * po/hu.mo, po/hu.po: + sync with translationproject.org + [ebef76dc27be] + +2017-05-03 Todd C. Miller + + * INSTALL: + Warn people not to use --enable-asan in production. + [ecb5c1143ef4] + + * configure, configure.ac, src/Makefile.in: + Move the invocation of check_noexec into the main "check" target but + only run it if not cross compiling and whe CHECK_NOEXEC is not + empty. + [cba8fd3337c2] + + * src/Makefile.in: + Move @CHECK_NOEXEC@ to TEST_PROGS so it gets cleaned up properly. + [efaa9c44e749] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Move syslog_maxlen to the "Integers" section. Move syslog_goodpri + and syslog_badpri to the "Strings at can be used in a boolean + context" section. + [342dfe9dd37c] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Fix a pasto that resulted in an extra (empty) syslog_goodpri list + entry. + [eb0563c5b8dc] + + * MANIFEST, plugins/sudoers/regress/sudoers/test20.in, + plugins/sudoers/regress/sudoers/test20.json.ok, + plugins/sudoers/regress/sudoers/test20.out.ok, + plugins/sudoers/regress/sudoers/test20.toke.ok, + plugins/sudoers/regress/sudoers/test21.in, + plugins/sudoers/regress/sudoers/test21.json.ok, + plugins/sudoers/regress/sudoers/test21.out.ok, + plugins/sudoers/regress/sudoers/test21.toke.ok: + Add tests for parsing tuples and syslog options. + [86f3da23b4df] + + * plugins/sudoers/defaults.c: + Allow the syslog Defaults option to be used in a "true" boolean + context and use the compiled in default log facility in this case. + [4fab25217602] + + * plugins/sudoers/defaults.c: + Allow a tuple to be set to boolean true. Regression introduced by + refactor of set_default_entry() in sudo 1.8.18. + [9b38728deb27] + +2017-05-01 Todd C. Miller + + * doc/TROUBLESHOOTING: + Replace the list of "dangerous" environment variables and explain + how sudo handles the environment instead. + [966cf87d1bed] + +2017-04-28 Todd C. Miller + + * lib/util/glob.c: + Fix exponential behavior in glob() with respect to multiple '*'. See + https://research.swtch.com/glob Adapted from https://perl5.git.perl. + org/perl.git/commit/33252c318625f3c6c89b816ee88481940e3e6f95 + [3d187b0fb764] + + * src/exec_pty.c: + We no longer need to write to the tty if the command was killed by a + signal. Sudo will terminate itself with the same signal the command + died from. Unfortunately, we lose the "core dumped" bit since sudo + itself will not dump core, but there doesn't appear to be a way + around that. + [1be331e0c4d4] + +2017-04-27 Todd C. Miller + + * src/sudo.c: + On Linux, if the command we ran dumped core, set PR_SET_DUMPABLE to + 0. This will prevent sudo itself from dumping core in this case. + [cf5a5793ebf4] + + * INSTALL: + Update path to sudo_noexec.so + [14e995667c8b] + + * src/sudo.c: + If the command terminated due to a signal, sudo will send that same + signal to itself so the parent shell knows the command died from a + signal. However, we don't want sudo itself to dump core. + [8d823e6ec41e] + +2017-04-26 Todd C. Miller + + * NEWS: + sync + [1704e6005b07] + + * src/sudo.c: + The fix for Bug #722 contained a typo/thinko that resulted in the + exit status being 0 when a command was killed by a signal other than + SIGINT. This fixes the signal handler setup so sudo will terminate + with the same signal as the command. Bug #784. + [50b988d0c97f] + + * sudo.pp: + Better check for /etc/rc.d/rc2.d/S90sudo on AIX + [93de5e34a6a3] + + * src/Makefile.in: + Don't install the rc.d link when installing to a DESTDIR. DESTDIR is + generally only set when installing to a temporary directory for + packaging in which case the link should be made in a post-install + script. + [4200ef757b56] + + * plugins/sudoers/Makefile.in, sudo.pp: + In "make install", install sample sudoers file as /etc/sudoers.dist + and copy it to /etc/sudoers if there is no existing /etc/sudoers. + Packages either contain /etc/sudoers (RPM and Debian) or + /etc/sudoers.dist (everything else). + [40f8e5806d71] + + * Makefile.in, mkdep.pl: + Allow "make dist" and "make depend" to work for out of tree builds. + [7b7ba3f38abb] + +2017-04-24 Todd C. Miller + + * lib/zlib/Makefile.in: + Add missing $(srcdir) prefix to shlib_exp definition. + [c63e8e73507e] + +2017-04-21 Todd C. Miller + + * include/sudo_compat.h: + Fix typo in killpg macro. + [f7392d21c915] + + * include/sudo_compat.h: + Fix the killpg macro for systems without killpg() in libc. + [ba0c5162bc4a] + +2017-04-20 Todd C. Miller + + * src/exec_pty.c: + Use the standard idiom for popping all entries from a tail queue. + The llvm checker gets confused by TAILQ_REMOVE and generate use- + after-free false positives. + [a88cacd23f09] + + * src/exec_monitor.c, src/exec_nopty.c: + rewrite errpipe callbacks + [5c75729cea19] + + * src/exec_monitor.c, src/exec_nopty.c: + use pipe2() with O_CLOEXEC instead of pipe() + fcntl() and + FD_CLOEXEC + [c8c9cc31c43a] + + * src/exec_pty.c: + init io_pipe[][] to -1, not 0 + [71012940a8f1] + +2017-04-19 Todd C. Miller + + * plugins/sudoers/sssd.c: + In sudo_sss_check_user() it is not possible for handle to be NULL. + [de41ba76a4ce] + + * plugins/sudoers/sssd.c: + Fix a use after free when the fqdn sudoOption is set and no hostname + value is present in sssd.conf. + [716a7c502cc0] + + * src/sudo.c: + Avoid unused variable when getgrouplist_2() is available. It would + be nicer to just provide getgrouplist_2() (or the equivalent) and + avoid the ugly #ifdefs. + [2c7ac21feb5f] + + * plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po, po/nb.mo, + po/nb.po: + sync with translationproject.org + [e91a983f9de6] + +2017-04-13 Todd C. Miller + + * plugins/sudoers/Makefile.in: + regen + [790d9a05f585] + +2017-04-12 Todd C. Miller + + * src/ttyname.c: + In sudo_ttyname_scan() if dir is the empty string, set errno to + ENOENT before returning. + [f531ea6e489e] + +2017-04-11 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Try to make it clear that when match_group_by_gid is enabled, groups + in sudoers are looked up by group name instead of group ID. This + doesn't usually cause problems, but if there are conflicting group + entries (for example, from a local /etc/group file and an LDAP or AD + group database), whether the group is resolved by name or ID can be + used to work around conflicts. + [fe3bfca4fcce] + +2017-04-07 Todd C. Miller + + * plugins/sudoers/po/ja.mo, plugins/sudoers/po/ja.po, po/ja.mo, + po/ja.po: + sync with translationproject.org + [94d36c45e345] + + * plugins/sudoers/regress/parser/check_digest.c: + plug memory leak in check_digest + [40aab9e6e365] + + * src/exec.c: + Check return value of dispatch_pending_signals() in case we received + SIGINT or SIGQUIT before executing the command. + [218758d1560d] + +2017-03-30 Todd C. Miller + + * configure, configure.ac: + back out unintentional change to the version number + [799b396c1c69] + +2017-03-28 Todd C. Miller + + * plugins/sudoers/po/cs.mo, plugins/sudoers/po/cs.po, + plugins/sudoers/po/da.mo, plugins/sudoers/po/da.po, + plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po, + plugins/sudoers/po/hr.mo, plugins/sudoers/po/hr.po, + plugins/sudoers/po/it.mo, plugins/sudoers/po/it.po, + plugins/sudoers/po/pl.mo, plugins/sudoers/po/pl.po, + plugins/sudoers/po/pt_BR.mo, plugins/sudoers/po/pt_BR.po, + plugins/sudoers/po/uk.mo, plugins/sudoers/po/uk.po, + plugins/sudoers/po/vi.mo, plugins/sudoers/po/vi.po, + plugins/sudoers/po/zh_CN.mo, plugins/sudoers/po/zh_CN.po, po/cs.mo, + po/cs.po, po/da.mo, po/da.po, po/de.mo, po/de.po, po/fr.mo, + po/fr.po, po/hr.mo, po/hr.po, po/it.mo, po/it.po, po/pl.mo, + po/pl.po, po/pt_BR.mo, po/pt_BR.po, po/tr.mo, po/tr.po, po/uk.mo, + po/uk.po, po/vi.mo, po/vi.po, po/zh_CN.mo, po/zh_CN.po: + sync with translationproject.org + [04c4a3ec233d] + +2017-03-27 Todd C. Miller + + * configure, configure.ac, plugins/sudoers/Makefile.in, + plugins/sudoers/regress/parser/check_digest.c, + plugins/sudoers/regress/parser/check_digest.out.ok: + Make check_digest test sudo_filedigest() itself instead of the + underlying SHA2 functions. That way we can test it regardless of + whether we use sudo's SHA2 functions or a library version. + [9834b37f1fb0] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document that commands matched by "sudo ALL" are not affected by + fdexec. + [7cc3b770a2ff] + +2017-03-24 Todd C. Miller + + * NEWS: + Update for 1.8.20 + [14a09000c1dc] + + * plugins/sudoers/po/sudoers.pot: + regen for restricted_env_file + [81290b370c95] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Mention that iolog_user is useful for NFS. + [9c8f9dfdebf0] + +2017-03-23 Todd C. Miller + + * plugins/sudoers/iolog.c: + Only retry mkdir or create with PERM_IOLOG if errno is EACCES. Also + always use PERM_IOLOG for mkdtemp() since we cannot retry if it + fails. Since we are guaranteed to create a new directory there's no + real need to try w/o PERM_IOLOG in this case. + [c3c67d78e46a] + +2017-03-22 Todd C. Miller + + * plugins/sudoers/iolog.c: + Add fallback to PERM_IOLOG when making the final componenet of + iolog_dir. + [72924e4c8f5d] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/env.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h: + Add restricted_env_file which is like env_file but subject to the + same restrictions as the user's own environment. + [ec887cc57a8b] + + * plugins/sudoers/iolog.c: + quiet a warning on older zlib + [bcd3cac968a2] + + * plugins/sudoers/iolog.c, plugins/sudoers/timestamp.c: + cast mode_t to unsigned int when printing with %o + [f9ca9ead134e] + +2017-03-21 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot: + regen + [f62e81f74d10] + + * plugins/sudoers/iolog.c, plugins/sudoers/mkdir_parents.c, + plugins/sudoers/timestamp.c: + Set umask temporarily when creating files instead of changing the + mode after the fact. This is slightly less error prone. + [a9b4cf336b73] + + * plugins/sudoers/iolog.c: + remove now-useless variable + [9a36b2449ac4] + + * plugins/sudoers/mkdir_parents.c: + Don't set owner/mode on directories that already exist, only on + newly-created ones. + [2b616be0e165] + + * plugins/sudoers/iolog.c, plugins/sudoers/mkdir_parents.c: + Explicitly set the file mode of I/O log files so the mode is not + affected by the invoking user's umask. + [ec7d5dd47b6b] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/iolog.c, plugins/sudoers/mkdir_parents.c, + plugins/sudoers/set_perms.c, plugins/sudoers/sudoers.h, + plugins/sudoers/timestamp.c: + Add PERM_IOLOG so we can create I/O log files on an NFS-mounted + filesystem where root is remapped to an unprivileged user. + [01804a971cd5] + + * plugins/sudoers/mkdir_parents.c: + Restore the '/' in the path before returning if we encounter an + error. + [bb12cfce16fd] + +2017-03-20 Todd C. Miller + + * plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, + plugins/sudoers/timestamp.c: + When creating the timestamp directory, use the group of the + timestamp owner instead of inheriting the group of the parent + directory. + [7a4a10cafe08] + +2017-03-21 Todd C. Miller + + * plugins/sudoers/sssd.c: + zero out nss->handle after it has been freed to make sure we cannot + free it twice + [00d5340b7541] + +2017-03-20 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/iolog.c: + Add iolog_flush option. + [96baa17409cf] + +2017-03-17 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/iolog.c: + Don't allow the user to specify an I/O log file mode that sudo can't + read or write to. I/O logs must always be readable and writable by + the owner. + [b32e2ef04905] + +2017-03-14 Todd C. Miller + + * doc/sudo.cat, doc/sudo.conf.cat, doc/sudo_plugin.cat, + doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoreplay.cat, + doc/visudo.cat: + Regenerate the cat pages with newer mandoc which formats double + quotes as "foo" instead of ``foo''. + [5f14e527ae05] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Make it clear that I/O logs will be complete even if the command run + by sudo is terminated by a signal. The I/O log buffering just + prevents the logs from being displayed in real-time as the command + is running. + [072fd419ac1e] + +2017-03-13 Todd C. Miller + + * src/exec.c, src/exec_monitor.c, src/signal.c, src/sudo.h: + Replace pipe_nonblock() with pipe2() + [c106b62d7835] + + * MANIFEST, config.h.in, configure, configure.ac, + include/sudo_compat.h, lib/util/Makefile.in, lib/util/pipe2.c, + mkdep.pl: + Emulate pipe2() on systems without it. + [5a183dd380f0] + +2017-03-10 Todd C. Miller + + * plugins/sudoers/auth/kerb5.c: + Fix declaration of sudo_krb5_verify() in the case where + krb5_verify_user() is not present. Bug #777 + [eafd4e2d7c7f] + + * plugins/sudoers/rcstr.c: + Use HAVE_STDBOOL_H to detect systems w/o stdbool.h. Bug #778 + [dbac86777429] + +2017-03-09 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [2fc489ddc143] + + * src/exec_monitor.c, src/exec_nopty.c, src/exec_pty.c: + Move SIGCHLD handling into handle_sigchld() functions and move the + remaining bits of dispatch_signal() into signal_pipe_cb() + [b120f5cfa8cc] + +2017-03-08 Todd C. Miller + + * src/utmp.c: + e_termination should be set to the value of WTERMSIG not WEXITSTATUS + [95f37078ae8f] + +2017-03-07 Todd C. Miller + + * MANIFEST, src/Makefile.in, src/exec_nopty.c, src/sudo.h, + src/tcsetpgrp_nobg.c: + Add tcsetpgrp_nobg() which acts like tcsetpgrp() but returns -1 for + a background process. This is safer than blocking SIGTTOU which + would cause tcsetpgrp() to succeed in the background. + [7ab75c47b8bf] + +2017-03-06 Todd C. Miller + + * src/exec_nopty.c: + Prevent sudo from receiving SIGTTOU when it tries to restore the + controlling terminal. There appears to be a race with the shell + (bash) which we may lose. + [aab018fb9940] + +2017-03-03 Todd C. Miller + + * plugins/sudoers/timestamp.c, src/exec_monitor.c: + Add some casts to quiet gcc warnings on Solaris and remove a now- + useless debug printf. + [16c862eab0ce] + + * src/exec_pty.c: + change debug info when suspending sudo + [f5c5ee07f8e3] + + * MANIFEST, src/Makefile.in, src/exec.c, src/exec_monitor.c, + src/exec_nopty.c, src/exec_pty.c, src/sudo_exec.h: + Reorganize the command execution code to separate out the pty and + non-pty code paths into their own event loops. The non-pty exec code + is now contained in exec_nopty.c and the pty exec code is split + between exec_pty.c (parent process) and exec_monitor.c (session + leader). This results in a small bit of duplicated code but improves + readability. Some of the duplicated code will fall out in future + changes to the event subsystem (the signal pipe). + [fe239d2a3cbd] + +2017-02-26 Todd C. Miller + + * lib/util/ttysize.c, src/exec_pty.c: + Remove support for the TIOCGSIZE ioctl. Systems that use this rather + than TIOCGWINSZ are too old for sudo to build on anyway. + [0179b16c70f9] + +2017-02-24 Todd C. Miller + + * src/exec.c, src/exec_pty.c: + Set the child pid to -1 after we've waited for it and take care to + avoid killing pid -1. This makes it a bit more explicit and removes + the need for a separate variable to track the child's status. Sudo + already stops processing signals after it receives SIGCHLD so it is + not vulnerable to CVE-2017-2616. + [1123704858ae] + +2017-02-22 Todd C. Miller + + * doc/visudo.cat, doc/visudo.man.in, doc/visudo.mdoc.in: + Update the description of strict mode to current reality. Aliases + haven't needed to be defined before they are used since sudo 1.7. + [9dc4ce4ec538] + + * doc/visudo.cat, doc/visudo.man.in, doc/visudo.mdoc.in, + plugins/sudoers/regress/visudo/test2.err.ok, + plugins/sudoers/regress/visudo/test3.err.ok, + plugins/sudoers/visudo.c: + Go back to using a Warning/Error prefix in the message printed to + stderr for alias problems. Requested by Tomas Sykora. + [ad4dc6e34222] + +2017-02-21 Todd C. Miller + + * plugins/sudoers/filedigest.c, plugins/sudoers/filedigest_openssl.c: + fix copyright years + [b9f013f95bb2] + +2017-02-20 Todd C. Miller + + * INSTALL, MANIFEST, configure, configure.ac, mkdep.pl, + plugins/sudoers/Makefile.in, plugins/sudoers/filedigest_gcrypt.c: + Add support for using the message digest functions in libgcrypt + instead of sudo's own SHA2 implementation. + [0259467c38dd] + + * INSTALL, MANIFEST, configure, configure.ac, mkdep.pl, + plugins/sudoers/Makefile.in, plugins/sudoers/filedigest_openssl.c: + Add support for using the message digest functions in OpenSSL + instead of sudo's own SHA2 implementation. + [d77639c97e43] + + * MANIFEST, plugins/sudoers/Makefile.in, plugins/sudoers/digestname.c, + plugins/sudoers/filedigest.c, plugins/sudoers/ldap.c, + plugins/sudoers/match.c, plugins/sudoers/parse.h, + plugins/sudoers/sssd.c, plugins/sudoers/visudo_json.c: + Move the file digest code out of match.c and into filedigest.c. + Inspired by RedHat changes that used libgcrypt. Also add + digest_type_to_name() to map a sudo digest type (int) to a name + (string) and use it. + [9213d8c94b8f] + + * plugins/sudoers/gmtoff.c: + Check for gmtime() or localtime() returning NULL and just use a zero + offset in that case. Should not be possible. + [ed210dd8bf46] + +2017-02-18 Todd C. Miller + + * plugins/sudoers/sudoers2ldif: + Add support for ROLE, TYPE, PRIVS, LIMITPRIVS, TIMEOUT, NOTBEFORE + and NOTAFTER. + [d0310b017c78] + + * config.h.in, configure, configure.ac, plugins/sudoers/timestr.c: + strftime() was in C89 so use it unconditionally. + [87bf66aa18fd] + + * MANIFEST, config.h.in, configure, configure.ac, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in, include/sudo_debug.h, + lib/util/sudo_debug.c, lib/util/util.exp.in, + plugins/sudoers/Makefile.in, plugins/sudoers/gentime.c, + plugins/sudoers/gmtoff.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.h, plugins/sudoers/gram.y, + plugins/sudoers/parse.c, plugins/sudoers/parse.h, + plugins/sudoers/regress/parser/check_gentime.c, + plugins/sudoers/regress/sudoers/test19.in, + plugins/sudoers/regress/sudoers/test19.json.ok, + plugins/sudoers/regress/sudoers/test19.out.ok, + plugins/sudoers/regress/sudoers/test19.toke.ok, + plugins/sudoers/regress/visudo/test10.out.ok, + plugins/sudoers/regress/visudo/test10.sh, + plugins/sudoers/sudoers_version.h, plugins/sudoers/testsudoers.c, + plugins/sudoers/toke.c, plugins/sudoers/toke.l: + Add NOTBEFORE and NOTAFTER command options similar to what is + already available in LDAP. + [3ba0f9567f83] + +2017-02-16 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [f2876eadc1f5] + + * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, include/sudo_plugin.h: + Bump version to 1.11 for timeout entry in settings[] + [7b288e4bab93] + + * doc/sudo.conf.cat, doc/sudo_plugin.cat, doc/sudoers.ldap.cat, + doc/sudoreplay.cat, doc/visudo.cat: + regen + [8c059a57d367] + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in, plugins/sudoers/def_data.c, + plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, + plugins/sudoers/policy.c, plugins/sudoers/sudoers.c, + plugins/sudoers/sudoers.h, src/parse_args.c, src/sudo_usage.h.in: + Add a command line option to specify the command timeout, as long as + sudoers does not specify a shorter time limit. + [a8ef7f923d0a] + +2017-02-15 Todd C. Miller + + * plugins/sudoers/gram.c, plugins/sudoers/gram.y: + Better error message when the timeout value does not parse. + [2360fb093e3e] + + * plugins/sudoers/timeout.c: + set errno to ERANGE not EOVERFLOW on range error + [9654e1acab0d] + +2017-02-14 Todd C. Miller + + * plugins/sudoers/Makefile.in: + regen + [46a124dd72aa] + + * plugins/sudoers/Makefile.in: + Only inhibit ASAN leak detector for tests that result in a parse + error. The parser cannot currently clean up completely on error. + [b2f82dcd2545] + + * plugins/sudoers/gram.c, plugins/sudoers/gram.y: + Plug some memory leaks found by ASAN. + [08189098a5b6] + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + List SELinux role/type for "sudo -l" with LDAP and SSSd backends. + Also fix printing of the timeout. + [740723a49ab5] + + * plugins/sudoers/gram.c, plugins/sudoers/gram.y: + Only inherit SELinux role/type and Solaris privilege sets if the + command does not include any. Previously, a command with only a role + would inherit a type from the previous command which is not what was + intended. + [171a3ad972e7] + + * doc/fixman.sh, doc/fixmdoc.sh, doc/sudoers.cat, doc/sudoers.man.in, + doc/sudoers.mdoc.in, plugins/sudoers/gram.c, plugins/sudoers/gram.h, + plugins/sudoers/gram.y, plugins/sudoers/parse.h: + Split out tags again so they must precede the command and not allow + them to be mixed in with options. + [e7e7d60316cc] + + * MANIFEST, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/Makefile.in, plugins/sudoers/def_data.c, + plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, + plugins/sudoers/defaults.c, plugins/sudoers/defaults.h, + plugins/sudoers/gram.c, plugins/sudoers/gram.h, + plugins/sudoers/gram.y, plugins/sudoers/ldap.c, + plugins/sudoers/mkdefaults, plugins/sudoers/parse.c, + plugins/sudoers/parse.h, plugins/sudoers/policy.c, + plugins/sudoers/regress/sudoers/test17.in, + plugins/sudoers/regress/sudoers/test17.json.ok, + plugins/sudoers/regress/sudoers/test17.out.ok, + plugins/sudoers/regress/sudoers/test17.toke.ok, + plugins/sudoers/regress/sudoers/test18.in, + plugins/sudoers/regress/sudoers/test18.json.ok, + plugins/sudoers/regress/sudoers/test18.out.ok, + plugins/sudoers/regress/sudoers/test18.toke.ok, + plugins/sudoers/testsudoers.c, plugins/sudoers/timeout.c, + plugins/sudoers/toke.c, plugins/sudoers/toke.l, + plugins/sudoers/visudo_json.c: + Add support for command timeouts in sudoers. After the timeout, the + command will be terminated. + [a36a748e9324] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/gram.c, plugins/sudoers/gram.h, + plugins/sudoers/gram.y, plugins/sudoers/parse.h: + Merge command tags, SELinux type/role and Solaris privs settings + into "command options". This relaxes the order of things so tags and + other options can be interspersed. + [0970fd78cbe8] + + * plugins/sudoers/rcstr.c: + supress cppcheck memory leak false positive + [e0caf2275a44] + + * lib/util/strtoid.c: + fix typo that prevented compilation on FreeBSD + [27866f6a2b5e] + +2017-02-13 Todd C. Miller + + * lib/util/Makefile.in: + Link vsyslog.lo directly into vsyslog_test to make sure the syslog() + stub gets called. Otherwise, the real syslog will get called via + libutil on AIX. + [693bc8411a98] + + * lib/util/regress/vsyslog/vsyslog_test.c: + Fix final test with a format > 2048 bytes. Keep track of tests run + in the syslog() stub so we can detect if the stub is not being + called. + [d10d784446c1] + + * lib/zlib/deflate.c: + avoid redefining the MIN macro + [45b7b0ba0f01] + + * plugins/sudoers/parse.h, plugins/sudoers/timestr.c: + Include parse.h in timestr.c which is where function prototype + lives. + [3ec9ec84a84c] + + * plugins/sudoers/toke.c, plugins/sudoers/toke.l: + Fix for including a sudoers file that begins with the letter 'i'. + The hack to determine whether we are parsing an include or + includedir is no longer safe now that relative include paths are + permitted. Bug #776. + [4d9691a43867] + +2017-02-10 Todd C. Miller + + * plugins/sudoers/def_data.c, plugins/sudoers/def_data.in: + Display the value of syslog_maxlen in sudo -V output. + [0841ad36531c] + +2017-02-06 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/defaults.c: + Add ignore_unknown_defaults flag to ignore unknown Defaults entries + in sudoers instead of producing a warning. + [a7fdb44677dd] + +2017-01-27 Todd C. Miller + + * plugins/sudoers/match.c: + Always set the close-on-exec bit on the fd used to generate the + digest (i.e. the command to run) on systems that lack fexecve(2). + That way we don't need to explicitly close it using #ifdefs. + [f840a22fac1c] + + * plugins/sudoers/po/ca.mo, plugins/sudoers/po/ca.po, + plugins/sudoers/po/da.mo, plugins/sudoers/po/da.po, + plugins/sudoers/po/eo.mo, plugins/sudoers/po/eo.po, + plugins/sudoers/po/sr.mo, plugins/sudoers/po/sr.po, + plugins/sudoers/po/sv.mo, plugins/sudoers/po/sv.po, po/ca.mo, + po/ca.po, po/eo.mo, po/eo.po, po/sv.mo, po/sv.po: + sync with translationproject.org + [57e877674892] + + * NEWS: + first updates for 1.8.20 + [118208688b08] + + * configure, configure.ac: + sudo 1.8.20 + [6cba125ea903] + +2017-01-25 Todd C. Miller + + * doc/LICENSE, lib/zlib/adler32.c, lib/zlib/compress.c, + lib/zlib/crc32.c, lib/zlib/deflate.c, lib/zlib/deflate.h, + lib/zlib/gzguts.h, lib/zlib/gzlib.c, lib/zlib/gzread.c, + lib/zlib/gzwrite.c, lib/zlib/infback.c, lib/zlib/inffast.c, + lib/zlib/inflate.c, lib/zlib/inflate.h, lib/zlib/inftrees.c, + lib/zlib/trees.c, lib/zlib/uncompr.c, lib/zlib/zconf.h.in, + lib/zlib/zlib.exp, lib/zlib/zlib.h, lib/zlib/zutil.c, + lib/zlib/zutil.h: + update zlib to version 1.2.11 + [75a563663083] + +2017-01-23 Todd C. Miller + + * plugins/sudoers/match.c: + Fix fdexec=never when a digest is present. + [49d3ab5baad0] + +2017-01-22 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, + plugins/sudoers/match.c: + Add new fdexec sudoers setting to allow choose whether execve() or + fexecve() is used. + [6a7623aa9a64] + + * src/exec.c, src/exec_pty.c: + Close execfd in parent processes where it is not needed. + [f44e334d43e2] + +2017-01-21 Todd C. Miller + + * plugins/sudoers/match.c: + Add support for digest matching when the command is a glob-style + pattern or a directory. For example: + + millert ALL = sha224:TmUvLkp3a2txliSC2X6CiK42626qdKsH72m/PQ== /bin/ + millert ALL = sha224:TmUvLkp3a2txliSC2X6CiK42626qdKsH72m/PQ== /bin/* + + would only match /bin/ls (assuming the digest matches). + + Previously, only explicit path matches checked the digest. + [d4f6822ba9bb] + +2017-01-17 Todd C. Miller + + * doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, + doc/sudoers.ldap.mdoc.in, plugins/sudoers/ldap.c: + Add support for SASL_MECH in ldap.conf; Bug #764 + [d057bb7f2ddc] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Fix documentation bug, the contents of env_file have never been + subject to env_keep or env_check. However, variables are only added + if they have not already been preserved. + [4483b1b44709] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + examples/sudoers: + Safer example for rule that can change non-root passwords. GNU + getopts allows options to follow arguments so we need to be able to + deny things like "passwd root -q". From Paul "Joey" Clark. Bug #772 + [c809f1372811] + +2017-01-16 Todd C. Miller + + * plugins/sudoers/ldap.c: + Don't overwrite the return value of ldap_sasl_interactive_bind_s() + by the subsequent call to sudo_set_krb5_ccache_name(). From Paul + Zirnik of SUSE. + [448baff2b586] + + * plugins/sudoers/env.c: + In sudo_unsetenv_nodebug(), decrement envp.env_len after removing + the variable. From Paul Zirnik of SUSE. + [3d87a008671c] + +2017-01-15 Todd C. Miller + + * lib/util/Makefile.in: + only run vsyslog_test if it exists + [5323dfcfb009] + + * MANIFEST, configure, configure.ac, lib/util/Makefile.in, + lib/util/regress/vsyslog/vsyslog_test.c: + Add regress for vsyslog replacement. + [1f767b8f5940] + +2017-01-13 Todd C. Miller + + * configure, configure.ac: + Define HAVE_NANOSLEEP if we find nanosleep in librt + [ec8d949bf411] + + * configure, configure.ac: + sudo_nanosleep not nanosleep in util.exp.in + [18a3bca78962] + + * configure, configure.ac: + add nanosleep to util.exp.in if needed + [6ac2e9266d67] + + * NEWS, configure, configure.ac: + sudo 1.8.19p2 + [9c15593a007a] + + * lib/util/vsyslog.c: + Double the size of new_fmt[] and remove an extraneous break in the + %m handling that was leftover from an earlier edit. + [fcb28dc9cd4e] + + * lib/util/vsyslog.c: + Fix typo, want vsnprintf not snprintf. + [2717f2125ecd] + + * plugins/sudoers/logging.c: + move va_start() in mysyslog() + [b58ec40bbfc3] + + * plugins/sudoers/sudoers.c: + Only treat failure of expand_iolog_path() as fatal if + ignore_iolog_errors is not set. + [1ba009311cf7] + +2017-01-12 Todd C. Miller + + * MANIFEST, config.h.in, configure, configure.ac, + include/sudo_compat.h, lib/util/Makefile.in, lib/util/nanosleep.c, + mkdep.pl, src/exec_pty.c: + When waiting for the parent to grant us the tty, use nanosleep + instead of spinning to avoid hogging the CPU. + [76335b380d7c] + + * src/sudo.c: + Use ROOT_UID instead of 0 + [5ed03a4e0b0b] + +2017-01-09 Todd C. Miller + + * plugins/sudoers/Makefile.in: + regen + [99b26e2c523d] + +2017-01-07 Todd C. Miller + + * MANIFEST, plugins/sudoers/interfaces.c, + plugins/sudoers/regress/visudo/test9.out.ok, + plugins/sudoers/regress/visudo/test9.sh, plugins/sudoers/visudo.c: + Fix crash in visudo introduced in sudo 1.8.9 when an IP address or + network is used in a host-based Defaults entry. Bug #766 + [ff9001f126b5] + +2017-01-05 Todd C. Miller + + * configure, configure.ac, doc/LICENSE: + Avoid using the system strnlen/strndup on AIX < 6. Even if configure + correctly detects it is working on the build machine, the sudo + package may be run on a system with an old libc were it is broken. + [28d148db0aaa] + 2016-12-20 Todd C. Miller * NEWS, configure, configure.ac: diff -Nru sudo-1.8.19p1/config.h.in sudo-1.8.20p2/config.h.in --- sudo-1.8.19p1/config.h.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/config.h.in 2017-05-31 15:13:28.000000000 +0000 @@ -470,6 +470,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MPS_LDAP_SSL_H +/* Define to 1 if you have the `nanosleep' function. */ +#undef HAVE_NANOSLEEP + /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H @@ -515,6 +518,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_PATHS_H +/* Define to 1 if you have the `pipe2' function. */ +#undef HAVE_PIPE2 + /* Define to 1 if you have the `poll' function. */ #undef HAVE_POLL @@ -651,9 +657,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strftime' function. */ -#undef HAVE_STRFTIME - /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H @@ -708,6 +711,9 @@ /* Define if your struct sockaddr has an sa_len field. */ #undef HAVE_STRUCT_SOCKADDR_SA_LEN +/* Define to 1 if `tm_gmtoff' is a member of `struct tm'. */ +#undef HAVE_STRUCT_TM_TM_GMTOFF + /* Define to 1 if `ut_exit' is a member of `struct utmpx'. */ #undef HAVE_STRUCT_UTMPX_UT_EXIT @@ -1047,6 +1053,9 @@ /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + /* Define to 1 to compile the sudoers plugin statically into the sudo binary. */ #undef STATIC_SUDOERS_PLUGIN diff -Nru sudo-1.8.19p1/configure sudo-1.8.20p2/configure --- sudo-1.8.19p1/configure 2016-12-20 17:28:49.000000000 +0000 +++ sudo-1.8.20p2/configure 2017-05-31 15:14:31.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sudo 1.8.19p1. +# Generated by GNU Autoconf 2.69 for sudo 1.8.20p2. # # Report bugs to . # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.8.19p1' -PACKAGE_STRING='sudo 1.8.19p1' +PACKAGE_VERSION='1.8.20p2' +PACKAGE_STRING='sudo 1.8.20p2' PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' @@ -722,6 +722,7 @@ vardir rundir iolog_dir +FILEDIGEST exampledir TMPFILES_D COMPAT_EXP @@ -946,6 +947,8 @@ enable_env_reset enable_warnings enable_werror +enable_openssl +enable_gcrypt enable_hardening enable_pie enable_asan @@ -1531,7 +1534,7 @@ # 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.19p1 to adapt to many kinds of systems. +\`configure' configures sudo 1.8.20p2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1596,7 +1599,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.8.19p1:";; + short | recursive ) echo "Configuration of sudo 1.8.20p2:";; esac cat <<\_ACEOF @@ -1621,6 +1624,10 @@ --enable-env-reset Whether to enable environment resetting by default. --enable-warnings Whether to enable compiler warnings --enable-werror Whether to enable the -Werror compiler option + --enable-openssl Use OpenSSL's message digest functions instead of + sudo's + --enable-gcrypt Use GNU crypt's message digest functions instead of + sudo's --disable-hardening Do not use compiler/linker exploit mitigation options --enable-pie Build sudo as a position independent executable. @@ -1845,7 +1852,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.8.19p1 +sudo configure 1.8.20p2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2554,7 +2561,7 @@ 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.19p1, which was +It was created by sudo $as_me 1.8.20p2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2847,7 +2854,6 @@ as_fn_append ac_func_list " fexecve" as_fn_append ac_func_list " killpg" as_fn_append ac_func_list " nl_langinfo" -as_fn_append ac_func_list " strftime" as_fn_append ac_func_list " pread" as_fn_append ac_func_list " pwrite" as_fn_append ac_func_list " openat" @@ -3046,6 +3052,7 @@ + # # Begin initial values for man page substitution # @@ -3090,6 +3097,7 @@ pam_session=on pam_login_service=sudo PLUGINDIR=/usr/local/libexec/sudo +FILEDIGEST=filedigest.lo # # End initial values for man page substitution # @@ -6339,6 +6347,234 @@ fi +# Check whether --enable-openssl was given. +if test "${enable_openssl+set}" = set; then : + enableval=$enable_openssl; case $enableval in + no) ;; + *) LIBMD="-lcrypto" + FILEDIGEST=filedigest_openssl.lo + if test "$enableval" != "yes"; then + +if ${CPPFLAGS+:} false; then : + + case " $CPPFLAGS " in #( + *" -I${enableval}/include "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CPPFLAGS already contains -I\${enableval}/include"; } >&5 + (: CPPFLAGS already contains -I${enableval}/include) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append CPPFLAGS " -I${enableval}/include" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CPPFLAGS=\"\$CPPFLAGS\""; } >&5 + (: CPPFLAGS="$CPPFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + CPPFLAGS=-I${enableval}/include + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CPPFLAGS=\"\$CPPFLAGS\""; } >&5 + (: CPPFLAGS="$CPPFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + + + +if ${SUDOERS_LDFLAGS+:} false; then : + + case " $SUDOERS_LDFLAGS " in #( + *" -L${enableval}/lib "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS already contains -L\${enableval}/lib"; } >&5 + (: SUDOERS_LDFLAGS already contains -L${enableval}/lib) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append SUDOERS_LDFLAGS " -L${enableval}/lib" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS=\"\$SUDOERS_LDFLAGS\""; } >&5 + (: SUDOERS_LDFLAGS="$SUDOERS_LDFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + SUDOERS_LDFLAGS=-L${enableval}/lib + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS=\"\$SUDOERS_LDFLAGS\""; } >&5 + (: SUDOERS_LDFLAGS="$SUDOERS_LDFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + + if test X"$enable_rpath" = X"yes"; then + +if ${SUDOERS_LDFLAGS_R+:} false; then : + + case " $SUDOERS_LDFLAGS_R " in #( + *" -R${enableval}/lib "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS_R already contains -R\${enableval}/lib"; } >&5 + (: SUDOERS_LDFLAGS_R already contains -R${enableval}/lib) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append SUDOERS_LDFLAGS_R " -R${enableval}/lib" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS_R=\"\$SUDOERS_LDFLAGS_R\""; } >&5 + (: SUDOERS_LDFLAGS_R="$SUDOERS_LDFLAGS_R") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + SUDOERS_LDFLAGS_R=-R${enableval}/lib + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS_R=\"\$SUDOERS_LDFLAGS_R\""; } >&5 + (: SUDOERS_LDFLAGS_R="$SUDOERS_LDFLAGS_R") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + + fi + + fi + ;; + esac + +fi + + +# Check whether --enable-gcrypt was given. +if test "${enable_gcrypt+set}" = set; then : + enableval=$enable_gcrypt; case $enableval in + no) ;; + *) LIBMD="-lgcrypt" + FILEDIGEST=filedigest_gcrypt.lo + if test "$enableval" != "yes"; then + +if ${CPPFLAGS+:} false; then : + + case " $CPPFLAGS " in #( + *" -I${enableval}/include "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CPPFLAGS already contains -I\${enableval}/include"; } >&5 + (: CPPFLAGS already contains -I${enableval}/include) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append CPPFLAGS " -I${enableval}/include" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CPPFLAGS=\"\$CPPFLAGS\""; } >&5 + (: CPPFLAGS="$CPPFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + CPPFLAGS=-I${enableval}/include + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CPPFLAGS=\"\$CPPFLAGS\""; } >&5 + (: CPPFLAGS="$CPPFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + + + +if ${SUDOERS_LDFLAGS+:} false; then : + + case " $SUDOERS_LDFLAGS " in #( + *" -L${enableval}/lib "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS already contains -L\${enableval}/lib"; } >&5 + (: SUDOERS_LDFLAGS already contains -L${enableval}/lib) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append SUDOERS_LDFLAGS " -L${enableval}/lib" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS=\"\$SUDOERS_LDFLAGS\""; } >&5 + (: SUDOERS_LDFLAGS="$SUDOERS_LDFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + SUDOERS_LDFLAGS=-L${enableval}/lib + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS=\"\$SUDOERS_LDFLAGS\""; } >&5 + (: SUDOERS_LDFLAGS="$SUDOERS_LDFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + + if test X"$enable_rpath" = X"yes"; then + +if ${SUDOERS_LDFLAGS_R+:} false; then : + + case " $SUDOERS_LDFLAGS_R " in #( + *" -R${enableval}/lib "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS_R already contains -R\${enableval}/lib"; } >&5 + (: SUDOERS_LDFLAGS_R already contains -R${enableval}/lib) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append SUDOERS_LDFLAGS_R " -R${enableval}/lib" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS_R=\"\$SUDOERS_LDFLAGS_R\""; } >&5 + (: SUDOERS_LDFLAGS_R="$SUDOERS_LDFLAGS_R") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + SUDOERS_LDFLAGS_R=-R${enableval}/lib + { { $as_echo "$as_me:${as_lineno-$LINENO}: : SUDOERS_LDFLAGS_R=\"\$SUDOERS_LDFLAGS_R\""; } >&5 + (: SUDOERS_LDFLAGS_R="$SUDOERS_LDFLAGS_R") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + + fi + + fi + ;; + esac + +fi + + # Check whether --enable-hardening was given. if test "${enable_hardening+set}" = set; then : enableval=$enable_hardening; @@ -15118,6 +15354,12 @@ *) RTLD_PRELOAD_VAR="LDR_PRELOAD";; esac + # strnlen/strndup may be broken on AIX < 6 depending + # on the libc version, use our own. + if test $OSMAJOR -lt 6; then + ac_cv_func_strnlen=no + fi + # Remove timedir on boot, AIX does not have /var/run INIT_SCRIPT=aix.sh INIT_DIR=/etc/rc.d/init.d @@ -18256,6 +18498,39 @@ _ACEOF +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +$as_echo_n "checking size of time_t... " >&6; } +if ${ac_cv_sizeof_time_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_time_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (time_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_time_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +$as_echo "$ac_cv_sizeof_time_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_TIME_T $ac_cv_sizeof_time_t +_ACEOF + + if test $ac_cv_header_utmpx_h = "yes"; then ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_id" "ac_cv_member_struct_utmpx_ut_id" " # include @@ -18653,8 +18928,6 @@ - - case "$host_os" in hpux*) if test X"$ac_cv_func_pread" = X"yes"; then @@ -19685,6 +19958,106 @@ 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" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NANOSLEEP 1 +_ACEOF + +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 ${ac_cv_lib_rt_nanosleep+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $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 nanosleep (); +int +main () +{ +return nanosleep (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_nanosleep=yes +else + ac_cv_lib_rt_nanosleep=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_rt_nanosleep" >&5 +$as_echo "$ac_cv_lib_rt_nanosleep" >&6; } +if test "x$ac_cv_lib_rt_nanosleep" = xyes; then : + + $as_echo "#define HAVE_NANOSLEEP 1" >>confdefs.h + + LIBRT="-lrt" + +else + + case " $LIBOBJS " in + *" nanosleep.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS nanosleep.$ac_objext" + ;; +esac + + + for _sym in sudo_nanosleep; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + +fi + + +fi +done + +for ac_func in pipe2 +do : + ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +if test "x$ac_cv_func_pipe2" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PIPE2 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" pipe2.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS pipe2.$ac_objext" + ;; +esac + + + for _sym in sudo_pipe2; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + +fi +done + for ac_func in pw_dup do : ac_fn_c_check_func "$LINENO" "pw_dup" "ac_cv_func_pw_dup" @@ -20276,6 +20649,20 @@ " done +ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" " +$ac_includes_default +#include + +" +if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TM_TM_GMTOFF 1 +_ACEOF + + +fi + ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" "$ac_includes_default" if test "x$ac_cv_member_struct_stat_st_mtim" = xyes; then : $as_echo "#define HAVE_ST_MTIM 1" >>confdefs.h @@ -20295,12 +20682,14 @@ fi -FOUND_SHA2=no -ac_fn_c_check_header_mongrel "$LINENO" "sha2.h" "ac_cv_header_sha2_h" "$ac_includes_default" +# Look for sha2 functions if not using openssl +if test "$FILEDIGEST" = "filedigest.lo"; then + FOUND_SHA2=no + ac_fn_c_check_header_mongrel "$LINENO" "sha2.h" "ac_cv_header_sha2_h" "$ac_includes_default" if test "x$ac_cv_header_sha2_h" = xyes; then : - FOUND_SHA2=yes - for ac_func in SHA224Update + FOUND_SHA2=yes + for ac_func in SHA224Update do : ac_fn_c_check_func "$LINENO" "SHA224Update" "ac_cv_func_SHA224Update" if test "x$ac_cv_func_SHA224Update" = xyes; then : @@ -20343,8 +20732,8 @@ else - # On some systems, SHA224Update is in libmd - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SHA224Update in -lmd" >&5 + # On some systems, SHA224Update is in libmd + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SHA224Update in -lmd" >&5 $as_echo_n "checking for SHA224Update in -lmd... " >&6; } if ${ac_cv_lib_md_SHA224Update+:} false; then : $as_echo_n "(cached) " >&6 @@ -20382,9 +20771,9 @@ $as_echo "$ac_cv_lib_md_SHA224Update" >&6; } if test "x$ac_cv_lib_md_SHA224Update" = xyes; then : - $as_echo "#define HAVE_SHA224UPDATE 1" >>confdefs.h + $as_echo "#define HAVE_SHA224UPDATE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the data argument of SHA224Update() is void *" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the data argument of SHA224Update() is void *" >&5 $as_echo_n "checking whether the data argument of SHA224Update() is void *... " >&6; } if ${sudo_cv_func_sha2_void_ptr+:} false; then : $as_echo_n "(cached) " >&6 @@ -20418,12 +20807,12 @@ fi - LIBMD="-lmd" + LIBMD="-lmd" else - # Does not have SHA224Update - FOUND_SHA2=no + # Does not have SHA224Update + FOUND_SHA2=no fi @@ -20435,8 +20824,8 @@ fi -if test X"$FOUND_SHA2" = X"no"; then - case " $LIBOBJS " in + if test X"$FOUND_SHA2" = X"no"; then + case " $LIBOBJS " in *" sha2.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS sha2.$ac_objext" ;; @@ -20448,6 +20837,7 @@ " done + fi fi for ac_func in vsyslog do : @@ -20471,6 +20861,7 @@ " done + COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }vsyslog_test" fi done @@ -25950,7 +26341,7 @@ # Can't use asan with LD_PRELOAD if test "$enable_asan" != "yes"; then - CHECK_NOEXEC=check_sudo_noexec + CHECK_NOEXEC=check_noexec fi noexec_file="$with_noexec" @@ -26552,7 +26943,7 @@ # 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.19p1, which was +This file was extended by sudo $as_me 1.8.20p2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -26618,7 +27009,7 @@ 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.19p1 +sudo config.status 1.8.20p2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru sudo-1.8.19p1/configure.ac sudo-1.8.20p2/configure.ac --- sudo-1.8.19p1/configure.ac 2016-12-20 17:28:49.000000000 +0000 +++ sudo-1.8.20p2/configure.ac 2017-05-31 15:14:31.000000000 +0000 @@ -1,10 +1,10 @@ dnl dnl Use the top-level autogen.sh script to generate configure and config.h.in dnl -dnl Copyright (c) 1994-1996,1998-2016 Todd C. Miller +dnl Copyright (c) 1994-1996,1998-2017 Todd C. Miller dnl AC_PREREQ([2.59]) -AC_INIT([sudo], [1.8.19p1], [https://bugzilla.sudo.ws/], [sudo]) +AC_INIT([sudo], [1.8.20p2], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADER([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl @@ -96,6 +96,7 @@ AC_SUBST([COMPAT_EXP]) AC_SUBST([TMPFILES_D]) AC_SUBST([exampledir]) +AC_SUBST([FILEDIGEST]) dnl dnl Variables that get substituted in docs (not overridden by environment) dnl @@ -183,6 +184,7 @@ pam_session=on pam_login_service=sudo PLUGINDIR=/usr/local/libexec/sudo +FILEDIGEST=filedigest.lo # # End initial values for man page substitution # @@ -1449,6 +1451,34 @@ esac ]) +AC_ARG_ENABLE(openssl, +[AS_HELP_STRING([--enable-openssl], [Use OpenSSL's message digest functions instead of sudo's])], +[ case $enableval in + no) ;; + *) LIBMD="-lcrypto" + FILEDIGEST=filedigest_openssl.lo + if test "$enableval" != "yes"; then + AX_APPEND_FLAG([-I${enableval}/include], [CPPFLAGS]) + SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${enableval}/lib]) + fi + ;; + esac +]) + +AC_ARG_ENABLE(gcrypt, +[AS_HELP_STRING([--enable-gcrypt], [Use GNU crypt's message digest functions instead of sudo's])], +[ case $enableval in + no) ;; + *) LIBMD="-lgcrypt" + FILEDIGEST=filedigest_gcrypt.lo + if test "$enableval" != "yes"; then + AX_APPEND_FLAG([-I${enableval}/include], [CPPFLAGS]) + SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${enableval}/lib]) + fi + ;; + esac +]) + AC_ARG_ENABLE(hardening, [AS_HELP_STRING([--disable-hardening], [Do not use compiler/linker exploit mitigation options])], [], [enable_hardening=yes]) @@ -1730,6 +1760,12 @@ *) RTLD_PRELOAD_VAR="LDR_PRELOAD";; esac + # strnlen/strndup may be broken on AIX < 6 depending + # on the libc version, use our own. + if test $OSMAJOR -lt 6; then + ac_cv_func_strnlen=no + fi + # Remove timedir on boot, AIX does not have /var/run INIT_SCRIPT=aix.sh INIT_DIR=/etc/rc.d/init.d @@ -2342,6 +2378,7 @@ SUDO_SOCK_SIN_LEN AC_CHECK_SIZEOF([id_t]) AC_CHECK_SIZEOF([long long]) +AC_CHECK_SIZEOF([time_t]) dnl dnl Check for utmp/utmpx struct members. dnl We need to have already defined _GNU_SOURCE on glibc which only has @@ -2387,7 +2424,7 @@ dnl Function checks dnl AC_FUNC_GETGROUPS -AC_CHECK_FUNCS_ONCE([fexecve killpg nl_langinfo strftime pread pwrite openat faccessat wordexp]) +AC_CHECK_FUNCS_ONCE([fexecve killpg nl_langinfo pread pwrite openat faccessat wordexp]) case "$host_os" in hpux*) if test X"$ac_cv_func_pread" = X"yes"; then @@ -2572,6 +2609,20 @@ AC_LIBOBJ(memset_s) SUDO_APPEND_COMPAT_EXP(sudo_memset_s) ]) +AC_CHECK_FUNCS(nanosleep, [], [ + # On Solaris, nanosleep is in librt + AC_CHECK_LIB(rt, nanosleep, [ + AC_DEFINE(HAVE_NANOSLEEP) + LIBRT="-lrt" + ], [ + AC_LIBOBJ(nanosleep) + SUDO_APPEND_COMPAT_EXP(sudo_nanosleep) + ]) +]) +AC_CHECK_FUNCS([pipe2], [], [ + AC_LIBOBJ(pipe2) + SUDO_APPEND_COMPAT_EXP(sudo_pipe2) +]) AC_CHECK_FUNCS([pw_dup], [], [ AC_LIBOBJ(pw_dup) SUDO_APPEND_COMPAT_EXP(sudo_pw_dup) @@ -2649,31 +2700,39 @@ AC_CHECK_FUNCS([strtonum]) AC_LIBOBJ(strtonum) SUDO_APPEND_COMPAT_EXP(sudo_strtonum) +AC_CHECK_MEMBERS([struct tm.tm_gmtoff], [], [], [ +AC_INCLUDES_DEFAULT +#include +]) AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)] [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))], [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))]) -FOUND_SHA2=no -AC_CHECK_HEADER([sha2.h], [ - FOUND_SHA2=yes - AC_CHECK_FUNCS([SHA224Update], [SUDO_FUNC_SHA2_VOID_PTR], [ - # On some systems, SHA224Update is in libmd - AC_CHECK_LIB(md, SHA224Update, [ - AC_DEFINE(HAVE_SHA224UPDATE) - SUDO_FUNC_SHA2_VOID_PTR - LIBMD="-lmd" - ], [ - # Does not have SHA224Update - FOUND_SHA2=no +# Look for sha2 functions if not using openssl +if test "$FILEDIGEST" = "filedigest.lo"; then + FOUND_SHA2=no + AC_CHECK_HEADER([sha2.h], [ + FOUND_SHA2=yes + AC_CHECK_FUNCS([SHA224Update], [SUDO_FUNC_SHA2_VOID_PTR], [ + # On some systems, SHA224Update is in libmd + AC_CHECK_LIB(md, SHA224Update, [ + AC_DEFINE(HAVE_SHA224UPDATE) + SUDO_FUNC_SHA2_VOID_PTR + LIBMD="-lmd" + ], [ + # Does not have SHA224Update + FOUND_SHA2=no + ]) ]) ]) -]) -if test X"$FOUND_SHA2" = X"no"; then - AC_LIBOBJ(sha2) - SUDO_APPEND_COMPAT_EXP(sudo_SHA224Final sudo_SHA224Init sudo_SHA224Pad sudo_SHA224Transform sudo_SHA224Update sudo_SHA256Final sudo_SHA256Init sudo_SHA256Pad sudo_SHA256Transform sudo_SHA256Update sudo_SHA384Final sudo_SHA384Init sudo_SHA384Pad sudo_SHA384Transform sudo_SHA384Update sudo_SHA512Final sudo_SHA512Init sudo_SHA512Pad sudo_SHA512Transform sudo_SHA512Update) + if test X"$FOUND_SHA2" = X"no"; then + AC_LIBOBJ(sha2) + SUDO_APPEND_COMPAT_EXP(sudo_SHA224Final sudo_SHA224Init sudo_SHA224Pad sudo_SHA224Transform sudo_SHA224Update sudo_SHA256Final sudo_SHA256Init sudo_SHA256Pad sudo_SHA256Transform sudo_SHA256Update sudo_SHA384Final sudo_SHA384Init sudo_SHA384Pad sudo_SHA384Transform sudo_SHA384Update sudo_SHA512Final sudo_SHA512Init sudo_SHA512Pad sudo_SHA512Transform sudo_SHA512Update) + fi fi AC_CHECK_FUNCS([vsyslog], [], [ AC_LIBOBJ(vsyslog) SUDO_APPEND_COMPAT_EXP(sudo_vsyslog) + COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }vsyslog_test" ]) dnl dnl Function checks for sudo_noexec @@ -4162,7 +4221,7 @@ # Can't use asan with LD_PRELOAD if test "$enable_asan" != "yes"; then - CHECK_NOEXEC=check_sudo_noexec + CHECK_NOEXEC=check_noexec fi noexec_file="$with_noexec" diff -Nru sudo-1.8.19p1/debian/changelog sudo-1.8.20p2/debian/changelog --- sudo-1.8.19p1/debian/changelog 2017-01-13 23:42:21.000000000 +0000 +++ sudo-1.8.20p2/debian/changelog 2017-06-12 19:51:31.000000000 +0000 @@ -1,3 +1,76 @@ +sudo (1.8.20p2-1ubuntu1) artful; urgency=low + + * Merge from Debian unstable. (LP: #1697587) + Remaining changes: + - Use tmpfs location to store timestamp files + + debian/rules: change --with-rundir to /var/run/sudo + + debian/rules, debian/sudo.service, debian/sudo.sudo.init: stop + shipping init script and service file, as they are no longer + necessary. + + debian/*.preinst, debian/*.postinst, debian/*.postrm: remove old + init script with dpkg-maintscript-helper. + + debian/*.postinst: remove old /var/run/sudo to /var/lib/sudo + transition code, remove old /var/lib/sudo/ts timestamp directory. + - debian/rules: + + compile with --without-lecture --with-tty-tickets --enable-admin-flag + + install man/man8/sudo_root.8 in both flavours + + install apport hooks + - debian/source_sudo.py, debian/sudo-ldap.dirs, debian/sudo.dirs: + + add usr/share/apport/package-hooks + - debian/sudo.pam: + + Use pam_env to read /etc/environment and /etc/default/locale + environment files. Reading ~/.pam_environment is not permitted due to + security reasons. + - debian/sudoers: + + also grant admin group sudo access + + include /snap/bin in the secure_path + - debian/control, debian/rules: + + use dh-autoreconf + - Remaining patches: + + keep_home_by_default.patch: Keep HOME in the default environment + - Dropped patches no longer needed: + + CVE-2017-1000367.patch + + -- Balint Reczey Mon, 12 Jun 2017 21:51:31 +0200 + +sudo (1.8.20p2-1) unstable; urgency=medium + + * new upstream version + + -- Bdale Garbee Thu, 08 Jun 2017 11:57:02 -0600 + +sudo (1.8.20p1-1.1) unstable; urgency=high + + * Non-maintainer upload. + * Use /proc/self consistently on Linux + * CVE-2017-1000368: Arbitrary terminal access (Closes: #863897) + + -- Salvatore Bonaccorso Mon, 05 Jun 2017 14:19:33 +0200 + +sudo (1.8.20p1-1) unstable; urgency=high + + * New upstream version with fix for CVE-2017-1000367, closes: #863731 + + -- Bdale Garbee Tue, 30 May 2017 14:41:58 -0600 + +sudo (1.8.20-1) unstable; urgency=medium + + * New upstream version + * patch from Helmut Grohne to fix cross-building issues, closes: #847131 + + Let dh_auto_configure pass --host to configure + + Honour DEB_BUILD_OPTIONS=nocheck + + -- Bdale Garbee Wed, 10 May 2017 10:25:46 -0600 + +sudo (1.8.19p1-1ubuntu2) artful; urgency=medium + + * SECURITY UPDATE: /proc/self/stat parsing confusion + - debian/patches/CVE-2017-1000367.patch: adjust parsing to + find ttyname + - CVE-2017-1000367 + + -- Steve Beattie Mon, 29 May 2017 03:13:37 -0700 + sudo (1.8.19p1-1ubuntu1) zesty; urgency=low * Merge from Debian unstable. (LP: #1607666) diff -Nru sudo-1.8.19p1/debian/patches/paths-in-samples.diff sudo-1.8.20p2/debian/patches/paths-in-samples.diff --- sudo-1.8.19p1/debian/patches/paths-in-samples.diff 2017-01-13 22:49:24.000000000 +0000 +++ sudo-1.8.20p2/debian/patches/paths-in-samples.diff 2017-06-08 17:57:02.000000000 +0000 @@ -1,5 +1,5 @@ diff --git a/examples/sudoers b/examples/sudoers -index 9946008..cd4c796 100644 +index 8ad6fa0..5edde14 100644 --- a/examples/sudoers +++ b/examples/sudoers @@ -44,10 +44,10 @@ Host_Alias CDROM = orion, perseus, hercules @@ -23,7 +23,7 @@ +joe ALL = /bin/su operator # pete may change passwords for anyone but root on the hp snakes - pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root + pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* @@ -99,13 +99,13 @@ jim +biglab = ALL # users in the secretaries netgroup need to help manage the printers diff -Nru sudo-1.8.19p1/debian/rules sudo-1.8.20p2/debian/rules --- sudo-1.8.19p1/debian/rules 2017-01-13 22:49:24.000000000 +0000 +++ sudo-1.8.20p2/debian/rules 2017-06-12 19:51:31.000000000 +0000 @@ -26,10 +26,10 @@ cp -f /usr/share/misc/config.guess config.guess # simple version - mkdir -p build-simple - cd build-simple && NROFFPROG=/usr/bin/nroff CFLAGS="$(CFLAGS)" \ - CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" $(CURDIR)/configure \ - --prefix=/usr -v \ + NROFFPROG=/usr/bin/nroff CFLAGS="$(CFLAGS)" \ + CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + dh_auto_configure --builddirectory=build-simple -- \ + -v \ --with-all-insults \ --with-pam \ --with-fqdn \ @@ -46,16 +46,15 @@ --enable-admin-flag \ --with-sendmail=/usr/sbin/sendmail \ --with-rundir=/var/run/sudo \ - --mandir=/usr/share/man \ --libexecdir=/usr/lib/sudo \ --with-sssd --with-sssd-lib=/usr/lib/$(DEB_HOST_MULTIARCH) \ $(configure_args) # LDAP version - mkdir -p build-ldap - cd build-ldap && NROFFPROG=/usr/bin/nroff CFLAGS="$(CFLAGS)" \ - CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" $(CURDIR)/configure \ - --prefix=/usr -v \ + NROFFPROG=/usr/bin/nroff CFLAGS="$(CFLAGS)" \ + CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + dh_auto_configure --builddirectory=build-ldap -- \ + -v \ --with-all-insults \ --with-pam \ --with-ldap \ @@ -75,7 +74,6 @@ --with-sendmail=/usr/sbin/sendmail \ --with-rundir=/var/run/sudo \ --with-ldap-conf-file=/etc/sudo-ldap.conf \ - --mandir=/usr/share/man \ --libexecdir=/usr/lib/sudo \ $(configure_args) @@ -90,7 +88,9 @@ $(MAKE) -C build-simple $(MAKE) -C build-ldap +ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) $(MAKE) -C build-simple check +endif touch build-stamp diff -Nru sudo-1.8.19p1/doc/fixman.sh sudo-1.8.20p2/doc/fixman.sh --- sudo-1.8.19p1/doc/fixman.sh 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/doc/fixman.sh 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2012-2013 Todd C. Miller +# Copyright (c) 2012-2014, 2017 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 @@ -132,7 +132,7 @@ # Solaris PrivSpec if [ X"$PSMAN" != X"1" ]; then cat >>"$OUTFILE" <<-EOF - s/Solaris_Priv_Spec? // + s/Solaris_Priv_Spec | // /^Solaris_Priv_Spec ::=/ { N d @@ -145,7 +145,7 @@ # SELinux if [ X"$SEMAN" != X"1" ]; then cat >>"$OUTFILE" <<-EOF - s/SELinux_Spec? // + s/SELinux_Spec | // /^SELinux_Spec ::=/ { N d diff -Nru sudo-1.8.19p1/doc/fixmdoc.sh sudo-1.8.20p2/doc/fixmdoc.sh --- sudo-1.8.19p1/doc/fixmdoc.sh 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/doc/fixmdoc.sh 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2012-2014 Todd C. Miller +# Copyright (c) 2012-2014, 2017 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 @@ -118,7 +118,7 @@ # Solaris PrivSpec if [ X"$PSMAN" != X"1" ]; then cat >>"$OUTFILE" <<-'EOF' - s/Solaris_Priv_Spec? // + s/Solaris_Priv_Spec | // /^Solaris_Priv_Spec ::=/ { N d @@ -131,7 +131,7 @@ # SELinux if [ X"$SEMAN" != X"1" ]; then cat >>"$OUTFILE" <<-'EOF' - s/SELinux_Spec? // + s/SELinux_Spec | // /^SELinux_Spec ::=/ { N d diff -Nru sudo-1.8.19p1/doc/LICENSE sudo-1.8.20p2/doc/LICENSE --- sudo-1.8.19p1/doc/LICENSE 2016-12-20 17:28:49.000000000 +0000 +++ sudo-1.8.20p2/doc/LICENSE 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ Sudo is distributed under the following license: - Copyright (c) 1994-1996, 1998-2016 + Copyright (c) 1994-1996, 1998-2017 Todd C. Miller Permission to use, copy, modify, and distribute this software for any @@ -165,7 +165,7 @@ The embedded copy of zlib bears the following license: - Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff -Nru sudo-1.8.19p1/doc/sudo.cat sudo-1.8.20p2/doc/sudo.cat --- sudo-1.8.19p1/doc/sudo.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo.cat 2017-05-10 15:38:43.000000000 +0000 @@ -9,10 +9,10 @@ ssuuddoo --ll [--AAkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--UU _u_s_e_r] [--uu _u_s_e_r] [_c_o_m_m_a_n_d] ssuuddoo [--AAbbEEHHnnPPSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t] - [--pp _p_r_o_m_p_t] [--rr _r_o_l_e] [--tt _t_y_p_e] [--uu _u_s_e_r] [_V_A_R=_v_a_l_u_e] [--ii | --ss] - [_c_o_m_m_a_n_d] + [--pp _p_r_o_m_p_t] [--rr _r_o_l_e] [--tt _t_y_p_e] [--TT _t_i_m_e_o_u_t] [--uu _u_s_e_r] [_V_A_R=_v_a_l_u_e] + [--ii | --ss] [_c_o_m_m_a_n_d] ssuuddooeeddiitt [--AAkknnSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t] - [--pp _p_r_o_m_p_t] [--uu _u_s_e_r] _f_i_l_e _._._. + [--pp _p_r_o_m_p_t] [--TT _t_i_m_e_o_u_t] [--uu _u_s_e_r] _f_i_l_e _._._. DDEESSCCRRIIPPTTIIOONN ssuuddoo allows a permitted user to execute a _c_o_m_m_a_n_d as the superuser or @@ -68,7 +68,7 @@ Use the specified BSD authentication _t_y_p_e when validating the user, if allowed by _/_e_t_c_/_l_o_g_i_n_._c_o_n_f. The system administrator may specify a list of sudo-specific - authentication methods by adding an ``auth-sudo'' entry in + authentication methods by adding an "auth-sudo" entry in _/_e_t_c_/_l_o_g_i_n_._c_o_n_f. This option is only available on systems that support BSD authentication. @@ -293,6 +293,13 @@ _s_u_d_o_e_r_s policy only allows root or a user with the ALL privilege on the current host to use this option. + --TT _t_i_m_e_o_u_t, ----ccoommmmaanndd--ttiimmeeoouutt=_t_i_m_e_o_u_t + Used to set a timeout for the command. If the timeout + expires before the command has exited, the command will be + terminated. The security policy may restrict the ability to + set command timeouts. The _s_u_d_o_e_r_s policy requires that user- + specified timeouts be explicitly enabled. + --uu _u_s_e_r, ----uusseerr=_u_s_e_r Run the command as a user other than the default target user (usually _r_o_o_t). The _u_s_e_r may be either a user name or a @@ -370,18 +377,18 @@ completed, then passes the command's exit status to the security policy's close function and exits. If an I/O logging plugin is configured or if the security policy explicitly requests it, a new pseudo-terminal - (``pty'') is created and a second ssuuddoo process is used to relay job - control signals between the user's existing pty and the new pty the - command is being run in. This extra process makes it possible to, for - example, suspend and resume the command. Without it, the command would - be in what POSIX terms an ``orphaned process group'' and it would not - receive any job control signals. As a special case, if the policy plugin - does not define a close function and no pty is required, ssuuddoo will - execute the command directly instead of calling fork(2) first. The - _s_u_d_o_e_r_s policy plugin will only define a close function when I/O logging - is enabled, a pty is required, or the _p_a_m___s_e_s_s_i_o_n or _p_a_m___s_e_t_c_r_e_d options - are enabled. Note that _p_a_m___s_e_s_s_i_o_n and _p_a_m___s_e_t_c_r_e_d are enabled by - default on systems using PAM. + ("pty") is created and a second ssuuddoo process is used to relay job control + signals between the user's existing pty and the new pty the command is + being run in. This extra process makes it possible to, for example, + suspend and resume the command. Without it, the command would be in what + POSIX terms an "orphaned process group" and it would not receive any job + control signals. As a special case, if the policy plugin does not define + a close function and no pty is required, ssuuddoo will execute the command + directly instead of calling fork(2) first. The _s_u_d_o_e_r_s policy plugin + will only define a close function when I/O logging is enabled, a pty is + required, or the _p_a_m___s_e_s_s_i_o_n or _p_a_m___s_e_t_c_r_e_d options are enabled. Note + that _p_a_m___s_e_s_s_i_o_n and _p_a_m___s_e_t_c_r_e_d are enabled by default on systems using + PAM. SSiiggnnaall hhaannddlliinngg When the command is run as a child of the ssuuddoo process, ssuuddoo will relay @@ -435,7 +442,7 @@ error is printed to the standard error. (If the directory does not exist or if it is not really a directory, the entry is ignored and no error is printed.) This should not happen under normal circumstances. The most - common reason for stat(2) to return ``permission denied'' is if you are + common reason for stat(2) to return "permission denied" is if you are running an automounter and one of the directories in your PATH is on a machine that is currently unreachable. @@ -470,7 +477,7 @@ for the command that is run). This historical practice dates from a time when most operating systems allowed setuid processes to dump core by default. To aid in debugging ssuuddoo crashes, you may wish to re-enable - core dumps by setting ``disable_coredump'' to false in the sudo.conf(4) + core dumps by setting "disable_coredump" to false in the sudo.conf(4) file as follows: Set disable_coredump false @@ -615,10 +622,10 @@ the archives. DDIISSCCLLAAIIMMEERR - ssuuddoo is provided ``AS IS'' and any express or implied warranties, + ssuuddoo is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 January 19, 2016 Sudo 1.8.19 +Sudo 1.8.20 February 16, 2017 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/sudo.conf.cat sudo-1.8.20p2/doc/sudo.conf.cat --- sudo-1.8.19p1/doc/sudo.conf.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo.conf.cat 2017-05-10 15:38:43.000000000 +0000 @@ -30,7 +30,7 @@ Non-comment lines that don't begin with Plugin, Path, Debug, or Set are silently ignored. - The ssuuddoo..ccoonnff file is always parsed in the ``C'' locale. + The ssuuddoo..ccoonnff file is always parsed in the "C" locale. PPlluuggiinn ccoonnffiigguurraattiioonn ssuuddoo supports a plugin architecture for security policies and @@ -131,7 +131,7 @@ Core dumps of ssuuddoo itself are disabled by default to prevent the disclosure of potentially sensitive information. To aid in debugging ssuuddoo crashes, you may wish to re-enable core dumps by - setting ``disable_coredump'' to false in ssuuddoo..ccoonnff as follows: + setting "disable_coredump" to false in ssuuddoo..ccoonnff as follows: Set disable_coredump false @@ -171,20 +171,20 @@ static Use the static group list that the kernel returns. Retrieving the group list this way is very fast but it is subject to an upper limit as described above. - It is ``static'' in that it does not reflect changes - to the group database made after the user logs in. - This was the default behavior prior to ssuuddoo 1.8.7. + It is "static" in that it does not reflect changes to + the group database made after the user logs in. This + was the default behavior prior to ssuuddoo 1.8.7. dynamic Always query the group database directly. It is - ``dynamic'' in that changes made to the group - database after the user logs in will be reflected in - the group list. On some systems, querying the group - database for all of a user's groups can be time - consuming when querying a network-based group - database. Most operating systems provide an - efficient method of performing such queries. - Currently, ssuuddoo supports efficient group queries on - AIX, BSD, HP-UX, Linux and Solaris. + "dynamic" in that changes made to the group database + after the user logs in will be reflected in the group + list. On some systems, querying the group database + for all of a user's groups can be time consuming when + querying a network-based group database. Most + operating systems provide an efficient method of + performing such queries. Currently, ssuuddoo supports + efficient group queries on AIX, BSD, HP-UX, Linux and + Solaris. adaptive Only query the group database if the static group list returned by the kernel has the maximum number of @@ -412,10 +412,10 @@ the archives. DDIISSCCLLAAIIMMEERR - ssuuddoo is provided ``AS IS'' and any express or implied warranties, + ssuuddoo is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 October 15, 2016 Sudo 1.8.19 +Sudo 1.8.20 October 15, 2016 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/sudoers.cat sudo-1.8.20p2/doc/sudoers.cat --- sudo-1.8.19p1/doc/sudoers.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoers.cat 2017-05-10 15:38:43.000000000 +0000 @@ -95,9 +95,9 @@ was used to authenticate, the terminal session ID, and a time stamp (using a monotonic clock if one is available). The user may then use ssuuddoo without a password for a short period of time (5 minutes unless - overridden by the _t_i_m_e_o_u_t option). By default, ssuuddooeerrss uses a separate - record for each tty, which means that a user's login sessions are - authenticated separately. The _t_t_y___t_i_c_k_e_t_s option can be disabled to + overridden by the _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t option). By default, ssuuddooeerrss uses a + separate record for each tty, which means that a user's login sessions + are authenticated separately. The _t_t_y___t_i_c_k_e_t_s option can be disabled to force the use of a single time stamp for all of a user's sessions. LLooggggiinngg @@ -150,12 +150,12 @@ env_keep += "my_func=()*" - Without the ``=()*'' suffix, this would not match, as old-style bbaasshh - shell functions are not preserved by default. + Without the "=()*" suffix, this would not match, as old-style bbaasshh shell + functions are not preserved by default. The complete list of environment variables that ssuuddoo allows or denies is - contained in the output of ``sudo -V'' when run as root. Please note - that this list varies based on the operating system ssuuddoo is running on. + contained in the output of "sudo -V" when run as root. Please note that + this list varies based on the operating system ssuuddoo is running on. On systems that support PAM where the ppaamm__eennvv module is enabled for ssuuddoo, variables in the PAM environment may be merged in to the environment. If @@ -184,8 +184,12 @@ the _p_a_t_h and _s_e_t_e_n_v variables in _/_e_t_c_/_l_o_g_i_n_._c_o_n_f are also applied. All other environment variables are removed. - Finally, if the _e_n_v___f_i_l_e option is defined, any variables present in that - file will be set to their specified values as long as they would not + Finally, the _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e and _e_n_v___f_i_l_e files are applied, if + present. The variables in _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e are applied first and are + subject to the same restrictions as the invoking user's environment, as + detailed above. The variables in _e_n_v___f_i_l_e are applied last and are not + subject to these restrictions. In both cases, variables present in the + files will only be set to their specified values if they would not conflict with an existing environment variable. SSUUDDOOEERRSS FFIILLEE FFOORRMMAATT @@ -209,7 +213,7 @@ Each _p_r_o_d_u_c_t_i_o_n _r_u_l_e references others and thus makes up a grammar for the language. EBNF also contains the following operators, which many readers will recognize from regular expressions. Do not, however, - confuse them with ``wildcard'' characters, which have different meanings. + confuse them with "wildcard" characters, which have different meanings. ? Means that the preceding symbol (or group of symbols) is optional. That is, it may appear once or not at all. @@ -348,9 +352,9 @@ command on your machine returns the fully qualified host name, you'll need to use the _f_q_d_n option for wildcards to be useful. Note that ssuuddoo only inspects actual network interfaces; this means that IP address - 127.0.0.1 (localhost) will never match. Also, the host name - ``localhost'' will only match if that is the actual host name, which is - usually only the case for non-networked systems. + 127.0.0.1 (localhost) will never match. Also, the host name "localhost" + will only match if that is the actual host name, which is usually only + the case for non-networked systems. digest ::= [A-Fa-f0-9]+ | [[A-Za-z0-9+/=]+ @@ -387,10 +391,10 @@ the Cmnd must match exactly those given by the user on the command line (or match the wildcards if there are any). Note that the following characters must be escaped with a `\' if they are used in command - arguments: `,', `:', `=', `\'. The built-in command ``sudoedit'' is used + arguments: `,', `:', `=', `\'. The built-in command "sudoedit" is used to permit a user to run ssuuddoo with the --ee option (or as ssuuddooeeddiitt). It may take command line arguments just as a normal command does. Note that - ``sudoedit'' is a command built into ssuuddoo itself and must be specified in + "sudoedit" is a command built into ssuuddoo itself and must be specified in the _s_u_d_o_e_r_s file without a leading path. If a command name is prefixed with a Digest_Spec, the command will only @@ -416,7 +420,9 @@ command after the digest check has been performed but before the command is executed. A similar race condition exists on systems that lack the fexecve(2) system call when the directory in which the command is located - is writable by the user. + is writable by the user. See the description of the _f_d_e_x_e_c setting for + more information on how ssuuddoo executes commands that have an associated + digest. Command digests are only supported by version 1.8.7 or higher. @@ -472,14 +478,20 @@ Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List - Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd + Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' + Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec) + SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') + Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') + + Timeout_Spec ::= 'TIMEOUT=timeout' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -489,8 +501,8 @@ what user) on specified hosts. By default, commands are run as rroooott, but this can be changed on a per-command basis. - The basic structure of a user specification is ``who where = (as_whom) - what''. Let's break that down into its constituent parts: + The basic structure of a user specification is "who where = (as_whom) + what". Let's break that down into its constituent parts: RRuunnaass__SSppeecc A Runas_Spec determines the user and/or the group that a command may be @@ -562,6 +574,13 @@ user aallaann may run any command as either user root or bin, optionally setting the group to operator or system. + OOppttiioonn__SSppeecc + A Cmnd may have zero or more options associated with it. Depending on + the system, options may consist of SELinux roles and/or types, Solaris + privileges sets, and command timeouts. Once an option is set for a Cmnd, + subsequent Cmnds in the Cmnd_Spec_List, inherit that option unless it is + overridden by another option. + SSEELLiinnuuxx__SSppeecc On systems with SELinux support, _s_u_d_o_e_r_s file entries may optionally have an SELinux role and/or type associated with a command. If a role or type @@ -581,7 +600,7 @@ $ ppriv -l - In addition, there are several ``special'' privilege strings: + In addition, there are several "special" privilege strings: none the empty set @@ -595,6 +614,41 @@ Privileges can be excluded from a set by prefixing the privilege name with either an `!' or `-' character. + DDaattee__SSppeecc + ssuuddooeerrss rules can be specified with a start and end date via the + NOTBEFORE and NOTAFTER settings. The time stamp must be specified in + _G_e_n_e_r_a_l_i_z_e_d _T_i_m_e as defined by RFC 4517. The format is effectively + yyyymmddHHMMSSZ where the minutes and seconds are optional. The `Z' + suffix indicates that the time stamp is in Coordinated Universal Time + (UTC). It is also possible to specify a timezone offset from UTC in + hours and minutes instead of a `Z'. For example, `-0500' would + correspond to Eastern Standard time in the US. As an extension, if no + `Z' or timezone offset is specified, local time will be used. + + The following are all valid time stamps: + + 20170214083000Z + 2017021408Z + 20160315220000-0500 + 20151201235900 + + TTiimmeeoouutt__SSppeecc + A command may have a timeout associated with it. If the timeout expires + before the command has exited, the command will be terminated. The + timeout may be specified in combinations of days, hours, minutes and + seconds with a single-letter case-insensitive suffix that indicates the + unit of time. For example, a timeout of 7 days, 8 hours, 30 minutes and + 10 seconds would be written as 7d8h30m10s. If a number is specified + without a unit, seconds are assumed. Any of the days, minutes, hours or + seconds may be omitted. The order must be from largest to smallest unit + and a unit may not be specified more than once. + + The following are all _v_a_l_i_d timeout values: 7d8h30m10s, 14d, 8h30m, 600s, + 3600. The following are _i_n_v_a_l_i_d timeout values: 12m2w1d, 30s10m4h, + 1d2d3h. + + This option is only supported by version 1.8.20 or higher. + TTaagg__SSppeecc A command may have zero or more tags associated with it. The following tag values are supported: EXEC, NOEXEC, FOLLOW, NOFOLLOW, LOG_INPUT, @@ -668,8 +722,8 @@ the group specified by the _e_x_e_m_p_t___g_r_o_u_p option. By default, if the NOPASSWD tag is applied to any of the entries for a - user on the current host, he or she will be able to run ``sudo -l'' - without a password. Additionally, a user may only run ``sudo -v'' + user on the current host, he or she will be able to run "sudo -l" + without a password. Additionally, a user may only run "sudo -v" without a password if the NOPASSWD tag is present for all a user's entries that pertain to the current host. This behavior may be overridden via the _v_e_r_i_f_y_p_w and _l_i_s_t_p_w options. @@ -690,7 +744,7 @@ ssuuddoo allows shell-style _w_i_l_d_c_a_r_d_s (aka meta or glob characters) to be used in host names, path names and command line arguments in the _s_u_d_o_e_r_s file. Wildcard matching is done via the glob(3) and fnmatch(3) functions - as specified by IEEE Std 1003.1 (``POSIX.1''). + as specified by IEEE Std 1003.1 ("POSIX.1"). * Matches any set of zero or more characters (including white space). @@ -786,7 +840,7 @@ The file name may also include the %h escape, signifying the short form of the host name. In other words, if the machine's host name is - ``xerxes'', then + "xerxes", then #include /etc/sudoers.%h @@ -798,14 +852,17 @@ #includedir /etc/sudoers.d - ssuuddoo will read each file in _/_e_t_c_/_s_u_d_o_e_r_s_._d, skipping file names that end - in `~' or contain a `.' character to avoid causing problems with package - manager or editor temporary/backup files. Files are parsed in sorted - lexical order. That is, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_0_1___f_i_r_s_t will be parsed before + ssuuddoo will suspend processing of the current file and read each file in + _/_e_t_c_/_s_u_d_o_e_r_s_._d, skipping file names that end in `~' or contain a `.' + character to avoid causing problems with package manager or editor + temporary/backup files. Files are parsed in sorted lexical order. That + is, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_0_1___f_i_r_s_t will be parsed before _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1_0___s_e_c_o_n_d. Be aware that because the sorting is lexical, not numeric, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1___w_h_o_o_p_s would be loaded _a_f_t_e_r _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1_0___s_e_c_o_n_d. Using a consistent number of leading zeroes in - the file names can be used to avoid such problems. + the file names can be used to avoid such problems. After parsing the + files in the directory, control returns to the file that contained the + #includedir directive. Note that unlike files included via #include, vviissuuddoo will not edit the files in a #includedir directory unless one of them contains a syntax @@ -841,10 +898,10 @@ !root it would explicitly deny root but not match any other users. This is - different from a true ``negation'' operator. + different from a true "negation" operator. Note, however, that using a `!' in conjunction with the built-in AALLLL - alias to allow a user to run ``all but a few'' commands rarely works as + alias to allow a user to run "all but a few" commands rarely works as intended (see _S_E_C_U_R_I_T_Y _N_O_T_E_S below). Long lines can be continued with a backslash (`\') as the last character @@ -955,8 +1012,9 @@ env_reset If set, ssuuddoo will run the command in a minimal environment containing the TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME and SUDO_* variables. - Any variables in the caller's environment that match - the env_keep and env_check lists are then added, + Any variables in the caller's environment or in the + file specified by the _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e option that + match the env_keep and env_check lists are then added, followed by any variables present in the file specified by the _e_n_v___f_i_l_e option (if any). The contents of the env_keep and env_check lists, as modified by global @@ -989,25 +1047,24 @@ domain name. In other words, instead of myhost you would use myhost.mydomain.edu. You may still use the short form if you wish (and even mix the two). This - option is only effective when the ``canonical'' host + option is only effective when the "canonical" host name, as returned by the ggeettaaddddrriinnffoo() or ggeetthhoossttbbyynnaammee() function, is a fully-qualified domain name. This is usually the case when the system is configured to use DNS for host name resolution. If the system is configured to use the _/_e_t_c_/_h_o_s_t_s file - in preference to DNS, the ``canonical'' host name may - not be fully-qualified. The order that sources are - queried for host name resolution is usually specified - in the _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f, _/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f, - _/_e_t_c_/_h_o_s_t_._c_o_n_f, or, in some cases, _/_e_t_c_/_r_e_s_o_l_v_._c_o_n_f - file. In the _/_e_t_c_/_h_o_s_t_s file, the first host name of - the entry is considered to be the ``canonical'' name; - subsequent names are aliases that are not used by - ssuuddooeerrss. For example, the following hosts file line - for the machine ``xyzzy'' has the fully-qualified - domain name as the ``canonical'' host name, and the - short version as an alias. + in preference to DNS, the "canonical" host name may not + be fully-qualified. The order that sources are queried + for host name resolution is usually specified in the + _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f, _/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f, _/_e_t_c_/_h_o_s_t_._c_o_n_f, + or, in some cases, _/_e_t_c_/_r_e_s_o_l_v_._c_o_n_f file. In the + _/_e_t_c_/_h_o_s_t_s file, the first host name of the entry is + considered to be the "canonical" name; subsequent names + are aliases that are not used by ssuuddooeerrss. For example, + the following hosts file line for the machine "xyzzy" + has the fully-qualified domain name as the "canonical" + host name, and the short version as an alias. 192.168.1.1 xyzzy.sudo.ws xyzzy @@ -1020,7 +1077,7 @@ which renders ssuuddoo unusable if DNS stops working (for example if the machine is disconnected from the network). Also note that just like with the hosts - file, you must use the ``canonical'' name as DNS knows + file, you must use the "canonical" name as DNS knows it. That is, you may not use a host alias (CNAME entry) due to performance issues and the fact that there is no way to get all aliases from DNS. @@ -1071,6 +1128,12 @@ meaningful for the cn=defaults section. This flag is _o_f_f by default. + ignore_unknown_defaults + If set, ssuuddoo will not produce a warning if it + encounters an unknown Defaults entry in the _s_u_d_o_e_r_s + file or an unknown sudoOption in LDAP. This flag is + _o_f_f by default. + insults If set, ssuuddoo will insult users when they enter an incorrect password. This flag is _o_f_f by default. @@ -1134,24 +1197,39 @@ _o_n by default. match_group_by_gid - By default, when matching groups, ssuuddooeerrss will first - resolve all the user's group IDs to group names and - then compare those group names to any group names - listed in the _s_u_d_o_e_r_s file. This works well on systems - where the number of groups listed in the _s_u_d_o_e_r_s file - is larger than the number of groups a typical user - belongs to. On systems where group lookups are slow, - where users may belong to a large number of groups, and - where the number of groups listed in the _s_u_d_o_e_r_s file - is relatively small, it may be prohibitively expensive - and running commands via ssuuddoo may take longer than - normal. On such systems it may be faster to use the + By default, ssuuddooeerrss will look up each group the user is + a member of by group ID to determine the group name + (this is only done once). The resulting list of the + user's group names is used when matching groups listed + in the _s_u_d_o_e_r_s file. This works well on systems where + the number of groups listed in the _s_u_d_o_e_r_s file is + larger than the number of groups a typical user belongs + to. On systems where group lookups are slow, where + users may belong to a large number of groups, and where + the number of groups listed in the _s_u_d_o_e_r_s file is + relatively small, it may be prohibitively expensive and + running commands via ssuuddoo may take longer than normal. + On such systems it may be faster to use the _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d flag to avoid resolving the user's - group IDs to group names and instead resolve all group - names listed in the _s_u_d_o_e_r_s file, matching by group ID - instead of by group name. The _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d flag - has no effect when _s_u_d_o_e_r_s data is stored in LDAP. - This flag is _o_f_f by default. + group IDs to group names. In this case, ssuuddooeerrss must + look up any group name listed in the _s_u_d_o_e_r_s file and + use the group ID instead of the group name when + determining whether the user is a member of the group. + + Note that if _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d is enabled, group + database lookups performed by ssuuddooeerrss will be keyed by + group name as opposed to group ID. On systems where + there are multiple sources for the group database, it + is possible to have conflicting group names or group + IDs in the local _/_e_t_c_/_g_r_o_u_p file and the remote group + database. On such systems, enabling or disabling + _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d can be used to choose whether group + database queries are performed by name (enabled) or ID + (disabled), which may aid in working around group entry + conflicts. + + The _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d flag has no effect when _s_u_d_o_e_r_s + data is stored in LDAP. This flag is _o_f_f by default. This setting is only supported by version 1.8.18 or higher. @@ -1199,10 +1277,9 @@ passprompt_override The password prompt specified by _p_a_s_s_p_r_o_m_p_t will normally only be used if the password prompt provided - by systems such as PAM matches the string - ``Password:''. If _p_a_s_s_p_r_o_m_p_t___o_v_e_r_r_i_d_e is set, - _p_a_s_s_p_r_o_m_p_t will always be used. This flag is _o_f_f by - default. + by systems such as PAM matches the string "Password:". + If _p_a_s_s_p_r_o_m_p_t___o_v_e_r_r_i_d_e is set, _p_a_s_s_p_r_o_m_p_t will always + be used. This flag is _o_f_f by default. path_info Normally, ssuuddoo will tell the user when a command could not be found in their PATH environment variable. Some @@ -1238,9 +1315,9 @@ default. root_sudo If set, root is allowed to run ssuuddoo too. Disabling - this prevents users from ``chaining'' ssuuddoo commands to - get a root shell by doing something like ``sudo sudo - /bin/sh''. Note, however, that turning off _r_o_o_t___s_u_d_o + this prevents users from "chaining" ssuuddoo commands to + get a root shell by doing something like "sudo sudo + /bin/sh". Note, however, that turning off _r_o_o_t___s_u_d_o will also prevent root from running ssuuddooeeddiitt. Disabling _r_o_o_t___s_u_d_o provides no real additional security; it exists purely for historical reasons. @@ -1383,6 +1460,18 @@ this option will make that impossible. This flag is _o_f_f by default. + user_command_timeouts + If set, the user may specify a timeout on the command + line. If the timeout expires before the command has + exited, the command will be terminated. If a timeout + is specified both in the _s_u_d_o_e_r_s file and on the + command line, the smaller of the two timeouts will be + used. See the Timeout_Spec section for a description + of the timeout syntax. This flag is _o_f_f by default. + + This setting is only supported by version 1.8.20 or + higher. + utmp_runas If set, ssuuddoo will store the name of the runas user when updating the utmp (or utmpx) file. By default, ssuuddoo stores the name of the invoking user. This flag is _o_f_f @@ -1393,7 +1482,7 @@ on the terminal. If the _v_i_s_i_b_l_e_p_w flag is set, ssuuddoo will prompt for a password even when it would be visible on the screen. This makes it possible to run - things like ``ssh somehost sudo ls'' since by default, + things like "ssh somehost sudo ls" since by default, ssh(1) does not allocate a tty when running a command. This flag is _o_f_f by default. @@ -1406,18 +1495,24 @@ file descriptor at which to start closing. The default is 3. + command_timeout The maximum amount of time a command is allowed to run + before it is terminated. See the Timeout_Spec section + for a description of the timeout syntax. + + This setting is only supported by version 1.8.20 or + higher. + maxseq The maximum sequence number that will be substituted - for the ``%{seq}'' escape in the I/O log file (see the + for the "%{seq}" escape in the I/O log file (see the _i_o_l_o_g___d_i_r description above for more information). - While the value substituted for ``%{seq}'' is in base - 36, _m_a_x_s_e_q itself should be expressed in decimal. - Values larger than 2176782336 (which corresponds to the - base 36 sequence number ``ZZZZZZ'') will be silently - truncated to 2176782336. The default value is - 2176782336. + While the value substituted for "%{seq}" is in base 36, + _m_a_x_s_e_q itself should be expressed in decimal. Values + larger than 2176782336 (which corresponds to the base + 36 sequence number "ZZZZZZ") will be silently truncated + to 2176782336. The default value is 2176782336. Once the local sequence number reaches the value of - _m_a_x_s_e_q, it will ``roll over'' to zero, after which + _m_a_x_s_e_q, it will "roll over" to zero, after which ssuuddooeerrss will truncate and re-use any existing I/O log path names. @@ -1428,6 +1523,23 @@ password before ssuuddoo logs the failure and exits. The default is 3. + syslog_maxlen On many systems, syslog(3) has a relatively small log + buffer. IETF RFC 5424 states that syslog servers must + support messages of at least 480 bytes and should + support messages up to 2048 bytes. By default, ssuuddooeerrss + creates log messages up to 980 bytes which corresponds + to the historic BSD syslog implementation which used a + 1024 byte buffer to store the message, date, hostname + and program name. To prevent syslog messages from + being truncated, ssuuddooeerrss will split up log messages + that are larger than _s_y_s_l_o_g___m_a_x_l_e_n bytes. When a + message is split, additional parts will include the + string "(command continued)" after the user name and + before the continued command line arguments. + + This setting is only supported by version 1.8.19 or + higher. + IInntteeggeerrss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt: loglinelen Number of characters per line for the file log. This @@ -1450,7 +1562,7 @@ value less than 0 the user's time stamp will not expire until the system is rebooted. This can be used to allow users to create or delete their own time stamps - via ``sudo -v'' and ``sudo -k'' respectively. + via "sudo -v" and "sudo -k" respectively. umask Umask to use when running the command. Negate this option or set it to 0777 to preserve the user's umask. @@ -1528,7 +1640,7 @@ options are enabled or when the LOG_INPUT or LOG_OUTPUT tags are present for a command. Note that _i_o_l_o_g___f_i_l_e may contain directory components. The default is - ``%{seq}''. + "%{seq}". See the _i_o_l_o_g___d_i_r option above for a list of supported percent (`%') escape sequences. @@ -1543,27 +1655,50 @@ will be truncated and overwritten unless _i_o_l_o_g___f_i_l_e ends in six or more Xs. + iolog_flush If set, ssuuddoo will flush I/O log data to disk after each + write instead of buffering it. This makes it possible + to view the logs in real-time as the program is + executing but may significantly reduce the + effectiveness of I/O log compression. This flag is _o_f_f + by default. + + This setting is only supported by version 1.8.20 or + higher. + iolog_group The group name to look up when setting the group ID on - new I/O log files and directories. By default, I/O log - files and directories inherit the group ID of the - parent directory. + new I/O log files and directories. If _i_o_l_o_g___g_r_o_u_p is + not set, the primary group ID of the user specified by + _i_o_l_o_g___u_s_e_r is used. If neither _i_o_l_o_g___g_r_o_u_p nor + _i_o_l_o_g___u_s_e_r are set, I/O log files and directories are + created with group ID 0. This setting is only supported by version 1.8.19 or higher. - iolog_mode The file permision mode to use when creating I/O log - files, mode bits other than 0666 are ignored. When - creating I/O log directories, search (execute) bits are - added to to match the read and write bits specified by - _i_o_l_o_g___m_o_d_e. Defaults to 0600. + iolog_mode The file mode to use when creating I/O log files. Mode + bits for read and write permissions for owner, group or + other are honored, everything else is ignored. The + file permissions will always include the owner read and + write bits, even if they are not present in the + specified mode. When creating I/O log directories, + search (execute) bits are added to to match the read + and write bits specified by _i_o_l_o_g___m_o_d_e. Defaults to + 0600 (read and write by user only). This setting is only supported by version 1.8.19 or higher. - iolog_user The user name to look up when setting the user ID on - new I/O log files and directories. By default, I/O log - files and directories are owned by the superuser (user - ID 0). + iolog_user The user name to look up when setting the user and + group IDs on new I/O log files and directories. If + _i_o_l_o_g___g_r_o_u_p is set, it will be used instead of the + user's primary group ID. By default, I/O log files and + directories are created with user and group ID 0. + + This setting can be useful when the I/O logs are stored + on a Network File System (NFS) share. Having a + dedicated user own the I/O log files means that ssuuddooeerrss + does not write to the log files as user ID 0, which is + usually not permitted by NFS. This setting is only supported by version 1.8.19 or higher. @@ -1585,7 +1720,7 @@ mailsub Subject of the mail sent to the _m_a_i_l_t_o user. The escape %h will expand to the host name of the machine. - Default is ``*** SECURITY information for %h ***''. + Default is "*** SECURITY information for %h ***". noexec_file As of ssuuddoo version 1.8.1 this option is no longer supported. The path to the noexec file should now be @@ -1594,7 +1729,7 @@ pam_login_service On systems that use PAM for authentication, this is the service name used when the --ii option is specified. The - default value is ``sudo''. See the description of + default value is "sudo". See the description of _p_a_m___s_e_r_v_i_c_e for more information. This setting is only supported by version 1.8.8 or @@ -1604,7 +1739,7 @@ name specifies the PAM policy to apply. This usually corresponds to an entry in the _p_a_m_._c_o_n_f file or a file in the _/_e_t_c_/_p_a_m_._d directory. The default value is - ``sudo''. + "sudo". This setting is only supported by version 1.8.8 or higher. @@ -1633,7 +1768,7 @@ %% two consecutive % characters are collapsed into a single % character - The default value is ``Password:''. + The default value is "Password:". privs The default Solaris privileges to use when constructing a new privilege set for a command. This is passed to @@ -1655,47 +1790,10 @@ not specified on the command line. This defaults to root. - syslog_badpri Syslog priority to use when the user is not allowed to - run a command or when authentication is unsuccessful. - Defaults to alert. - - The following syslog priorities are supported: aalleerrtt, - ccrriitt, ddeebbuugg, eemmeerrgg, eerrrr, iinnffoo, nnoottiiccee, wwaarrnniinngg, and - nnoonnee. Negating the option or setting it to a value of - nnoonnee will disable logging of unsuccessful commands. - - syslog_goodpri Syslog priority to use when the user is allowed to run - a command and authentication is successful. Defaults - to notice. - - See _s_y_s_l_o_g___b_a_d_p_r_i for the list of supported syslog - priorities. Negating the option or setting it to a - value of nnoonnee will disable logging of successful - commands. - - syslog_goodpri - - syslog_maxlen On many systems, syslog(3) has a relatively small log - buffer. IETF RFC 5424 states that syslog servers must - support messages of at least 480 bytes and should - support messages up to 2048 bytes. By default, ssuuddooeerrss - creates log messages up to 980 bytes which corresponds - to the historic BSD syslog implementation which used a - 1024 byte buffer to store the message, date, hostname - and program name. To prevent syslog messages from - being truncated, ssuuddooeerrss will split up log messages - that are larger than _s_y_s_l_o_g___m_a_x_l_e_n bytes. When a - message is split, additional parts will include the - string ``(command continued)'' after the user name and - before the continued command line arguments. - - This setting is only supported by version 1.8.19 or - higher. - sudoers_locale Locale to use when parsing the sudoers file, logging commands, and sending email. Note that changing the locale may affect how sudoers is interpreted. Defaults - to ``C''. + to "C". timestampdir The directory in which ssuuddoo stores its time stamp files. This directory should be cleared when the @@ -1716,16 +1814,50 @@ env_file The _e_n_v___f_i_l_e option specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either - be of the form ``VARIABLE=value'' or ``export - VARIABLE=value''. The value may optionally be surrounded - by single or double quotes. Variables in this file are - subject to other ssuuddoo environment settings such as _e_n_v___k_e_e_p - and _e_n_v___c_h_e_c_k. + be of the form "VARIABLE=value" or "export VARIABLE=value". + The value may optionally be surrounded by single or double + quotes. Variables in this file are only added if the + variable does not already exist in the environment. This + file is considered to be part of the security policy, its + contents are not subject to other ssuuddoo environment + restrictions such as _e_n_v___k_e_e_p and _e_n_v___c_h_e_c_k. exempt_group Users in this group are exempt from password and PATH requirements. The group name specified should not include a % prefix. This is not set by default. + fdexec Determines whether ssuuddoo will execute a command by its path + or by an open file descriptor. It has the following + possible values: + + always Always execute by file descriptor. + + never Never execute by file descriptor. + + digest_only + Only execute by file descriptor if the command has + an associated digest in the _s_u_d_o_e_r_s file. + + The default value is _d_i_g_e_s_t___o_n_l_y. This avoids a time of + check versus time of use race condition when the command is + located in a directory writable by the invoking user. + + Note that _f_d_e_x_e_c will change the first element of the + argument vector for scripts ($0 in the shell) due to the + way the kernel runs script interpreters. Instead of being + a normal path, it will refer to a file descriptor. For + example, _/_d_e_v_/_f_d_/_4 on Solaris and _/_p_r_o_c_/_s_e_l_f_/_f_d_/_4 on Linux. + A workaround is to use the SUDO_COMMAND environment + variable instead. + + The _f_d_e_x_e_c setting is only used when the command is matched + by path name. It has no effect if the command is matched + by the built-in AALLLL alias. + + This setting is only supported by version 1.8.20 or higher. + If the operating system does not support the fexecve(2) + system call, this setting has no effect. + group_plugin A string containing a ssuuddooeerrss group plugin with optional arguments. The string should consist of the plugin path, either fully-qualified or relative to the @@ -1786,20 +1918,38 @@ mailerpath Path to mail program used to send warning mail. Defaults to the path to sendmail found at configure time. - mailfrom Address to use for the ``from'' address when sending - warning and error mail. The address should be enclosed in - double quotes ("") to protect against ssuuddoo interpreting the - @ sign. Defaults to the name of the user running ssuuddoo. + mailfrom Address to use for the "from" address when sending warning + and error mail. The address should be enclosed in double + quotes ("") to protect against ssuuddoo interpreting the @ + sign. Defaults to the name of the user running ssuuddoo. mailto Address to send warning and error mail to. The address should be enclosed in double quotes ("") to protect against ssuuddoo interpreting the @ sign. Defaults to root. + restricted_env_file + The _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e option specifies the fully + qualified path to a file containing variables to be set in + the environment of the program being run. Entries in this + file should either be of the form "VARIABLE=value" or + "export VARIABLE=value". The value may optionally be + surrounded by single or double quotes. Variables in this + file are only added if the variable does not already exist + in the environment. Unlike _e_n_v___f_i_l_e, the file's contents + are not trusted and are processed in a manner similar to + that of the invoking user's environment. If _e_n_v___r_e_s_e_t is + enabled, variables in the file will only be added if they + are matched by either the _e_n_v___c_h_e_c_k or _e_n_v___k_e_e_p list. If + _e_n_v___r_e_s_e_t is disabled, variables in the file are added as + long as they are not matched by the _e_n_v___d_e_l_e_t_e list. In + either case, the contents of _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e are + processed before the contents of _e_n_v___f_i_l_e. + secure_path Path used for every command run from ssuuddoo. If you don't trust the people running ssuuddoo to have a sane PATH environment variable you may want to use this. Another use - is if you want to have the ``root path'' be separate from - the ``user path''. Users in the group specified by the + is if you want to have the "root path" be separate from the + "user path". Users in the group specified by the _e_x_e_m_p_t___g_r_o_u_p option are not affected by _s_e_c_u_r_e___p_a_t_h. This option is not set by default. @@ -1810,6 +1960,25 @@ your OS supports it), aauutthh, ddaaeemmoonn, uusseerr, llooccaall00, llooccaall11, llooccaall22, llooccaall33, llooccaall44, llooccaall55, llooccaall66, and llooccaall77. + syslog_badpri + Syslog priority to use when the user is not allowed to run + a command or when authentication is unsuccessful. Defaults + to alert. + + The following syslog priorities are supported: aalleerrtt, ccrriitt, + ddeebbuugg, eemmeerrgg, eerrrr, iinnffoo, nnoottiiccee, wwaarrnniinngg, and nnoonnee. + Negating the option or setting it to a value of nnoonnee will + disable logging of unsuccessful commands. + + syslog_goodpri + Syslog priority to use when the user is allowed to run a + command and authentication is successful. Defaults to + notice. + + See _s_y_s_l_o_g___b_a_d_p_r_i for the list of supported syslog + priorities. Negating the option or setting it to a value + of nnoonnee will disable logging of successful commands. + verifypw This option controls when a password will be required when a user runs ssuuddoo with the --vv option. It has the following possible values: @@ -1835,13 +2004,13 @@ LLiissttss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt: env_check Environment variables to be removed from the user's - environment unless they are considered ``safe''. For - all variables except TZ, ``safe'' means that the - variable's value does not contain any `%' or `/' - characters. This can be used to guard against printf- - style format vulnerabilities in poorly-written - programs. The TZ variable is considered unsafe if any - of the following are true: + environment unless they are considered "safe". For all + variables except TZ, "safe" means that the variable's + value does not contain any `%' or `/' characters. This + can be used to guard against printf-style format + vulnerabilities in poorly-written programs. The TZ + variable is considered unsafe if any of the following + are true: ++oo It consists of a fully-qualified path name, optionally prefixed with a colon (`:'), that does @@ -1938,10 +2107,10 @@ Where the fields are as follows: date The date the command was run. Typically, this is in the - format ``MMM, DD, HH:MM:SS''. If logging via syslog(3), - the actual date format is controlled by the syslog daemon. - If logging to a file and the _l_o_g___y_e_a_r option is enabled, - the date will also include the year. + format "MMM, DD, HH:MM:SS". If logging via syslog(3), the + actual date format is controlled by the syslog daemon. If + logging to a file and the _l_o_g___y_e_a_r option is enabled, the + date will also include the year. hostname The name of the host ssuuddoo was run on. This field is only present when logging via syslog(3). @@ -1951,9 +2120,9 @@ username The login name of the user who ran ssuuddoo. - ttyname The short name of the terminal (e.g. ``console'', - ``tty01'', or ``pts/0'') ssuuddoo was run on, or ``unknown'' if - there was no terminal present. + ttyname The short name of the terminal (e.g. "console", "tty01", or + "pts/0") ssuuddoo was run on, or "unknown" if there was no + terminal present. cwd The current working directory that ssuuddoo was run in. @@ -1972,7 +2141,7 @@ command The actual command that was executed. Messages are logged using the locale specified by _s_u_d_o_e_r_s___l_o_c_a_l_e, which - defaults to the ``C'' locale. + defaults to the "C" locale. DDeenniieedd ccoommmmaanndd lloogg eennttrriieess If the user is not allowed to run the command, the reason for the denial @@ -2025,7 +2194,7 @@ user ID 0 to a different value. Normally, ssuuddooeerrss tries to open the _s_u_d_o_e_r_s file using group permissions to avoid this problem. Consider either changing the ownership of _/_e_t_c_/_s_u_d_o_e_r_s or adding an argument - like ``sudoers_uid=N'' (where `N' is the user ID that owns the _s_u_d_o_e_r_s + like "sudoers_uid=N" (where `N' is the user ID that owns the _s_u_d_o_e_r_s file) to the end of the ssuuddooeerrss Plugin line in the sudo.conf(4) file. unable to stat /etc/sudoers @@ -2037,20 +2206,20 @@ /etc/sudoers is owned by uid N, should be 0 The _s_u_d_o_e_r_s file has the wrong owner. If you wish to change the - _s_u_d_o_e_r_s file owner, please add ``sudoers_uid=N'' (where `N' is the - user ID that owns the _s_u_d_o_e_r_s file) to the ssuuddooeerrss Plugin line in the + _s_u_d_o_e_r_s file owner, please add "sudoers_uid=N" (where `N' is the user + ID that owns the _s_u_d_o_e_r_s file) to the ssuuddooeerrss Plugin line in the sudo.conf(4) file. /etc/sudoers is world writable The permissions on the _s_u_d_o_e_r_s file allow all users to write to it. The _s_u_d_o_e_r_s file must not be world-writable, the default file mode is 0440 (readable by owner and group, writable by none). The default - mode may be changed via the ``sudoers_mode'' option to the ssuuddooeerrss + mode may be changed via the "sudoers_mode" option to the ssuuddooeerrss Plugin line in the sudo.conf(4) file. /etc/sudoers is owned by gid N, should be 1 The _s_u_d_o_e_r_s file has the wrong group ownership. If you wish to change - the _s_u_d_o_e_r_s file group ownership, please add ``sudoers_gid=N'' (where + the _s_u_d_o_e_r_s file group ownership, please add "sudoers_gid=N" (where `N' is the group ID that owns the _s_u_d_o_e_r_s file) to the ssuuddooeerrss Plugin line in the sudo.conf(4) file. @@ -2107,8 +2276,8 @@ and log all user input and/or output. I/O is logged to the directory specified by the _i_o_l_o_g___d_i_r option (_/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o by default) using a unique session ID that is included in the ssuuddoo log line, prefixed with - ``TSID=''. The _i_o_l_o_g___f_i_l_e option may be used to control the format of - the session ID. + "TSID=". The _i_o_l_o_g___f_i_l_e option may be used to control the format of the + session ID. Each I/O log is stored in a separate directory that contains the following files: @@ -2135,10 +2304,14 @@ _s_t_d_e_r_r standard error to a pipe or redirected to a file All files other than _l_o_g are compressed in gzip format unless the - _c_o_m_p_r_e_s_s___i_o option has been disabled. Due to buffering, the I/O log data - will not be complete until the ssuuddoo command has completed. The output - portion of an I/O log file can be viewed with the sudoreplay(1m) utility, - which can also be used to list or search the available logs. + _c_o_m_p_r_e_s_s___i_o flag has been disabled. Due to buffering, it is not normally + possible to display the I/O logs in real-time as the program is executing + The I/O log data will not be complete until the program run by ssuuddoo has + exited or has been terminated by a signal. The _i_o_l_o_g___f_l_u_s_h flag can be + used to disable buffering, in which case I/O log data is written to disk + as soon as it is available. The output portion of an I/O log file can be + viewed with the sudoreplay(1m) utility, which can also be used to list or + search the available logs. Note that user input may contain sensitive information such as passwords (even if they are not echoed to the screen), which will be stored in the @@ -2287,7 +2460,7 @@ The user jjooee may only su(1) to operator. - pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root + pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* %opers ALL = (: ADMINGRP) /usr/sbin/ @@ -2314,7 +2487,7 @@ jim +biglab = ALL The user jjiimm may run any command on machines in the _b_i_g_l_a_b netgroup. - ssuuddoo knows that ``biglab'' is a netgroup due to the `+' prefix. + ssuuddoo knows that "biglab" is a netgroup due to the `+' prefix. +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser @@ -2371,7 +2544,7 @@ SSEECCUURRIITTYY NNOOTTEESS LLiimmiittaattiioonnss ooff tthhee ``!!'' ooppeerraattoorr - It is generally not effective to ``subtract'' commands from AALLLL using the + It is generally not effective to "subtract" commands from AALLLL using the `!' operator. A user can trivially circumvent this by copying the desired command to a different name and then executing that. For example: @@ -2475,7 +2648,7 @@ invoking user and with the environment unmodified. More information may be found in the description of the --ee option in sudo(1m). - For example, to allow user operator to edit the ``message of the day'' + For example, to allow user operator to edit the "message of the day" file: operator sudoedit /etc/motd @@ -2634,10 +2807,10 @@ the archives. DDIISSCCLLAAIIMMEERR - ssuuddoo is provided ``AS IS'' and any express or implied warranties, + ssuuddoo is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 November 30, 2016 Sudo 1.8.19 +Sudo 1.8.20 May 8, 2017 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/sudoers.ldap.cat sudo-1.8.20p2/doc/sudoers.ldap.cat --- sudo-1.8.19p1/doc/sudoers.ldap.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoers.ldap.cat 2017-05-10 15:38:43.000000000 +0000 @@ -91,10 +91,10 @@ cards). If a command name is preceded by an exclamation point, `!', the user will be prohibited from running that command. - The built-in command ``sudoedit'' is used to permit a user to run + The built-in command "sudoedit" is used to permit a user to run ssuuddoo with the --ee option (or as ssuuddooeeddiitt). It may take command line - arguments just as a normal command does. Note that ``sudoedit'' is - a command built into ssuuddoo itself and must be specified in without a + arguments just as a normal command does. Note that "sudoedit" is a + command built into ssuuddoo itself and must be specified in without a leading path. The special value ALL will match any command. @@ -169,9 +169,8 @@ more closely mimic the behavior of the sudoers file, where the order of the entries influences the result. If multiple entries match, the entry with the highest sudoOrder attribute is chosen. - This corresponds to the ``last match'' behavior of the sudoers - file. If the sudoOrder attribute is not present, a value of 0 is - assumed. + This corresponds to the "last match" behavior of the sudoers file. + If the sudoOrder attribute is not present, a value of 0 is assumed. The sudoOrder attribute is only available in ssuuddoo versions 1.7.5 and higher. @@ -338,7 +337,7 @@ The BBIINNDDPPWW parameter specifies the password to use when performing LDAP operations. This is typically used in conjunction with the BBIINNDDDDNN parameter. The _s_e_c_r_e_t may be a plain text password or a - base64-encoded string with a ``base64:'' prefix. For example: + base64-encoded string with a "base64:" prefix. For example: BINDPW base64:dGVzdA== @@ -425,6 +424,10 @@ default, ssuuddoo will use an anonymous connection. This option is only relevant when using SASL authentication. + SSAASSLL__MMEECCHH _m_e_c_h_a_n_i_s_m_s + A white space-delimited list of SASL authentication mechanisms to + use. By default, ssuuddoo will use GSSAPI authentication. + SSAASSLL__SSEECCPPRROOPPSS _n_o_n_e_/_p_r_o_p_e_r_t_i_e_s SASL security properties or _n_o_n_e for no properties. See the SASL programmer's manual for details. This option is only relevant when @@ -461,7 +464,7 @@ The SSUUDDOOEERRSS__DDEEBBUUGG parameter is deprecated and will be removed in a future release. The same information is now logged via the ssuuddoo - debugging framework using the ``ldap'' subsystem at priorities _d_i_a_g + debugging framework using the "ldap" subsystem at priorities _d_i_a_g and _i_n_f_o for _d_e_b_u_g___l_e_v_e_l values 1 and 2 respectively. See the sudo.conf(4) manual for details on how to configure ssuuddoo debugging. @@ -561,7 +564,7 @@ The TTLLSS__KKEEYYPPWW contains the password used to decrypt the key database on clients using the Tivoli Directory Server LDAP library. The _s_e_c_r_e_t may be a plain text password or a base64-encoded string - with a ``base64:'' prefix. For example: + with a "base64:" prefix. For example: TLS_KEYPW base64:dGVzdA== @@ -901,10 +904,10 @@ the archives. DDIISSCCLLAAIIMMEERR - ssuuddoo is provided ``AS IS'' and any express or implied warranties, + ssuuddoo is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 September 1, 2016 Sudo 1.8.19 +Sudo 1.8.20 January 17, 2017 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/sudoers.ldap.man.in sudo-1.8.20p2/doc/sudoers.ldap.man.in --- sudo-1.8.19p1/doc/sudoers.ldap.man.in 2016-12-18 13:52:09.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoers.ldap.man.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudoers.ldap.mdoc.in .\" -.\" Copyright (c) 2003-2016 Todd C. Miller +.\" Copyright (c) 2003-2017 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 @@ -16,7 +16,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDOERS.LDAP" "5" "September 1, 2016" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS.LDAP" "5" "January 17, 2017" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -766,6 +766,14 @@ will use an anonymous connection. This option is only relevant when using SASL authentication. .TP 6n +\fBSASL_MECH\fR \fImechanisms\fR +A white space-delimited list of SASL authentication mechanisms to use. +By default, +\fBsudo\fR +will use +\fRGSSAPI\fR +authentication. +.TP 6n \fBSASL_SECPROPS\fR \fInone/properties\fR SASL security properties or \fInone\fR diff -Nru sudo-1.8.19p1/doc/sudoers.ldap.mdoc.in sudo-1.8.20p2/doc/sudoers.ldap.mdoc.in --- sudo-1.8.19p1/doc/sudoers.ldap.mdoc.in 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoers.ldap.mdoc.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2003-2016 Todd C. Miller +.\" Copyright (c) 2003-2017 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 @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd September 1, 2016 +.Dd January 17, 2017 .Dt SUDOERS.LDAP @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -716,6 +716,13 @@ .Nm sudo will use an anonymous connection. This option is only relevant when using SASL authentication. +.It Sy SASL_MECH Ar mechanisms +A white space-delimited list of SASL authentication mechanisms to use. +By default, +.Nm sudo +will use +.Dv GSSAPI +authentication. .It Sy SASL_SECPROPS Ar none/properties SASL security properties or .Em none diff -Nru sudo-1.8.19p1/doc/sudoers.man.in sudo-1.8.20p2/doc/sudoers.man.in --- sudo-1.8.19p1/doc/sudoers.man.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoers.man.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudoers.mdoc.in .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2017 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -21,7 +21,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.TH "SUDOERS" "5" "November 30, 2016" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "5" "May 8, 2017" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -224,7 +224,7 @@ without a password for a short period of time (\fR@timeout@\fR minutes unless overridden by the -\fItimeout\fR +\fItimestamp_timeout\fR option) \&. By default, @@ -466,11 +466,21 @@ are also applied. All other environment variables are removed. .PP -Finally, if the +Finally, the +\fIrestricted_env_file\fR +and +\fIenv_file\fR +files are applied, if present. +The variables in +\fIrestricted_env_file\fR +are applied first and are subject to the same restrictions as the +invoking user's environment, as detailed above. +The variables in \fIenv_file\fR -option is defined, any variables present -in that file will be set to their specified values as long as they -would not conflict with an existing environment variable. +are applied last and are not subject to these restrictions. +In both cases, variables present in the files will only be set to +their specified values if they would not conflict with an existing +environment variable. .SH "SUDOERS FILE FORMAT" The \fIsudoers\fR @@ -890,6 +900,11 @@ fexecve(2) system call when the directory in which the command is located is writable by the user. +See the description of the +\fIfdexec\fR +setting for more information on how +\fBsudo\fR +executes commands that have an associated digest. .PP Command digests are only supported by version 1.8.7 or higher. .SS "Defaults" @@ -977,14 +992,20 @@ Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List -Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd +Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' +Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec) + SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') +Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') + +Timeout_Spec ::= 'TIMEOUT=timeout' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -1180,6 +1201,19 @@ \fBalan\fR may run any command as either user root or bin, optionally setting the group to operator or system. +.SS "Option_Spec" +A +\fRCmnd\fR +may have zero or more options associated with it. +Depending on the system, options may consist of SELinux roles +and/or types, Solaris privileges sets, and command timeouts. +Once an option is set for a +\fRCmnd\fR, +subsequent +\fRCmnd\fRs +in the +\fRCmnd_Spec_List\fR, +inherit that option unless it is overridden by another option. .SS "SELinux_Spec" On systems with SELinux support, \fIsudoers\fR @@ -1235,6 +1269,73 @@ or \(oq\-\(cq character. +.SS "Date_Spec" +\fBsudoers\fR +rules can be specified with a start and end date via the +\fRNOTBEFORE\fR +and +\fRNOTAFTER\fR +settings. +The time stamp must be specified in +\fIGeneralized Time\fR +as defined by RFC 4517. +The format is effectively +\fRyyyymmddHHMMSSZ\fR +where the minutes and seconds are optional. +The +\(oqZ\(cq +suffix indicates that the time stamp is in Coordinated Universal Time (UTC). +It is also possible to specify a timezone offset from UTC in hours +and minutes instead of a +\(oqZ\(cq. +For example, +\(oq-0500\(cq +would correspond to Eastern Standard time in the US. +As an extension, if no +\(oqZ\(cq +or timezone offset is specified, local time will be used. +.PP +The following are all valid time stamps: +.nf +.sp +.RS 4n +20170214083000Z +2017021408Z +20160315220000-0500 +20151201235900 +.RE +.fi +.SS "Timeout_Spec" +A command may have a timeout associated with it. +If the timeout expires before the command has exited, the +command will be terminated. +The timeout may be specified in combinations of days, hours, +minutes and seconds with a single-letter case-insensitive suffix +that indicates the unit of time. +For example, a timeout of 7 days, 8 hours, 30 minutes and +10 seconds would be written as +\fR7d8h30m10s\fR. +If a number is specified without a unit, seconds are assumed. +Any of the days, minutes, hours or seconds may be omitted. +The order must be from largest to smallest unit and a unit +may not be specified more than once. +.PP +The following are all +\fIvalid\fR +timeout values: +\fR7d8h30m10s\fR, +\fR14d\fR, +\fR8h30m\fR, +\fR600s\fR, +\fR3600\fR. +The following are +\fIinvalid\fR +timeout values: +\fR12m2w1d\fR, +\fR30s10m4h\fR, +\fR1d2d3h\fR. +.PP +This option is only supported by version 1.8.20 or higher. .SS "Tag_Spec" A command may have zero or more tags associated with it. The following tag values are supported: @@ -1718,7 +1819,7 @@ .fi .PP \fBsudo\fR -will read each file in +will suspend processing of the current file and read each file in \fI/etc/sudoers.d\fR, skipping file names that end in \(oq~\(cq @@ -1738,6 +1839,10 @@ \fI/etc/sudoers.d/10_second\fR. Using a consistent number of leading zeroes in the file names can be used to avoid such problems. +After parsing the files in the directory, control returns to the +file that contained the +\fR#includedir\fR +directive. .PP Note that unlike files included via \fR#include\fR, @@ -2054,8 +2159,10 @@ and \fRSUDO_*\fR variables. -Any -variables in the caller's environment that match the +Any variables in the caller's environment or in the file specified +by the +\fIrestricted_env_file\fR +option that match the \fRenv_keep\fR and \fRenv_check\fR @@ -2266,6 +2373,17 @@ \fIoff\fR by default. .TP 18n +ignore_unknown_defaults +If set, +\fBsudo\fR +will not produce a warning if it encounters an unknown Defaults entry +in the +\fIsudoers\fR +file or an unknown sudoOption in LDAP. +This flag is +\fIoff\fR +by default. +.TP 18n insults If set, \fBsudo\fR @@ -2412,10 +2530,12 @@ by default. .TP 18n match_group_by_gid -By default, when matching groups, +By default, \fBsudoers\fR -will first resolve all the user's group IDs to group names and then -compare those group names to any group names listed in the +will look up each group the user is a member of by group ID to +determine the group name (this is only done once). +The resulting list of the user's group names is used when matching +groups listed in the \fIsudoers\fR file. This works well on systems where the number of groups listed in the @@ -2431,10 +2551,29 @@ may take longer than normal. On such systems it may be faster to use the \fImatch_group_by_gid\fR -flag to avoid resolving the user's group IDs to group names and -instead resolve all group names listed in the +flag to avoid resolving the user's group IDs to group names. +In this case, +\fBsudoers\fR +must look up any group name listed in the \fIsudoers\fR -file, matching by group ID instead of by group name. +file and use the group ID instead of the group name when determining +whether the user is a member of the group. +.sp +Note that if +\fImatch_group_by_gid\fR +is enabled, group database lookups performed by +\fBsudoers\fR +will be keyed by group name as opposed to group ID. +On systems where there are multiple sources for the group database, +it is possible to have conflicting group names or group IDs in the local +\fI/etc/group\fR +file and the remote group database. +On such systems, enabling or disabling +\fImatch_group_by_gid\fR +can be used to choose whether group database queries are performed +by name (enabled) or ID (disabled), which may aid in working around +group entry conflicts. +.sp The \fImatch_group_by_gid\fR flag has no effect when @@ -2914,6 +3053,22 @@ \fIoff\fR by default. .TP 18n +user_command_timeouts +If set, the user may specify a timeout on the command line. +If the timeout expires before the command has exited, the +command will be terminated. +If a timeout is specified both in the +\fIsudoers\fR +file and on the command line, the smaller of the two timeouts will be used. +See the +\fRTimeout_Spec\fR +section for a description of the timeout syntax. +This flag is +\fIoff\fR +by default. +.sp +This setting is only supported by version 1.8.20 or higher. +.TP 18n utmp_runas If set, \fBsudo\fR @@ -2959,6 +3114,15 @@ The default is \fR3\fR. .TP 18n +command_timeout +The maximum amount of time a command is allowed to run before +it is terminated. +See the +\fRTimeout_Spec\fR +section for a description of the timeout syntax. +.sp +This setting is only supported by version 1.8.20 or higher. +.TP 18n maxseq The maximum sequence number that will be substituted for the \(Lq\fR%{seq}\fR\(Rq @@ -2992,6 +3156,28 @@ logs the failure and exits. The default is \fR@passwd_tries@\fR. +.TP 18n +syslog_maxlen +On many systems, +syslog(3) +has a relatively small log buffer. +IETF RFC 5424 states that syslog servers must support messages of +at least 480 bytes and should support messages up to 2048 bytes. +By default, +\fBsudoers\fR +creates log messages up to 980 bytes which corresponds to the +historic BSD syslog implementation which used a 1024 byte buffer +to store the message, date, hostname and program name. +To prevent syslog messages from being truncated, +\fBsudoers\fR +will split up log messages that are larger than +\fIsyslog_maxlen\fR +bytes. +When a message is split, additional parts will include the string +\(Lq(command continued)\(Rq +after the user name and before the continued command line arguments. +.sp +This setting is only supported by version 1.8.19 or higher. .PP \fBIntegers that can be used in a boolean context\fR: .TP 18n @@ -3188,29 +3374,64 @@ more \fRX\fRs. .TP 18n +iolog_flush +If set, +\fBsudo\fR +will flush I/O log data to disk after each write instead of buffering it. +This makes it possible to view the logs in real-time as the program +is executing but may significantly reduce the effectiveness of I/O +log compression. +This flag is +\fIoff\fR +by default. +.sp +This setting is only supported by version 1.8.20 or higher. +.TP 18n iolog_group The group name to look up when setting the group ID on new I/O log files and directories. -By default, I/O log files and directories inherit the group ID of -the parent directory. +If +\fIiolog_group\fR +is not set, +the primary group ID of the user specified by +\fIiolog_user\fR +is used. +If neither +\fIiolog_group\fR +nor +\fIiolog_user\fR +are set, I/O log files and directories are created with group ID 0. .sp This setting is only supported by version 1.8.19 or higher. .TP 18n iolog_mode -The file permision mode to use when creating I/O log files, -mode bits other than 0666 are ignored. +The file mode to use when creating I/O log files. +Mode bits for read and write permissions for owner, group or other +are honored, everything else is ignored. +The file permissions will always include the owner read and +write bits, even if they are not present in the specified mode. When creating I/O log directories, search (execute) bits are added to to match the read and write bits specified by \fIiolog_mode\fR. -Defaults to 0600. +Defaults to 0600 (read and write by user only). .sp This setting is only supported by version 1.8.19 or higher. .TP 18n iolog_user -The user name to look up when setting the user ID on new I/O log -files and directories. -By default, I/O log files and directories are owned by the superuser -(user ID 0). +The user name to look up when setting the user and group IDs on new +I/O log files and directories. +If +\fIiolog_group\fR +is set, it will be used instead of the user's primary group ID. +By default, I/O log files and directories are created with user and +group ID 0. +.sp +This setting can be useful when the I/O logs are stored on a Network +File System (NFS) share. +Having a dedicated user own the I/O log files means that +\fBsudoers\fR +does not write to the log files as user ID 0, which is usually +not permitted by NFS. .sp This setting is only supported by version 1.8.19 or higher. .TP 18n @@ -3367,64 +3588,6 @@ This defaults to \fR@runas_default@\fR. .TP 18n -syslog_badpri -Syslog priority to use when the user is not allowed to run a command or -when authentication is unsuccessful. -Defaults to -\fR@badpri@\fR. -.sp -The following syslog priorities are supported: -\fBalert\fR, -\fBcrit\fR, -\fBdebug\fR, -\fBemerg\fR, -\fBerr\fR, -\fBinfo\fR, -\fBnotice\fR, -\fBwarning\fR, -and -\fBnone\fR. -Negating the option or setting it to a value of -\fBnone\fR -will disable logging of unsuccessful commands. -.TP 18n -syslog_goodpri -Syslog priority to use when the user is allowed to run a command and -authentication is successful. -Defaults to -\fR@goodpri@\fR. -.sp -See -\fIsyslog_badpri\fR -for the list of supported syslog priorities. -Negating the option or setting it to a value of -\fBnone\fR -will disable logging of successful commands. -.TP 18n -syslog_goodpri -.TP 18n -syslog_maxlen -On many systems, -syslog(3) -has a relatively small log buffer. -IETF RFC 5424 states that syslog servers must support messages of -at least 480 bytes and should support messages up to 2048 bytes. -By default, -\fBsudoers\fR -creates log messages up to 980 bytes which corresponds to the -historic BSD syslog implementation which used a 1024 byte buffer -to store the message, date, hostname and program name. -To prevent syslog messages from being truncated, -\fBsudoers\fR -will split up log messages that are larger than -\fIsyslog_maxlen\fR -bytes. -When a message is split, additional parts will include the string -\(Lq(command continued)\(Rq -after the user name and before the continued command line arguments. -.sp -This setting is only supported by version 1.8.19 or higher. -.TP 18n sudoers_locale Locale to use when parsing the sudoers file, logging commands, and sending email. @@ -3468,9 +3631,12 @@ or \(Lq\fRexport VARIABLE=value\fR\(Rq. The value may optionally be surrounded by single or double quotes. -Variables in this file are subject to other +Variables in this file are only added if the variable does not already +exist in the environment. +This file is considered to be part of the security policy, +its contents are not subject to other \fBsudo\fR -environment settings such as +environment restrictions such as \fIenv_keep\fR and \fIenv_check\fR. @@ -3482,6 +3648,60 @@ prefix. This is not set by default. .TP 14n +fdexec +Determines whether +\fBsudo\fR +will execute a command by its path or by an open file descriptor. +It has the following possible values: +.PP +.RS 14n +.PD 0 +.TP 8n +always +Always execute by file descriptor. +.PD +.TP 8n +never +Never execute by file descriptor. +.TP 8n +digest_only +Only execute by file descriptor if the command has an associated digest +in the +\fIsudoers\fR +file. +.PP +The default value is +\fIdigest_only\fR. +This avoids a time of check versus time of use race condition when +the command is located in a directory writable by the invoking user. +.sp +Note that +\fIfdexec\fR +will change the first element of the argument vector for scripts +($0 in the shell) due to the way the kernel runs script interpreters. +Instead of being a normal path, it will refer to a file descriptor. +For example, +\fI/dev/fd/4\fR +on Solaris and +\fI/proc/self/fd/4\fR +on Linux. +A workaround is to use the +\fRSUDO_COMMAND\fR +environment variable instead. +.sp +The +\fIfdexec\fR +setting is only used when the command is matched by path name. +It has no effect if the command is matched by the built-in +\fBALL\fR +alias. +.sp +This setting is only supported by version 1.8.20 or higher. +If the operating system does not support the +fexecve(2) +system call, this setting has no effect. +.RE +.TP 14n group_plugin A string containing a \fBsudoers\fR @@ -3627,6 +3847,41 @@ Defaults to \fR@mailto@\fR. .TP 14n +restricted_env_file +The +\fIrestricted_env_file\fR +option specifies the fully qualified path to a file containing variables +to be set in the environment of the program being run. +Entries in this file should either be of the form +\(Lq\fRVARIABLE=value\fR\(Rq +or +\(Lq\fRexport VARIABLE=value\fR\(Rq. +The value may optionally be surrounded by single or double quotes. +Variables in this file are only added if the variable does not already +exist in the environment. +Unlike +\fIenv_file\fR, +the file's contents are not trusted and are processed in a manner +similar to that of the invoking user's environment. +If +\fIenv_reset\fR +is enabled, variables in the file will only be added if they are +matched by either the +\fIenv_check\fR +or +\fIenv_keep\fR +list. +If +\fIenv_reset\fR +is disabled, variables in the file are added as long as they +are not matched by the +\fIenv_delete\fR +list. +In either case, the contents of +\fIrestricted_env_file\fR +are processed before the contents of +\fIenv_file\fR. +.TP 14n secure_path Path used for every command run from \fBsudo\fR. @@ -3669,6 +3924,41 @@ and \fBlocal7\fR. .TP 14n +syslog_badpri +.br +Syslog priority to use when the user is not allowed to run a command or +when authentication is unsuccessful. +Defaults to +\fR@badpri@\fR. +.sp +The following syslog priorities are supported: +\fBalert\fR, +\fBcrit\fR, +\fBdebug\fR, +\fBemerg\fR, +\fBerr\fR, +\fBinfo\fR, +\fBnotice\fR, +\fBwarning\fR, +and +\fBnone\fR. +Negating the option or setting it to a value of +\fBnone\fR +will disable logging of unsuccessful commands. +.TP 14n +syslog_goodpri +Syslog priority to use when the user is allowed to run a command and +authentication is successful. +Defaults to +\fR@goodpri@\fR. +.sp +See +\fIsyslog_badpri\fR +for the list of supported syslog priorities. +Negating the option or setting it to a value of +\fBnone\fR +will disable logging of successful commands. +.TP 14n verifypw This option controls when a password will be required when a user runs \fBsudo\fR @@ -4287,10 +4577,16 @@ \fIlog\fR are compressed in gzip format unless the \fIcompress_io\fR -option has been disabled. -Due to buffering, the I/O log data will not be complete until the +flag has been disabled. +Due to buffering, it is not normally possible to display the I/O logs in +real-time as the program is executing +The I/O log data will not be complete until the program run by \fBsudo\fR -command has completed. +has exited or has been terminated by a signal. +The +\fIiolog_flush\fR +flag can be used to disable buffering, in which case I/O log data +is written to disk as soon as it is available. The output portion of an I/O log file can be viewed with the sudoreplay(@mansectsu@) utility, which can also be used to list or search the available logs. @@ -4565,7 +4861,7 @@ .nf .sp .RS 0n -pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root +pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* %opers ALL = (: ADMINGRP) /usr/sbin/ .RE diff -Nru sudo-1.8.19p1/doc/sudoers.mdoc.in sudo-1.8.20p2/doc/sudoers.mdoc.in --- sudo-1.8.19p1/doc/sudoers.mdoc.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoers.mdoc.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2017 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd November 30, 2016 +.Dd May 8, 2017 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -213,7 +213,7 @@ .Po .Li @timeout@ minutes unless overridden by the -.Em timeout +.Em timestamp_timeout option .Pc . By default, @@ -452,11 +452,21 @@ are also applied. All other environment variables are removed. .Pp -Finally, if the +Finally, the +.Em restricted_env_file +and +.Em env_file +files are applied, if present. +The variables in +.Em restricted_env_file +are applied first and are subject to the same restrictions as the +invoking user's environment, as detailed above. +The variables in .Em env_file -option is defined, any variables present -in that file will be set to their specified values as long as they -would not conflict with an existing environment variable. +are applied last and are not subject to these restrictions. +In both cases, variables present in the files will only be set to +their specified values if they would not conflict with an existing +environment variable. .Sh SUDOERS FILE FORMAT The .Em sudoers @@ -847,6 +857,11 @@ .Xr fexecve 2 system call when the directory in which the command is located is writable by the user. +See the description of the +.Em fdexec +setting for more information on how +.Nm sudo +executes commands that have an associated digest. .Pp Command digests are only supported by version 1.8.7 or higher. .Ss Defaults @@ -930,14 +945,20 @@ Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List -Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd +Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' +Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec) + SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') +Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') + +Timeout_Spec ::= 'TIMEOUT=timeout' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -1108,6 +1129,19 @@ .Sy alan may run any command as either user root or bin, optionally setting the group to operator or system. +.Ss Option_Spec +A +.Li Cmnd +may have zero or more options associated with it. +Depending on the system, options may consist of SELinux roles +and/or types, Solaris privileges sets, and command timeouts. +Once an option is set for a +.Li Cmnd , +subsequent +.Li Cmnd Ns s +in the +.Li Cmnd_Spec_List , +inherit that option unless it is overridden by another option. .Ss SELinux_Spec On systems with SELinux support, .Em sudoers @@ -1158,6 +1192,70 @@ or .Ql \- character. +.Ss Date_Spec +.Nm sudoers +rules can be specified with a start and end date via the +.Li NOTBEFORE +and +.Li NOTAFTER +settings. +The time stamp must be specified in +.Em Generalized Time +as defined by RFC 4517. +The format is effectively +.Li yyyymmddHHMMSSZ +where the minutes and seconds are optional. +The +.Ql Z +suffix indicates that the time stamp is in Coordinated Universal Time (UTC). +It is also possible to specify a timezone offset from UTC in hours +and minutes instead of a +.Ql Z . +For example, +.Ql -0500 +would correspond to Eastern Standard time in the US. +As an extension, if no +.Ql Z +or timezone offset is specified, local time will be used. +.Pp +The following are all valid time stamps: +.Bd -literal -offset 4n +20170214083000Z +2017021408Z +20160315220000-0500 +20151201235900 +.Ed +.Ss Timeout_Spec +A command may have a timeout associated with it. +If the timeout expires before the command has exited, the +command will be terminated. +The timeout may be specified in combinations of days, hours, +minutes and seconds with a single-letter case-insensitive suffix +that indicates the unit of time. +For example, a timeout of 7 days, 8 hours, 30 minutes and +10 seconds would be written as +.Li 7d8h30m10s . +If a number is specified without a unit, seconds are assumed. +Any of the days, minutes, hours or seconds may be omitted. +The order must be from largest to smallest unit and a unit +may not be specified more than once. +.Pp +The following are all +.Em valid +timeout values: +.Li 7d8h30m10s , +.Li 14d , +.Li 8h30m , +.Li 600s , +.Li 3600 . +The following are +.Em invalid +timeout values: +.Li 12m2w1d , +.Li 30s10m4h , +.Li 1d2d3h . +.Pp +This option is only supported by version 1.8.20 or higher. .Ss Tag_Spec A command may have zero or more tags associated with it. The following tag values are supported: @@ -1597,7 +1695,7 @@ .Ed .Pp .Nm sudo -will read each file in +will suspend processing of the current file and read each file in .Pa /etc/sudoers.d , skipping file names that end in .Ql ~ @@ -1617,6 +1715,10 @@ .Pa /etc/sudoers.d/10_second . Using a consistent number of leading zeroes in the file names can be used to avoid such problems. +After parsing the files in the directory, control returns to the +file that contained the +.Li #includedir +directive. .Pp Note that unlike files included via .Li #include , @@ -1922,8 +2024,10 @@ and .Ev SUDO_* variables. -Any -variables in the caller's environment that match the +Any variables in the caller's environment or in the file specified +by the +.Em restricted_env_file +option that match the .Li env_keep and .Li env_check @@ -2124,6 +2228,16 @@ This flag is .Em off by default. +.It ignore_unknown_defaults +If set, +.Nm sudo +will not produce a warning if it encounters an unknown Defaults entry +in the +.Em sudoers +file or an unknown sudoOption in LDAP. +This flag is +.Em off +by default. .It insults If set, .Nm sudo @@ -2258,10 +2372,12 @@ .Em @mail_no_user@ by default. .It match_group_by_gid -By default, when matching groups, +By default, .Nm -will first resolve all the user's group IDs to group names and then -compare those group names to any group names listed in the +will look up each group the user is a member of by group ID to +determine the group name (this is only done once). +The resulting list of the user's group names is used when matching +groups listed in the .Em sudoers file. This works well on systems where the number of groups listed in the @@ -2277,10 +2393,29 @@ may take longer than normal. On such systems it may be faster to use the .Em match_group_by_gid -flag to avoid resolving the user's group IDs to group names and -instead resolve all group names listed in the +flag to avoid resolving the user's group IDs to group names. +In this case, +.Nm +must look up any group name listed in the .Em sudoers -file, matching by group ID instead of by group name. +file and use the group ID instead of the group name when determining +whether the user is a member of the group. +.Pp +Note that if +.Em match_group_by_gid +is enabled, group database lookups performed by +.Nm +will be keyed by group name as opposed to group ID. +On systems where there are multiple sources for the group database, +it is possible to have conflicting group names or group IDs in the local +.Pa /etc/group +file and the remote group database. +On such systems, enabling or disabling +.Em match_group_by_gid +can be used to choose whether group database queries are performed +by name (enabled) or ID (disabled), which may aid in working around +group entry conflicts. +.Pp The .Em match_group_by_gid flag has no effect when @@ -2732,6 +2867,21 @@ This flag is .Em off by default. +.It user_command_timeouts +If set, the user may specify a timeout on the command line. +If the timeout expires before the command has exited, the +command will be terminated. +If a timeout is specified both in the +.Pa sudoers +file and on the command line, the smaller of the two timeouts will be used. +See the +.Li Timeout_Spec +section for a description of the timeout syntax. +This flag is +.Em off +by default. +.Pp +This setting is only supported by version 1.8.20 or higher. .It utmp_runas If set, .Nm sudo @@ -2776,6 +2926,14 @@ to start closing. The default is .Li 3 . +.It command_timeout +The maximum amount of time a command is allowed to run before +it is terminated. +See the +.Li Timeout_Spec +section for a description of the timeout syntax. +.Pp +This setting is only supported by version 1.8.20 or higher. .It maxseq The maximum sequence number that will be substituted for the .Dq Li %{seq} @@ -2808,6 +2966,27 @@ logs the failure and exits. The default is .Li @passwd_tries@ . +.It syslog_maxlen +On many systems, +.Xr syslog 3 +has a relatively small log buffer. +IETF RFC 5424 states that syslog servers must support messages of +at least 480 bytes and should support messages up to 2048 bytes. +By default, +.Nm +creates log messages up to 980 bytes which corresponds to the +historic BSD syslog implementation which used a 1024 byte buffer +to store the message, date, hostname and program name. +To prevent syslog messages from being truncated, +.Nm +will split up log messages that are larger than +.Em syslog_maxlen +bytes. +When a message is split, additional parts will include the string +.Dq Pq command continued +after the user name and before the continued command line arguments. +.Pp +This setting is only supported by version 1.8.19 or higher. .El .Pp .Sy Integers that can be used in a boolean context : @@ -2988,27 +3167,61 @@ ends in six or more .Li X Ns s . +.It iolog_flush +If set, +.Nm sudo +will flush I/O log data to disk after each write instead of buffering it. +This makes it possible to view the logs in real-time as the program +is executing but may significantly reduce the effectiveness of I/O +log compression. +This flag is +.Em off +by default. +.Pp +This setting is only supported by version 1.8.20 or higher. .It iolog_group The group name to look up when setting the group ID on new I/O log files and directories. -By default, I/O log files and directories inherit the group ID of -the parent directory. +If +.Em iolog_group +is not set, +the primary group ID of the user specified by +.Em iolog_user +is used. +If neither +.Em iolog_group +nor +.Em iolog_user +are set, I/O log files and directories are created with group ID 0. .Pp This setting is only supported by version 1.8.19 or higher. .It iolog_mode -The file permision mode to use when creating I/O log files, -mode bits other than 0666 are ignored. +The file mode to use when creating I/O log files. +Mode bits for read and write permissions for owner, group or other +are honored, everything else is ignored. +The file permissions will always include the owner read and +write bits, even if they are not present in the specified mode. When creating I/O log directories, search (execute) bits are added to to match the read and write bits specified by .Em iolog_mode . -Defaults to 0600. +Defaults to 0600 (read and write by user only). .Pp This setting is only supported by version 1.8.19 or higher. .It iolog_user -The user name to look up when setting the user ID on new I/O log -files and directories. -By default, I/O log files and directories are owned by the superuser -(user ID 0). +The user name to look up when setting the user and group IDs on new +I/O log files and directories. +If +.Em iolog_group +is set, it will be used instead of the user's primary group ID. +By default, I/O log files and directories are created with user and +group ID 0. +.Pp +This setting can be useful when the I/O logs are stored on a Network +File System (NFS) share. +Having a dedicated user own the I/O log files means that +.Nm +does not write to the log files as user ID 0, which is usually +not permitted by NFS. .Pp This setting is only supported by version 1.8.19 or higher. .It lecture_status_dir @@ -3144,60 +3357,6 @@ option is not specified on the command line. This defaults to .Li @runas_default@ . -.It syslog_badpri -Syslog priority to use when the user is not allowed to run a command or -when authentication is unsuccessful. -Defaults to -.Li @badpri@ . -.Pp -The following syslog priorities are supported: -.Sy alert , -.Sy crit , -.Sy debug , -.Sy emerg , -.Sy err , -.Sy info , -.Sy notice , -.Sy warning , -and -.Sy none . -Negating the option or setting it to a value of -.Sy none -will disable logging of unsuccessful commands. -.It syslog_goodpri -Syslog priority to use when the user is allowed to run a command and -authentication is successful. -Defaults to -.Li @goodpri@ . -.Pp -See -.Em syslog_badpri -for the list of supported syslog priorities. -Negating the option or setting it to a value of -.Sy none -will disable logging of successful commands. -.It syslog_goodpri -.It syslog_maxlen -On many systems, -.Xr syslog 3 -has a relatively small log buffer. -IETF RFC 5424 states that syslog servers must support messages of -at least 480 bytes and should support messages up to 2048 bytes. -By default, -.Nm -creates log messages up to 980 bytes which corresponds to the -historic BSD syslog implementation which used a 1024 byte buffer -to store the message, date, hostname and program name. -To prevent syslog messages from being truncated, -.Nm -will split up log messages that are larger than -.Em syslog_maxlen -bytes. -When a message is split, additional parts will include the string -.Dq Pq command continued -after the user name and before the continued command line arguments. -.Pp -This setting is only supported by version 1.8.19 or higher. .It sudoers_locale Locale to use when parsing the sudoers file, logging commands, and sending email. @@ -3239,9 +3398,12 @@ or .Dq Li export VARIABLE=value . The value may optionally be surrounded by single or double quotes. -Variables in this file are subject to other +Variables in this file are only added if the variable does not already +exist in the environment. +This file is considered to be part of the security policy, +its contents are not subject to other .Nm sudo -environment settings such as +environment restrictions such as .Em env_keep and .Em env_check . @@ -3251,6 +3413,53 @@ .Li % prefix. This is not set by default. +.It fdexec +Determines whether +.Nm sudo +will execute a command by its path or by an open file descriptor. +It has the following possible values: +.Bl -tag -width 6n +.It always +Always execute by file descriptor. +.It never +Never execute by file descriptor. +.It digest_only +Only execute by file descriptor if the command has an associated digest +in the +.Em sudoers +file. +.El +.Pp +The default value is +.Em digest_only . +This avoids a time of check versus time of use race condition when +the command is located in a directory writable by the invoking user. +.Pp +Note that +.Em fdexec +will change the first element of the argument vector for scripts +($0 in the shell) due to the way the kernel runs script interpreters. +Instead of being a normal path, it will refer to a file descriptor. +For example, +.Pa /dev/fd/4 +on Solaris and +.Pa /proc/self/fd/4 +on Linux. +A workaround is to use the +.Dv SUDO_COMMAND +environment variable instead. +.Pp +The +.Em fdexec +setting is only used when the command is matched by path name. +It has no effect if the command is matched by the built-in +.Sy ALL +alias. +.Pp +This setting is only supported by version 1.8.20 or higher. +If the operating system does not support the +.Xr fexecve 2 +system call, this setting has no effect. .It group_plugin A string containing a .Nm sudoers @@ -3374,6 +3583,40 @@ sign. Defaults to .Li @mailto@ . +.It restricted_env_file +The +.Em restricted_env_file +option specifies the fully qualified path to a file containing variables +to be set in the environment of the program being run. +Entries in this file should either be of the form +.Dq Li VARIABLE=value +or +.Dq Li export VARIABLE=value . +The value may optionally be surrounded by single or double quotes. +Variables in this file are only added if the variable does not already +exist in the environment. +Unlike +.Em env_file , +the file's contents are not trusted and are processed in a manner +similar to that of the invoking user's environment. +If +.Em env_reset +is enabled, variables in the file will only be added if they are +matched by either the +.Em env_check +or +.Em env_keep +list. +If +.Em env_reset +is disabled, variables in the file are added as long as they +are not matched by the +.Em env_delete +list. +In either case, the contents of +.Em restricted_env_file +are processed before the contents of +.Em env_file . .It secure_path Path used for every command run from .Nm sudo . @@ -3414,6 +3657,38 @@ .Sy local6 , and .Sy local7 . +.It syslog_badpri +Syslog priority to use when the user is not allowed to run a command or +when authentication is unsuccessful. +Defaults to +.Li @badpri@ . +.Pp +The following syslog priorities are supported: +.Sy alert , +.Sy crit , +.Sy debug , +.Sy emerg , +.Sy err , +.Sy info , +.Sy notice , +.Sy warning , +and +.Sy none . +Negating the option or setting it to a value of +.Sy none +will disable logging of unsuccessful commands. +.It syslog_goodpri +Syslog priority to use when the user is allowed to run a command and +authentication is successful. +Defaults to +.Li @goodpri@ . +.Pp +See +.Em syslog_badpri +for the list of supported syslog priorities. +Negating the option or setting it to a value of +.Sy none +will disable logging of successful commands. .It verifypw This option controls when a password will be required when a user runs .Nm sudo @@ -3981,10 +4256,16 @@ .Pa log are compressed in gzip format unless the .Em compress_io -option has been disabled. -Due to buffering, the I/O log data will not be complete until the +flag has been disabled. +Due to buffering, it is not normally possible to display the I/O logs in +real-time as the program is executing +The I/O log data will not be complete until the program run by .Nm sudo -command has completed. +has exited or has been terminated by a signal. +The +.Em iolog_flush +flag can be used to disable buffering, in which case I/O log data +is written to disk as soon as it is available. The output portion of an I/O log file can be viewed with the .Xr sudoreplay @mansectsu@ utility, which can also be used to list or search the available logs. @@ -4227,7 +4508,7 @@ .Xr su 1 to operator. .Bd -literal -pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root +pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* %opers ALL = (: ADMINGRP) /usr/sbin/ .Ed diff -Nru sudo-1.8.19p1/doc/sudo.man.in sudo-1.8.20p2/doc/sudo.man.in --- sudo-1.8.19p1/doc/sudo.man.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo.man.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudo.mdoc.in .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2017 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -21,7 +21,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.TH "SUDO" "8" "January 19, 2016" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "8" "February 16, 2017" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -66,6 +66,7 @@ [\fB\-p\fR\ \fIprompt\fR] [\fB\-r\fR\ \fIrole\fR] [\fB\-t\fR\ \fItype\fR] +[\fB\-T\fR\ \fItimeout\fR] [\fB\-u\fR\ \fIuser\fR] [\fIVAR\fR=\fIvalue\fR] [\fB\-i\fR\ |\ \fB\-s\fR] @@ -80,6 +81,7 @@ [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] +[\fB\-T\fR\ \fItimeout\fR] [\fB\-u\fR\ \fIuser\fR] \fIfile\ ...\fR .PD @@ -564,6 +566,15 @@ \fRALL\fR privilege on the current host to use this option. .TP 12n +\fB\-T\fR \fItimeout\fR, \fB\--command-timeout\fR=\fItimeout\fR +Used to set a timeout for the command. +If the timeout expires before the command has exited, the +command will be terminated. +The security policy may restrict the ability to set command timeouts. +The +\fIsudoers\fR +policy requires that user-specified timeouts be explicitly enabled. +.TP 12n \fB\-u\fR \fIuser\fR, \fB\--user\fR=\fIuser\fR Run the command as a user other than the default target user (usually diff -Nru sudo-1.8.19p1/doc/sudo.mdoc.in sudo-1.8.20p2/doc/sudo.mdoc.in --- sudo-1.8.19p1/doc/sudo.mdoc.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo.mdoc.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2017 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd January 19, 2016 +.Dd February 16, 2017 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -57,6 +57,7 @@ .Op Fl p Ar prompt .Op Fl r Ar role .Op Fl t Ar type +.Op Fl T Ar timeout .Op Fl u Ar user .Op Ar VAR Ns = Ns Ar value .Op Fl i | s @@ -69,6 +70,7 @@ .Op Fl g Ar group .Op Fl h Ar host .Op Fl p Ar prompt +.Op Fl T Ar timeout .Op Fl u Ar user .Ar .Sh DESCRIPTION @@ -507,6 +509,14 @@ policy only allows root or a user with the .Li ALL privilege on the current host to use this option. +.It Fl T Ar timeout , Fl -command-timeout Ns = Ns Ar timeout +Used to set a timeout for the command. +If the timeout expires before the command has exited, the +command will be terminated. +The security policy may restrict the ability to set command timeouts. +The +.Em sudoers +policy requires that user-specified timeouts be explicitly enabled. .It Fl u Ar user , Fl -user Ns = Ns Ar user Run the command as a user other than the default target user (usually diff -Nru sudo-1.8.19p1/doc/sudo_plugin.cat sudo-1.8.20p2/doc/sudo_plugin.cat --- sudo-1.8.19p1/doc/sudo_plugin.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo_plugin.cat 2017-05-10 15:38:43.000000000 +0000 @@ -94,7 +94,7 @@ settings A vector of user-supplied ssuuddoo settings in the form of - ``name=value'' strings. The vector is terminated by a NULL + "name=value" strings. The vector is terminated by a NULL pointer. These settings correspond to flags the user specified when running ssuuddoo. As such, they will only be present when the corresponding flag has been specified on the @@ -164,8 +164,8 @@ network_addrs=list A space-separated list of IP network addresses and - netmasks in the form ``addr/netmask'', e.g. - ``192.168.1.2/255.255.255.0''. The address and netmask + netmasks in the form "addr/netmask", e.g. + "192.168.1.2/255.255.255.0". The address and netmask pairs may be either IPv4 or IPv6, depending on what the operating system supports. If the address contains a colon (`:'), it is an IPv6 address, else it is IPv4. @@ -199,8 +199,8 @@ vector instead of setting it based on the runas user. progname=string - The command name that sudo was run as, typically - ``sudo'' or ``sudoedit''. + The command name that sudo was run as, typically "sudo" + or "sudoedit". prompt=string The prompt to use when requesting a password, if @@ -248,12 +248,18 @@ support _s_u_d_o_e_d_i_t. For more information, see the _c_h_e_c_k___p_o_l_i_c_y section. + timeout=string + User-specified command timeout. Not all plugins + support command timeouts and the ability for the user + to set a timeout may be restricted by policy. The + format of the timeout string is plugin-specific. + Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. user_info A vector of information about the user running the command in - the form of ``name=value'' strings. The vector is terminated + the form of "name=value" strings. The vector is terminated by a NULL pointer. When parsing _u_s_e_r___i_n_f_o, the plugin should split on the ffiirrsstt @@ -331,7 +337,7 @@ tty=string The path to the user's terminal device. If the user has no terminal device associated with the session, the - value will be empty, as in ``tty=''. + value will be empty, as in "tty=". uid=uid_t The real user ID of the user invoking ssuuddoo. @@ -345,7 +351,7 @@ user_env The user's environment in the form of a NULL-terminated - vector of ``name=value'' strings. + vector of "name=value" strings. When parsing _u_s_e_r___e_n_v, the plugin should split on the ffiirrsstt equal sign (`=') since the _n_a_m_e field will never include one @@ -405,7 +411,7 @@ EDITOR, and include it in _a_r_g_v___o_u_t (note that environment variables may include command line flags). The files to be edited should be copied from _a_r_g_v into _a_r_g_v___o_u_t, separated from the editor and its - arguments by a ``--'' element. The ``--'' will be removed by ssuuddoo + arguments by a "--" element. The "--" will be removed by ssuuddoo before the editor is executed. The plugin should also set _s_u_d_o_e_d_i_t_=_t_r_u_e in the _c_o_m_m_a_n_d___i_n_f_o list. @@ -430,7 +436,7 @@ env_add Additional environment variables specified by the user on the command line in the form of a NULL-terminated vector of - ``name=value'' strings. The plugin may reject the command if + "name=value" strings. The plugin may reject the command if one or more variables are not allowed to be set, or it may silently ignore such variables. @@ -440,7 +446,7 @@ command_info Information about the command being run in the form of - ``name=value'' strings. These values are used by ssuuddoo to set + "name=value" strings. These values are used by ssuuddoo to set the execution environment when running a command. The plugin is responsible for creating and populating the vector, which must be terminated with a NULL pointer. The following values @@ -758,7 +764,7 @@ password database, otherwise it will be NULL. The _u_s_e_r___e_n_v argument points to the environment the command will - run in, in the form of a NULL-terminated vector of ``name=value'' + run in, in the form of a NULL-terminated vector of "name=value" strings. This is the same string passed back to the front end via the Policy Plugin's _u_s_e_r___e_n_v___o_u_t parameter. If the iinniitt__sseessssiioonn() function needs to modify the user environment, it should update the @@ -945,7 +951,7 @@ settings A vector of user-supplied ssuuddoo settings in the form of - ``name=value'' strings. The vector is terminated by a NULL + "name=value" strings. The vector is terminated by a NULL pointer. These settings correspond to flags the user specified when running ssuuddoo. As such, they will only be present when the corresponding flag has been specified on the @@ -960,7 +966,7 @@ user_info A vector of information about the user running the command in - the form of ``name=value'' strings. The vector is terminated + the form of "name=value" strings. The vector is terminated by a NULL pointer. When parsing _u_s_e_r___i_n_f_o, the plugin should split on the ffiirrsstt @@ -979,7 +985,7 @@ user_env The user's environment in the form of a NULL-terminated - vector of ``name=value'' strings. + vector of "name=value" strings. When parsing _u_s_e_r___e_n_v, the plugin should split on the ffiirrsstt equal sign (`=') since the _n_a_m_e field will never include one @@ -1280,9 +1286,9 @@ The ssuuddoo front end does not have native support for running remote commands. However, starting with ssuuddoo 1.8.8, the --hh option may be used to specify a remote host that is passed to the policy plugin. A plugin - may also accept a _r_u_n_a_s___u_s_e_r in the form of ``user@hostname'' which will + may also accept a _r_u_n_a_s___u_s_e_r in the form of "user@hostname" which will work with older versions of ssuuddoo. It is anticipated that remote commands - will be supported by executing a ``helper'' program. The policy plugin + will be supported by executing a "helper" program. The policy plugin should setup the execution environment such that the ssuuddoo front end will run the helper which, in turn, will connect to the remote host and run the command. @@ -1554,6 +1560,9 @@ _i_o_l_o_g___m_o_d_e, and _i_o_l_o_g___u_s_e_r entries were added to the command_info list. + Version 1.11 (sudo 1.8.20) + The _t_i_m_e_o_u_t entry was added to the settings list. + SSEEEE AALLSSOO sudo.conf(4), sudoers(4), sudo(1m) @@ -1577,10 +1586,10 @@ the archives. DDIISSCCLLAAIIMMEERR - ssuuddoo is provided ``AS IS'' and any express or implied warranties, + ssuuddoo is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 November 17, 2016 Sudo 1.8.19 +Sudo 1.8.20 February 16, 2017 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/sudo_plugin.man.in sudo-1.8.20p2/doc/sudo_plugin.man.in --- sudo-1.8.19p1/doc/sudo_plugin.man.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo_plugin.man.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudo_plugin.mdoc.in .\" -.\" Copyright (c) 2009-2016 Todd C. Miller +.\" Copyright (c) 2009-2017 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 @@ -16,7 +16,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDO_PLUGIN" "5" "November 17, 2016" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "February 16, 2017" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -412,6 +412,12 @@ For more information, see the \fIcheck_policy\fR section. +.TP 6n +timeout=string +User-specified command timeout. +Not all plugins support command timeouts and the ability for the +user to set a timeout may be restricted by policy. +The format of the timeout string is plugin-specific. .PP Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. @@ -2781,6 +2787,13 @@ entries were added to the \fRcommand_info\fR list. +.TP 6n +Version 1.11 (sudo 1.8.20) +The +\fItimeout\fR +entry was added to the +\fRsettings\fR +list. .SH "SEE ALSO" sudo.conf(@mansectform@), sudoers(@mansectform@), diff -Nru sudo-1.8.19p1/doc/sudo_plugin.mdoc.in sudo-1.8.20p2/doc/sudo_plugin.mdoc.in --- sudo-1.8.19p1/doc/sudo_plugin.mdoc.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudo_plugin.mdoc.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2009-2016 Todd C. Miller +.\" Copyright (c) 2009-2017 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 @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd November 17, 2016 +.Dd February 16, 2017 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -371,6 +371,11 @@ For more information, see the .Em check_policy section. +.It timeout=string +User-specified command timeout. +Not all plugins support command timeouts and the ability for the +user to set a timeout may be restricted by policy. +The format of the timeout string is plugin-specific. .El .Pp Additional settings may be added in the future so the plugin should @@ -2436,6 +2441,12 @@ entries were added to the .Li command_info list. +.It Version 1.11 (sudo 1.8.20) +The +.Em timeout +entry was added to the +.Li settings +list. .El .Sh SEE ALSO .Xr sudo.conf @mansectform@ , diff -Nru sudo-1.8.19p1/doc/sudoreplay.cat sudo-1.8.20p2/doc/sudoreplay.cat --- sudo-1.8.19p1/doc/sudoreplay.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/sudoreplay.cat 2017-05-10 15:38:43.000000000 +0000 @@ -50,7 +50,7 @@ --hh, ----hheellpp Display a short help message to the standard output and exit. --ll, ----lliisstt [_s_e_a_r_c_h _e_x_p_r_e_s_s_i_o_n] - Enable ``list mode''. In this mode, ssuuddoorreeppllaayy will list + Enable "list mode". In this mode, ssuuddoorreeppllaayy will list available sessions in a format similar to the ssuuddoo log file format, sorted by file name (or sequence number). If a _s_e_a_r_c_h _e_x_p_r_e_s_s_i_o_n is specified, it will be used to restrict @@ -162,12 +162,12 @@ next Friday The first second of the Friday in the next (upcoming) week. Not - to be confused with ``this friday'' which would match the friday - of the current week. + to be confused with "this friday" which would match the friday of + the current week. last week - The current time but 7 days ago. This is equivalent to ``a week - ago''. + The current time but 7 days ago. This is equivalent to "a week + ago". a fortnight ago The current time but 14 days ago. @@ -187,12 +187,12 @@ 10:01 am, September 17, 2009. Note that relative time specifications do not always work as expected. - For example, the ``next'' qualifier is intended to be used in conjunction - with a day such as ``next Monday''. When used with units of weeks, - months, years, etc the result will be one more than expected. For - example, ``next week'' will result in a time exactly two weeks from now, - which is probably not what was intended. This will be addressed in a - future version of ssuuddoorreeppllaayy. + For example, the "next" qualifier is intended to be used in conjunction + with a day such as "next Monday". When used with units of weeks, months, + years, etc the result will be one more than expected. For example, "next + week" will result in a time exactly two weeks from now, which is probably + not what was intended. This will be addressed in a future version of + ssuuddoorreeppllaayy. DDeebbuuggggiinngg ssuuddoorreeppllaayy ssuuddoorreeppllaayy versions 1.8.4 and higher support a flexible debugging @@ -270,10 +270,10 @@ the archives. DDIISSCCLLAAIIMMEERR - ssuuddoorreeppllaayy is provided ``AS IS'' and any express or implied warranties, + ssuuddoorreeppllaayy is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 November 30, 2016 Sudo 1.8.19 +Sudo 1.8.20 November 30, 2016 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/TROUBLESHOOTING sudo-1.8.20p2/doc/TROUBLESHOOTING --- sudo-1.8.19p1/doc/TROUBLESHOOTING 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/TROUBLESHOOTING 2017-05-10 15:38:43.000000000 +0000 @@ -113,32 +113,14 @@ --with-editor and --with-env-editor configure options. Q) Sudo appears to be removing some variables from my environment, why? -A) Sudo removes the following "dangerous" environment variables - to guard against shared library spoofing, shell voodoo, and - kerberos server spoofing. - IFS - LOCALDOMAIN - RES_OPTIONS - HOSTALIASES - NLSPATH - PATH_LOCALE - TERMINFO - TERMINFO_DIRS - TERMPATH - TERMCAP - ENV - BASH_ENV - LC_ (if it contains a '/' or '%') - LANG (if it contains a '/' or '%') - LANGUAGE (if it contains a '/' or '%') - LD_* - _RLD_* - SHLIB_PATH (HP-UX only) - LIBPATH (AIX only) - KRB5_CONFIG (kerb5 only) - VAR_ACE (SecurID only) - USR_ACE (SecurID only) - DLC_ACE (SecurID only) +A) By default, sudo runs commands with new, minimal environment. + It is possible to control what environment variables are copied + from the invoking user's environment using the "env_keep" setting + in sudoers. Another, less secure, option is to disable the + "env_reset" setting to copy all variables from the invoking + user's environment that are not considered "dangerous". See the + "Command Environment" section of the sudoers manual for more + information. Q) How can I keep sudo from asking for a password? A) To specify this on a per-user (and per-command) basis, use the @@ -171,7 +153,6 @@ Q) I built sudo on a Solaris 11 (or higher) machine but the resulting binary doesn't work older Solaris versions. Why? - A) Starting with Solaris 11, asprintf(3) is included in the standard C library. To build a version of sudo on a Solaris 11 machine that will run on an older Solaris release, edit config.h and comment out @@ -258,7 +239,7 @@ /usr/local/bin/sudo: accessauths = ALLOW_ALL - innateprivs = PV_DAC_GID,PV_DAC_O,PV_DAC_R,PV_DAC_UID,PV_DAC_W,PV_DAC_X,PV_FS_CHOWN,PV_PROC_ENV,PV_PROC_PRIO,PV_PROC_RAC + innateprivs = PV_DAC_GID,PV_DAC_R,PV_DAC_UID,PV_DAC_X,PV_FS_CHOWN,PV_PROC_PRIO,PV_NET_PORT,PV_NET_CNTL,PV_SU_UID secflags = FSF_EPS Q) Sudo configures and builds without error but when I run it I get diff -Nru sudo-1.8.19p1/doc/visudo.cat sudo-1.8.20p2/doc/visudo.cat --- sudo-1.8.19p1/doc/visudo.cat 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/visudo.cat 2017-05-10 15:38:43.000000000 +0000 @@ -26,8 +26,8 @@ vviissuuddoo parses the _s_u_d_o_e_r_s file after the edit and will not save the changes if there is a syntax error. Upon finding an error, vviissuuddoo will print a message stating the line number(s) where the error occurred and - the user will receive the ``What now?'' prompt. At this point the user - may enter `e' to re-edit the _s_u_d_o_e_r_s file, `x' to exit without saving the + the user will receive the "What now?" prompt. At this point the user may + enter `e' to re-edit the _s_u_d_o_e_r_s file, `x' to exit without saving the changes, or `Q' to quit and save changes. The `Q' option should be used with extreme care because if vviissuuddoo believes there to be a parse error, so will ssuuddoo and no one will be able to run ssuuddoo again until the error is @@ -50,7 +50,7 @@ Specify an alternate _s_u_d_o_e_r_s file location. With this option, vviissuuddoo will edit (or check) the _s_u_d_o_e_r_s file of your choice, instead of the default, _/_e_t_c_/_s_u_d_o_e_r_s. The lock file - used is the specified _s_u_d_o_e_r_s file with ``.tmp'' appended to + used is the specified _s_u_d_o_e_r_s file with ".tmp" appended to it. In _c_h_e_c_k_-_o_n_l_y mode only, the argument to --ff may be `-', indicating that _s_u_d_o_e_r_s will be read from the standard input. @@ -63,11 +63,11 @@ --ss, ----ssttrriicctt Enable _s_t_r_i_c_t checking of the _s_u_d_o_e_r_s file. If an alias is - used before it is defined, vviissuuddoo will consider this a parse - error. Note that it is not possible to differentiate between - an alias and a host name or user name that consists solely of - uppercase letters, digits, and the underscore (`_') - character. + referenced but not actually defined or if there is a cycle in + an alias, vviissuuddoo will consider this a parse error. Note that + it is not possible to differentiate between an alias and a + host name or user name that consists solely of uppercase + letters, digits, and the underscore (`_') character. --VV, ----vveerrssiioonn Print the vviissuuddoo and _s_u_d_o_e_r_s grammar versions and exit. @@ -147,7 +147,7 @@ you do not exist in the passwd database Your user ID does not appear in the system passwd database. - {User,Runas,Host,Cmnd}_Alias referenced but not defined + Warning: {User,Runas,Host,Cmnd}_Alias referenced but not defined Either you are trying to use an undeclared {User,Runas,Host,Cmnd}_Alias or you have a user or host name listed that consists solely of uppercase letters, digits, and the @@ -157,13 +157,13 @@ undefined alias was used. In --ss (strict) mode these are errors, not warnings. - unused {User,Runas,Host,Cmnd}_Alias + Warning: unused {User,Runas,Host,Cmnd}_Alias The specified {User,Runas,Host,Cmnd}_Alias was defined but never used. The message is prefixed with the path name of the _s_u_d_o_e_r_s file and the line number where the unused alias was defined. You may wish to comment out or remove the unused alias. - cycle in {User,Runas,Host,Cmnd}_Alias + 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. The message is prefixed with the path name of the _s_u_d_o_e_r_s file and the @@ -172,7 +172,7 @@ when parsing the _s_u_d_o_e_r_s file. unknown defaults entry "name" - The _s_u_d_o_e_r_s file contains a Defaults variable not recognized by + The _s_u_d_o_e_r_s file contains a Defaults setting not recognized by vviissuuddoo. /etc/sudoers: input and output files must be different @@ -206,10 +206,10 @@ the archives. DDIISSCCLLAAIIMMEERR - vviissuuddoo is provided ``AS IS'' and any express or implied warranties, + vviissuuddoo is provided "AS IS" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.19 November 12, 2016 Sudo 1.8.19 +Sudo 1.8.20 February 22, 2017 Sudo 1.8.20 diff -Nru sudo-1.8.19p1/doc/visudo.man.in sudo-1.8.20p2/doc/visudo.man.in --- sudo-1.8.19p1/doc/visudo.man.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/visudo.man.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM visudo.mdoc.in .\" -.\" Copyright (c) 1996,1998-2005, 2007-2015 +.\" Copyright (c) 1996,1998-2005, 2007-2017 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -21,7 +21,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.TH "VISUDO" "8" "November 12, 2016" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "VISUDO" "8" "February 22, 2017" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -189,7 +189,8 @@ checking of the \fIsudoers\fR file. -If an alias is used before it is defined, +If an alias is referenced but not actually defined +or if there is a cycle in an alias, \fBvisudo\fR will consider this a parse error. Note that it is not possible to differentiate between an @@ -343,7 +344,7 @@ \fRyou do not exist in the passwd database\fR Your user ID does not appear in the system passwd database. .TP 6n -\fR{User,Runas,Host,Cmnd}_Alias referenced but not defined\fR +\fRWarning: {User,Runas,Host,Cmnd}_Alias referenced but not defined\fR Either you are trying to use an undeclared {User,Runas,Host,Cmnd}_Alias or you have a user or host name listed that consists solely of uppercase letters, digits, and the underscore @@ -360,7 +361,7 @@ \fB\-s\fR (strict) mode these are errors, not warnings. .TP 6n -\fRunused {User,Runas,Host,Cmnd}_Alias\fR +\fRWarning: unused {User,Runas,Host,Cmnd}_Alias\fR The specified {User,Runas,Host,Cmnd}_Alias was defined but never used. The message is prefixed with the path name of the @@ -368,7 +369,7 @@ file and the line number where the unused alias was defined. You may wish to comment out or remove the unused alias. .TP 6n -\fRcycle in {User,Runas,Host,Cmnd}_Alias\fR +\fRWarning: cycle in {User,Runas,Host,Cmnd}_Alias\fR The specified {User,Runas,Host,Cmnd}_Alias includes a reference to itself, either directly or through an alias it includes. The message is prefixed with the path name of the @@ -390,7 +391,7 @@ \fIsudoers\fR file contains a \fRDefaults\fR -variable not recognized by +setting not recognized by \fBvisudo\fR. .TP 6n \fR@sysconfdir@/sudoers: input and output files must be different\fR diff -Nru sudo-1.8.19p1/doc/visudo.mdoc.in sudo-1.8.20p2/doc/visudo.mdoc.in --- sudo-1.8.19p1/doc/visudo.mdoc.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/doc/visudo.mdoc.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1996,1998-2005, 2007-2015 +.\" Copyright (c) 1996,1998-2005, 2007-2017 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd November 12, 2016 +.Dd February 22, 2017 .Dt VISUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -182,7 +182,8 @@ checking of the .Em sudoers file. -If an alias is used before it is defined, +If an alias is referenced but not actually defined +or if there is a cycle in an alias, .Nm will consider this a parse error. Note that it is not possible to differentiate between an @@ -326,7 +327,7 @@ as root. .It Li you do not exist in the passwd database Your user ID does not appear in the system passwd database. -.It Li {User,Runas,Host,Cmnd}_Alias referenced but not defined +.It Li Warning: {User,Runas,Host,Cmnd}_Alias referenced but not defined Either you are trying to use an undeclared {User,Runas,Host,Cmnd}_Alias or you have a user or host name listed that consists solely of uppercase letters, digits, and the underscore @@ -343,14 +344,14 @@ In .Fl s (strict) mode these are errors, not warnings. -.It Li unused {User,Runas,Host,Cmnd}_Alias +.It Li Warning: unused {User,Runas,Host,Cmnd}_Alias The specified {User,Runas,Host,Cmnd}_Alias was defined but never used. The message is prefixed with the path name of the .Em sudoers file and the line number where the unused alias was defined. You may wish to comment out or remove the unused alias. -.It Li cycle in {User,Runas,Host,Cmnd}_Alias +.It Li 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. The message is prefixed with the path name of the @@ -371,7 +372,7 @@ .Em sudoers file contains a .Li Defaults -variable not recognized by +setting not recognized by .Nm . .It Li @sysconfdir@/sudoers: input and output files must be different The diff -Nru sudo-1.8.19p1/examples/sudoers sudo-1.8.20p2/examples/sudoers --- sudo-1.8.19p1/examples/sudoers 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/examples/sudoers 2017-05-10 15:38:43.000000000 +0000 @@ -88,7 +88,7 @@ joe ALL = /usr/bin/su operator # pete may change passwords for anyone but root on the hp snakes -pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root +pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root* # bob may run anything on the sparc and sgi machines as any user # listed in the Runas_Alias "OP" (ie: root and operator) diff -Nru sudo-1.8.19p1/include/sudo_compat.h sudo-1.8.20p2/include/sudo_compat.h --- sudo-1.8.19p1/include/sudo_compat.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/include/sudo_compat.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2008, 2009-2016 + * Copyright (c) 1996, 1998-2005, 2008, 2009-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -202,6 +202,11 @@ # endif #endif +/* For pipe2() emulation. */ +#if !defined(HAVE_PIPE2) && defined(O_NONBLOCK) && !defined(O_CLOEXEC) +# define O_CLOEXEC 0x80000000 +#endif + /* * BSD defines these in but we don't include that anymore. */ @@ -221,6 +226,13 @@ #define ISSET(t, f) ((t) & (f)) /* + * Some systems define this in but we don't include that anymore. + */ +#ifndef howmany +# define howmany(x, y) (((x) + ((y) - 1)) / (y)) +#endif + +/* * Simple isblank() macro and function for systems without it. */ #ifndef HAVE_ISBLANK @@ -266,7 +278,7 @@ #endif #if !defined(HAVE_KILLPG) && !defined(killpg) -# define killpg(s) kill(-(s)) +# define killpg(p, s) kill(-(p), (s)) #endif /* @@ -468,6 +480,11 @@ # undef mkstemps # define mkstemps(_a, _b) sudo_mkstemps((_a), (_b)) #endif /* !HAVE_MKDTEMP || !HAVE_MKSTEMPS */ +#ifndef HAVE_NANOSLEEP +__dso_public int sudo_nanosleep(const struct timespec *timeout, struct timespec *remainder); +#undef nanosleep +# define nanosleep(_a, _b) sudo_nanosleep((_a), (_b)) +#endif #ifndef HAVE_PW_DUP __dso_public struct passwd *sudo_pw_dup(const struct passwd *pw); # undef pw_dup @@ -508,5 +525,10 @@ # undef vsyslog # define vsyslog(_a, _b, _c) sudo_vsyslog((_a), (_b), (_c)) #endif /* HAVE_VSYSLOG */ +#ifndef HAVE_PIPE2 +__dso_public int sudo_pipe2(int fildes[2], int flags); +# undef pipe2 +# define pipe2(_a, _b) sudo_pipe2((_a), (_b)) +#endif /* HAVE_PIPE2 */ #endif /* SUDO_COMPAT_H */ diff -Nru sudo-1.8.19p1/include/sudo_debug.h sudo-1.8.20p2/include/sudo_debug.h --- sudo-1.8.19p1/include/sudo_debug.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/include/sudo_debug.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 Todd C. Miller + * Copyright (c) 2011-2017 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 @@ -156,6 +156,14 @@ return sudo_debug_ret; \ } while (0) +#define debug_return_time_t(ret) \ + do { \ + time_t sudo_debug_ret = (ret); \ + sudo_debug_exit_time_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\ + sudo_debug_ret); \ + return sudo_debug_ret; \ + } while (0) + #define debug_return_long(ret) \ do { \ long sudo_debug_ret = (ret); \ @@ -247,6 +255,7 @@ __dso_public void sudo_debug_exit_ssize_t_v1(const char *func, const char *file, int line, int subsys, ssize_t ret); __dso_public void sudo_debug_exit_str_v1(const char *func, const char *file, int line, int subsys, const char *ret); __dso_public void sudo_debug_exit_str_masked_v1(const char *func, const char *file, int line, int subsys, const char *ret); +__dso_public void sudo_debug_exit_time_t_v1(const char *func, const char *file, int line, int subsys, time_t ret); __dso_public pid_t sudo_debug_fork_v1(void); __dso_public int sudo_debug_get_active_instance_v1(void); __dso_public int sudo_debug_get_fds_v1(unsigned char **fds); @@ -272,6 +281,7 @@ #define sudo_debug_exit_ssize_t(_a, _b, _c, _d, _e) sudo_debug_exit_ssize_t_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_exit_str(_a, _b, _c, _d, _e) sudo_debug_exit_str_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_exit_str_masked(_a, _b, _c, _d, _e) sudo_debug_exit_str_masked_v1((_a), (_b), (_c), (_d), (_e)) +#define sudo_debug_exit_time_t(_a, _b, _c, _d, _e) sudo_debug_exit_time_t_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_fork() sudo_debug_fork_v1() #define sudo_debug_get_active_instance() sudo_debug_get_active_instance_v1() #define sudo_debug_get_fds(_a) sudo_debug_get_fds_v1((_a)) diff -Nru sudo-1.8.19p1/include/sudo_plugin.h sudo-1.8.20p2/include/sudo_plugin.h --- sudo-1.8.19p1/include/sudo_plugin.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/include/sudo_plugin.h 2017-05-10 15:38:43.000000000 +0000 @@ -19,7 +19,7 @@ /* API version major/minor */ #define SUDO_API_VERSION_MAJOR 1 -#define SUDO_API_VERSION_MINOR 10 +#define SUDO_API_VERSION_MINOR 11 #define SUDO_API_MKVERSION(x, y) (((x) << 16) | (y)) #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR) diff -Nru sudo-1.8.19p1/INSTALL sudo-1.8.20p2/INSTALL --- sudo-1.8.19p1/INSTALL 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/INSTALL 2017-05-10 15:38:43.000000000 +0000 @@ -173,6 +173,11 @@ https://github.com/google/sanitizers/wiki/AddressSanitizer The following compiler flag is used: -fsanitize=address,undefined + This option should only be used for testing and not in a + production environment. Due to AddressSanitizer's unchecked + use of environment variables, it is trivial to exploit a + setuid root executable such as sudo. + --enable-pie Build sudo and related programs as as a position independent executables (PIE). This improves the effectiveness of address @@ -327,7 +332,7 @@ another program (think shell escapes). Please see the "PREVENTING SHELL ESCAPES" section in the sudoers man page for details. If specified, PATH should be a fully qualified - path name, e.g. /usr/local/libexec/sudo_noexec.so. If PATH + path name, e.g. /usr/local/libexec/sudo/sudo_noexec.so. If PATH is "no", noexec support will not be compiled in. The default is to compile noexec support if libtool supports building shared objects on your OS. @@ -515,6 +520,18 @@ gss_krb5_ccache_name() provides a better API to do this it is not supported by all Kerberos V and SASL combinations. + --enable-gcrypt[=DIR] + Use GNU crypt's SHA-2 message digest functions instead of the + ones bundled with sudo (or in the system's C library). + If specified, DIR should contain include and lib directories + with gcrypt.h and libgcrypt respectively. + + --enable-openssl[=DIR] + Use OpenSSL's SHA-2 message digest functions instead of the + ones bundled with sudo (or in the system's C library). + If specified, DIR should contain include and lib directories + with openssl/sha.h and libcrypto respectively. + Development options: --enable-env-debug Enable debugging of the environment setting functions. This diff -Nru sudo-1.8.19p1/lib/util/glob.c sudo-1.8.20p2/lib/util/glob.c --- sudo-1.8.19p1/lib/util/glob.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/util/glob.c 2017-05-10 15:38:43.000000000 +0000 @@ -135,9 +135,6 @@ #define GLOB_LIMIT_STAT 2048 #define GLOB_LIMIT_READDIR 16384 -/* Limit of recursion during matching attempts. */ -#define GLOB_LIMIT_RECUR 64 - struct glob_lim { size_t glim_malloc; size_t glim_stat; @@ -164,7 +161,7 @@ static int globexp1(const Char *, glob_t *, struct glob_lim *); static int globexp2(const Char *, const Char *, glob_t *, struct glob_lim *); -static int match(Char *, Char *, Char *, int); +static int match(Char *, Char *, Char *); #ifdef DEBUG static void qprintf(const char *, Char *); #endif @@ -699,7 +696,7 @@ break; } - if (!match(pathend, pattern, restpattern, GLOB_LIMIT_RECUR)) { + if (!match(pathend, pattern, restpattern)) { *pathend = EOS; continue; } @@ -790,17 +787,24 @@ /* * pattern matching function for filenames. Each occurrence of the * - * pattern causes a recursion level. + * pattern causes an iteration. + * + * Note, this function differs from the original as per the discussion + * here: https://research.swtch.com/glob + * + * Basically we removed the recursion and made it use the algorithm + * from Russ Cox to not go quadratic on cases like a file called + * ("a" x 100) . "x" matched against a pattern like "a*a*a*a*a*a*a*y". */ static int -match(Char *name, Char *pat, Char *patend, int recur) +match(Char *name, Char *pat, Char *patend) { int ok, negate_range; Char c, k; + Char *nextp = NULL; + Char *nextn = NULL; - if (recur-- == 0) - return GLOB_NOSPACE; - +loop: while (pat < patend) { c = *pat++; switch (c & M_MASK) { @@ -809,19 +813,19 @@ pat++; /* eat consecutive '*' */ if (pat == patend) return 1; - do { - if (match(name, pat, patend, recur)) - return 1; - } while (*name++ != EOS); - return 0; + if (*name == EOS) + return 0; + nextn = name + 1; + nextp = pat - 1; + break; case M_ONE: if (*name++ == EOS) - return 0; + goto fail; break; case M_SET: ok = 0; if ((k = *name++) == EOS) - return 0; + goto fail; if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS) ++pat; while (((c = *pat++) & M_MASK) != M_END) { @@ -840,15 +844,23 @@ ok = 1; } if (ok == negate_range) - return 0; + goto fail; break; default: if (*name++ != c) - return 0; + goto fail; break; } } - return *name == EOS; + if (*name == EOS) + return 1; +fail: + if (nextn) { + pat = nextp; + name = nextn; + goto loop; + } + return 0; } /* Free allocated data belonging to a glob_t structure. */ diff -Nru sudo-1.8.19p1/lib/util/Makefile.in sudo-1.8.20p2/lib/util/Makefile.in --- sudo-1.8.19p1/lib/util/Makefile.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/lib/util/Makefile.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2015 Todd C. Miller +# Copyright (c) 2011-2017 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 @@ -134,6 +134,8 @@ PARSE_GIDS_TEST_OBJS = parse_gids_test.lo +VSYSLOG_TEST_OBJS = vsyslog_test.lo vsyslog.lo + all: libsudo_util.la Makefile: $(srcdir)/Makefile.in @@ -210,6 +212,9 @@ strsplit_test: $(STRSPLIT_TEST_OBJS) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(STRSPLIT_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) +vsyslog_test: $(VSYSLOG_TEST_OBJS) libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(VSYSLOG_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + pre-install: install: install-dirs @@ -273,6 +278,9 @@ rm -f ./progname_test2; ln -s ./progname_test ./progname_test2; \ ./progname_test2 || rval=`expr $$rval + $$?`; \ rm -f ./progname_test2; \ + if test -f vsyslog_test; then \ + ./vsyslog_test || rval=`expr $$rval + $$?`; \ + fi; \ build_dir=`pwd`; \ cd $(srcdir); \ for dir in sudo_conf sudo_parseln; do \ @@ -463,6 +471,10 @@ $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/mktemp/mktemp_test.c +nanosleep.lo: $(srcdir)/nanosleep.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/nanosleep.c parse_gids_test.lo: $(srcdir)/regress/parse_gids/parse_gids_test.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ @@ -477,6 +489,8 @@ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/sudo_parseln/parseln_test.c +pipe2.lo: $(srcdir)/pipe2.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/pipe2.c progname.lo: $(srcdir)/progname.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h @@ -583,3 +597,8 @@ $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/utimens.c vsyslog.lo: $(srcdir)/vsyslog.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/vsyslog.c +vsyslog_test.lo: $(srcdir)/regress/vsyslog/vsyslog_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/vsyslog/vsyslog_test.c diff -Nru sudo-1.8.19p1/lib/util/nanosleep.c sudo-1.8.20p2/lib/util/nanosleep.c --- sudo-1.8.19p1/lib/util/nanosleep.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/lib/util/nanosleep.c 2017-01-14 04:30:22.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2009-2011, 2013, 2017 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 + +#ifndef HAVE_NANOSLEEP + +#include +#include +#ifdef HAVE_SYS_SELECT_H +#include +#endif /* HAVE_SYS_SELECT_H */ +#if TIME_WITH_SYS_TIME +# include +#endif +#include + +#include "sudo_compat.h" +#include "sudo_util.h" + +int +sudo_nanosleep(const struct timespec *ts, struct timespec *rts) +{ + struct timeval timeout, endtime, now; + int rval; + + if (ts->tv_sec == 0 && ts->tv_nsec < 1000) { + timeout.tv_sec = 0; + timeout.tv_usec = 1; + } else { + TIMESPEC_TO_TIMEVAL(&timeout, ts); + } + if (rts != NULL) { + if (gettimeofday(&endtime, NULL) == -1) + return -1; + sudo_timevaladd(&endtime, &timeout, &endtime); + } + rval = select(0, NULL, NULL, NULL, &timeout); + if (rts != NULL && rval == -1 && errno == EINTR) { + if (gettimeofday(&now, NULL) == -1) + return -1; + sudo_timevalsub(&endtime, &now, &endtime); + TIMEVAL_TO_TIMESPEC(&endtime, rts); + } + return rval; +} +#endif /* HAVE_NANOSLEEP */ diff -Nru sudo-1.8.19p1/lib/util/pipe2.c sudo-1.8.20p2/lib/util/pipe2.c --- sudo-1.8.19p1/lib/util/pipe2.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/lib/util/pipe2.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2017 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 + +#ifndef HAVE_PIPE2 + +#include + +#include +#include + +#include "sudo_compat.h" + +int +sudo_pipe2(int fildes[2], int flags) +{ + if (pipe(fildes) != 0) + return -1; + + if (ISSET(flags, O_NONBLOCK)) { + int flags = fcntl(fildes[0], F_GETFL, 0); + if (flags == -1) + goto bad; + if (fcntl(fildes[0], F_SETFL, flags | O_NONBLOCK) == -1) + goto bad; + flags = fcntl(fildes[1], F_GETFL, 0); + if (flags == -1) + goto bad; + if (fcntl(fildes[1], F_SETFL, flags | O_NONBLOCK) == -1) + goto bad; + } + if (ISSET(flags, O_CLOEXEC)) { + if (fcntl(fildes[0], F_SETFD, FD_CLOEXEC) == -1) + goto bad; + if (fcntl(fildes[1], F_SETFD, FD_CLOEXEC) == -1) + goto bad; + } + return 0; +bad: + close(fildes[0]); + close(fildes[1]); + return -1; +} + +#endif /* HAVE_PIPE2 */ diff -Nru sudo-1.8.19p1/lib/util/regress/vsyslog/vsyslog_test.c sudo-1.8.20p2/lib/util/regress/vsyslog/vsyslog_test.c --- sudo-1.8.19p1/lib/util/regress/vsyslog/vsyslog_test.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/lib/util/regress/vsyslog/vsyslog_test.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2017 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 +#include +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif +#include + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_util.h" + +__dso_public int main(int argc, char *argv[]); + +/* + * Test that sudo_vsyslog() works as expected. + */ +static char *expected_result; +static int errors; +static int ntests; + +/* + * Dummy version of syslog to verify the message + */ +void +syslog(int priority, const char *fmt, ...) +{ + va_list ap; + const char *msg; + + if (strcmp(fmt, "%s") != 0) + sudo_fatalx_nodebug("Expected syslog format \"%%s\", got \"%s\"", fmt); + + va_start(ap, fmt); + msg = va_arg(ap, char *); + if (strcmp(msg, expected_result) != 0) { + sudo_warnx_nodebug("Expected \"%s\", got \"%s\"", expected_result, msg); + errors++; + } else { + ntests++; + } + va_end(ap); +} + +static void +test_vsyslog(int priority, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + sudo_vsyslog(priority, fmt, ap); + va_end(ap); +} + +int +main(int argc, char *argv[]) +{ + char buf1[1024 * 16], buf2[1024 * 16]; + initprogname(argc > 0 ? argv[0] : "vsyslog_test"); + + /* Test small buffer. */ + expected_result = "sudo: millert : TTY=ttypa ; PWD=/etc/mail ; USER=root ; TSID=000AB0 ; COMMAND=/usr/sbin/newaliases"; + test_vsyslog(0, + "%s: %s : TTY=%s ; PWD=%s ; USER=%s ; TSID=%s ; COMMAND=%s", + "sudo", "millert", "ttypa", "/etc/mail", "root", "000AB0", + "/usr/sbin/newaliases"); + + /* Test small buffer w/ errno. */ + snprintf(buf1, sizeof(buf1), + "unable to open %s: %s", "/var/log/sudo-io/seq", strerror(ENOENT)); + expected_result = buf1; + errno = ENOENT; + test_vsyslog(0, "unable to open %s: %m", "/var/log/sudo-io/seq"); + + /* Test large buffer > 8192 bytes. */ + memset(buf1, 'a', 8192); + buf1[8192] = '\0'; + expected_result = buf1; + test_vsyslog(0, "%s", buf1); + + /* Test large buffer w/ errno > 8192 bytes. */ + memset(buf1, 'b', 8184); + buf1[8184] = '\0'; + snprintf(buf2, sizeof(buf2), "%s: %s", buf1, strerror(EINVAL)); + expected_result = buf2; + errno = EINVAL; + test_vsyslog(0, "%s: %m", buf1); + + /* Test large format string > 8192 bytes, expect truncation to 2048. */ + memset(buf1, 'b', 8184); + buf1[8184] = '\0'; + snprintf(buf2, sizeof(buf2), "%.*s", 2047, buf1); + expected_result = buf2; + test_vsyslog(0, buf1); + + if (ntests != 0) { + printf("%s: %d tests run, %d errors, %d%% success rate\n", + getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); + } else { + printf("%s: error, no tests run!\n", getprogname()); + errors = 1; + } + exit(errors); +} diff -Nru sudo-1.8.19p1/lib/util/strtoid.c sudo-1.8.20p2/lib/util/strtoid.c --- sudo-1.8.19p1/lib/util/strtoid.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/lib/util/strtoid.c 2017-05-10 15:38:43.000000000 +0000 @@ -80,7 +80,7 @@ } if (errno == ERANGE) { if (errstr != NULL) { - if (llval == LLONG_MAX)) { + if (llval == LLONG_MAX) *errstr = N_("value too large"); else *errstr = N_("value too small"); diff -Nru sudo-1.8.19p1/lib/util/sudo_debug.c sudo-1.8.20p2/lib/util/sudo_debug.c --- sudo-1.8.19p1/lib/util/sudo_debug.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/lib/util/sudo_debug.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 Todd C. Miller + * Copyright (c) 2011-2017 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 @@ -482,6 +482,19 @@ } void +sudo_debug_exit_time_t_v1(const char *func, const char *file, int line, + int subsys, time_t ret) +{ +#if SIZEOF_TIME_T == 8 + sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, + "<- %s @ %s:%d := %lld", func, file, line, (long long)ret); +#else + sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, + "<- %s @ %s:%d := %d", func, file, line, (int)ret); +#endif +} + +void sudo_debug_exit_bool_v1(const char *func, const char *file, int line, int subsys, bool ret) { diff -Nru sudo-1.8.19p1/lib/util/ttysize.c sudo-1.8.20p2/lib/util/ttysize.c --- sudo-1.8.19p1/lib/util/ttysize.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/util/ttysize.c 2017-05-10 15:38:43.000000000 +0000 @@ -30,14 +30,6 @@ #include "sudo_debug.h" #include "sudo_util.h" -/* Compatibility with older tty systems. */ -#if !defined(TIOCGWINSZ) && defined(TIOCGSIZE) -# define TIOCGWINSZ TIOCGSIZE -# define winsize ttysize -# define ws_col ts_cols -# define ws_row ts_lines -#endif - #ifdef TIOCGWINSZ static int get_ttysize_ioctl(int *rowp, int *colp) diff -Nru sudo-1.8.19p1/lib/util/util.exp.in sudo-1.8.20p2/lib/util/util.exp.in --- sudo-1.8.19p1/lib/util/util.exp.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/lib/util/util.exp.in 2017-05-10 15:38:43.000000000 +0000 @@ -25,6 +25,7 @@ sudo_debug_exit_ssize_t_v1 sudo_debug_exit_str_v1 sudo_debug_exit_str_masked_v1 +sudo_debug_exit_time_t_v1 sudo_debug_fork_v1 sudo_debug_get_active_instance_v1 sudo_debug_get_fds_v1 diff -Nru sudo-1.8.19p1/lib/util/vsyslog.c sudo-1.8.20p2/lib/util/vsyslog.c --- sudo-1.8.19p1/lib/util/vsyslog.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/lib/util/vsyslog.c 2017-01-14 04:30:22.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Todd C. Miller + * Copyright (c) 2016-2017 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 @@ -35,7 +35,7 @@ sudo_vsyslog(int pri, const char *fmt, va_list ap) { int saved_errno = errno; - char *cp, *ep, msgbuf[8192], new_fmt[1024]; + char *cp, *ep, msgbuf[8192], new_fmt[2048]; va_list ap2; size_t len; @@ -47,7 +47,6 @@ if (len >= (size_t)(ep - cp)) len = (size_t)(ep - cp) - 1; cp += len; - break; } else { if (fmt[0] == '%' && fmt[1] == '%') { fmt++; @@ -62,7 +61,7 @@ /* Format message and log it, using a static buffer if possible. */ va_copy(ap2, ap); - len = (size_t)snprintf(msgbuf, sizeof(msgbuf), new_fmt, ap2); + len = (size_t)vsnprintf(msgbuf, sizeof(msgbuf), new_fmt, ap2); va_end(ap2); if (len < sizeof(msgbuf)) { syslog(pri, "%s", msgbuf); diff -Nru sudo-1.8.19p1/lib/zlib/adler32.c sudo-1.8.20p2/lib/zlib/adler32.c --- sudo-1.8.19p1/lib/zlib/adler32.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/adler32.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* adler32.c -- compute the Adler-32 checksum of a data stream - * Copyright (C) 1995-2011 Mark Adler + * Copyright (C) 1995-2011, 2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -7,11 +7,9 @@ #include "zutil.h" -#define local static - local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); -#define BASE 65521 /* largest prime smaller than 65536 */ +#define BASE 65521U /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ @@ -62,10 +60,10 @@ #endif /* ========================================================================= */ -uLong ZEXPORT adler32(adler, buf, len) +uLong ZEXPORT adler32_z(adler, buf, len) uLong adler; const Bytef *buf; - uInt len; + z_size_t len; { unsigned long sum2; unsigned n; @@ -133,6 +131,15 @@ } /* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + return adler32_z(adler, buf, len); +} + +/* ========================================================================= */ local uLong adler32_combine_(adler1, adler2, len2) uLong adler1; uLong adler2; @@ -156,7 +163,7 @@ sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; if (sum1 >= BASE) sum1 -= BASE; if (sum1 >= BASE) sum1 -= BASE; - if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1); + if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1); if (sum2 >= BASE) sum2 -= BASE; return sum1 | (sum2 << 16); } diff -Nru sudo-1.8.19p1/lib/zlib/compress.c sudo-1.8.20p2/lib/zlib/compress.c --- sudo-1.8.19p1/lib/zlib/compress.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/compress.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* compress.c -- compress a memory buffer - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -28,16 +28,11 @@ { z_stream stream; int err; + const uInt max = (uInt)-1; + uLong left; - stream.next_in = (z_const Bytef *)source; - stream.avail_in = (uInt)sourceLen; -#ifdef MAXSEG_64K - /* Check for source > 64K on 16-bit machine: */ - if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; -#endif - stream.next_out = dest; - stream.avail_out = (uInt)*destLen; - if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + left = *destLen; + *destLen = 0; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; @@ -46,15 +41,26 @@ err = deflateInit(&stream, level); if (err != Z_OK) return err; - err = deflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - deflateEnd(&stream); - return err == Z_OK ? Z_BUF_ERROR : err; - } - *destLen = stream.total_out; + stream.next_out = dest; + stream.avail_out = 0; + stream.next_in = (z_const Bytef *)source; + stream.avail_in = 0; + + do { + if (stream.avail_out == 0) { + stream.avail_out = left > (uLong)max ? max : (uInt)left; + left -= stream.avail_out; + } + if (stream.avail_in == 0) { + stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen; + sourceLen -= stream.avail_in; + } + err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH); + } while (err == Z_OK); - err = deflateEnd(&stream); - return err; + *destLen = stream.total_out; + deflateEnd(&stream); + return err == Z_STREAM_END ? Z_OK : err; } /* =========================================================================== diff -Nru sudo-1.8.19p1/lib/zlib/crc32.c sudo-1.8.20p2/lib/zlib/crc32.c --- sudo-1.8.19p1/lib/zlib/crc32.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/crc32.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler + * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * Thanks to Rodney Brown for his contribution of faster @@ -30,17 +30,15 @@ #include "zutil.h" /* for STDC and FAR definitions */ -#define local static - /* Definitions for doing the crc four data bytes at a time. */ #if !defined(NOBYFOUR) && defined(Z_U4) # define BYFOUR #endif #ifdef BYFOUR local unsigned long crc32_little OF((unsigned long, - const unsigned char FAR *, unsigned)); + const unsigned char FAR *, z_size_t)); local unsigned long crc32_big OF((unsigned long, - const unsigned char FAR *, unsigned)); + const unsigned char FAR *, z_size_t)); # define TBLS 8 #else # define TBLS 1 @@ -201,10 +199,10 @@ #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 /* ========================================================================= */ -unsigned long ZEXPORT crc32(crc, buf, len) +unsigned long ZEXPORT crc32_z(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - uInt len; + z_size_t len; { if (buf == Z_NULL) return 0UL; @@ -235,8 +233,29 @@ return crc ^ 0xffffffffUL; } +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + uInt len; +{ + return crc32_z(crc, buf, len); +} + #ifdef BYFOUR +/* + This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit + integer pointer type. This violates the strict aliasing rule, where a + compiler can assume, for optimization purposes, that two pointers to + fundamentally different types won't ever point to the same memory. This can + manifest as a problem only if one of the pointers is written to. This code + only reads from those pointers. So long as this code remains isolated in + this compilation unit, there won't be a problem. For this reason, this code + should not be copied and pasted into a compilation unit in which other code + writes to the buffer that is passed to these routines. + */ + /* ========================================================================= */ #define DOLIT4 c ^= *buf4++; \ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ @@ -247,7 +266,7 @@ local unsigned long crc32_little(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - unsigned len; + z_size_t len; { register z_crc_t c; register const z_crc_t FAR *buf4; @@ -278,7 +297,7 @@ } /* ========================================================================= */ -#define DOBIG4 c ^= *++buf4; \ +#define DOBIG4 c ^= *buf4++; \ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 @@ -287,7 +306,7 @@ local unsigned long crc32_big(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - unsigned len; + z_size_t len; { register z_crc_t c; register const z_crc_t FAR *buf4; @@ -300,7 +319,6 @@ } buf4 = (const z_crc_t FAR *)(const void FAR *)buf; - buf4--; while (len >= 32) { DOBIG32; len -= 32; @@ -309,7 +327,6 @@ DOBIG4; len -= 4; } - buf4++; buf = (const unsigned char FAR *)buf4; if (len) do { diff -Nru sudo-1.8.19p1/lib/zlib/deflate.c sudo-1.8.20p2/lib/zlib/deflate.c --- sudo-1.8.19p1/lib/zlib/deflate.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/deflate.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler "; + " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -73,6 +73,8 @@ typedef block_state (*compress_func) OF((deflate_state *s, int flush)); /* Compression function. Returns the block state after the call. */ +local int deflateStateCheck OF((z_streamp strm)); +local void slide_hash OF((deflate_state *s)); local void fill_window OF((deflate_state *s)); local block_state deflate_stored OF((deflate_state *s, int flush)); local block_state deflate_fast OF((deflate_state *s, int flush)); @@ -84,15 +86,16 @@ local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); -local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); #ifdef ASMV +# pragma message("Assembler code may have bugs -- use at your own risk") void match_init OF((void)); /* asm code initialization */ uInt longest_match OF((deflate_state *s, IPos cur_match)); #else local uInt longest_match OF((deflate_state *s, IPos cur_match)); #endif -#ifdef DEBUG +#ifdef ZLIB_DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, int length)); #endif @@ -148,21 +151,14 @@ * meaning. */ -#define EQUAL 0 -/* result of memcmp for equal strings */ - -#ifndef NO_DUMMY_DECL -struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ -#endif - /* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */ -#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0)) +#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0)) /* =========================================================================== * Update a hash value with the given input byte - * IN assertion: all calls to to UPDATE_HASH are made with consecutive - * input characters, so that a running hash key can be computed from the - * previous key instead of complete recalculation each time. + * IN assertion: all calls to UPDATE_HASH are made with consecutive input + * characters, so that a running hash key can be computed from the previous + * key instead of complete recalculation each time. */ #define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) @@ -173,9 +169,9 @@ * the previous length of the hash chain. * If this file is compiled with -DFASTEST, the compression level is forced * to 1, and no hash chains are maintained. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of str are valid - * (except for the last MIN_MATCH-1 bytes of the input file). + * IN assertion: all calls to INSERT_STRING are made with consecutive input + * characters and the first MIN_MATCH bytes of str are valid (except for + * the last MIN_MATCH-1 bytes of the input file). */ #ifdef FASTEST #define INSERT_STRING(s, str, match_head) \ @@ -197,6 +193,37 @@ s->head[s->hash_size-1] = NIL; \ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); +/* =========================================================================== + * Slide the hash table when sliding the window down (could be avoided with 32 + * bit values at the expense of memory usage). We slide even when level == 0 to + * keep the hash table consistent if we switch back to level > 0 later. + */ +local void slide_hash(s) + deflate_state *s; +{ + unsigned n, m; + Posf *p; + uInt wsize = s->w_size; + + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + } while (--n); + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif +} + /* ========================================================================= */ int ZEXPORT deflateInit_(strm, level, version, stream_size) z_streamp strm; @@ -270,7 +297,7 @@ #endif if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED) { + strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) { return Z_STREAM_ERROR; } if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ @@ -278,14 +305,15 @@ if (s == Z_NULL) return Z_MEM_ERROR; strm->state = (struct internal_state FAR *)s; s->strm = strm; + s->status = INIT_STATE; /* to pass state test in deflateReset() */ s->wrap = wrap; s->gzhead = Z_NULL; - s->w_bits = windowBits; + s->w_bits = (uInt)windowBits; s->w_size = 1 << s->w_bits; s->w_mask = s->w_size - 1; - s->hash_bits = memLevel + 7; + s->hash_bits = (uInt)memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); @@ -319,6 +347,31 @@ return deflateReset(strm); } +/* ========================================================================= + * Check for a valid deflate stream state. Return 0 if ok, 1 if not. + */ +local int deflateStateCheck (strm) + z_streamp strm; +{ + deflate_state *s; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + s = strm->state; + if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE && +#ifdef GZIP + s->status != GZIP_STATE && +#endif + s->status != EXTRA_STATE && + s->status != NAME_STATE && + s->status != COMMENT_STATE && + s->status != HCRC_STATE && + s->status != BUSY_STATE && + s->status != FINISH_STATE)) + return 1; + return 0; +} + /* ========================================================================= */ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) z_streamp strm; @@ -331,7 +384,7 @@ unsigned avail; z_const unsigned char *next; - if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL) + if (deflateStateCheck(strm) || dictionary == Z_NULL) return Z_STREAM_ERROR; s = strm->state; wrap = s->wrap; @@ -389,13 +442,34 @@ } /* ========================================================================= */ +int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) + z_streamp strm; + Bytef *dictionary; + uInt *dictLength; +{ + deflate_state *s; + uInt len; + + if (deflateStateCheck(strm)) + return Z_STREAM_ERROR; + s = strm->state; + len = s->strstart + s->lookahead; + if (len > s->w_size) + len = s->w_size; + if (dictionary != Z_NULL && len) + zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len); + if (dictLength != Z_NULL) + *dictLength = len; + return Z_OK; +} + +/* ========================================================================= */ int ZEXPORT deflateResetKeep (strm) z_streamp strm; { deflate_state *s; - if (strm == Z_NULL || strm->state == Z_NULL || - strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + if (deflateStateCheck(strm)) { return Z_STREAM_ERROR; } @@ -410,7 +484,11 @@ if (s->wrap < 0) { s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ } - s->status = s->wrap ? INIT_STATE : BUSY_STATE; + s->status = +#ifdef GZIP + s->wrap == 2 ? GZIP_STATE : +#endif + s->wrap ? INIT_STATE : BUSY_STATE; strm->adler = #ifdef GZIP s->wrap == 2 ? crc32(0L, Z_NULL, 0) : @@ -440,8 +518,8 @@ z_streamp strm; gz_headerp head; { - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; - if (strm->state->wrap != 2) return Z_STREAM_ERROR; + if (deflateStateCheck(strm) || strm->state->wrap != 2) + return Z_STREAM_ERROR; strm->state->gzhead = head; return Z_OK; } @@ -452,7 +530,7 @@ int *bits; z_streamp strm; { - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; if (pending != Z_NULL) *pending = strm->state->pending; if (bits != Z_NULL) @@ -469,7 +547,7 @@ deflate_state *s; int put; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) return Z_BUF_ERROR; @@ -494,9 +572,8 @@ { deflate_state *s; compress_func func; - int err = Z_OK; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; #ifdef FASTEST @@ -510,13 +587,22 @@ func = configuration_table[s->level].func; if ((strategy != s->strategy || func != configuration_table[level].func) && - strm->total_in != 0) { + s->high_water) { /* Flush the last buffer: */ - err = deflate(strm, Z_BLOCK); - if (err == Z_BUF_ERROR && s->pending == 0) - err = Z_OK; + int err = deflate(strm, Z_BLOCK); + if (err == Z_STREAM_ERROR) + return err; + if (strm->avail_out == 0) + return Z_BUF_ERROR; } if (s->level != level) { + if (s->level == 0 && s->matches != 0) { + if (s->matches == 1) + slide_hash(s); + else + CLEAR_HASH(s); + s->matches = 0; + } s->level = level; s->max_lazy_match = configuration_table[level].max_lazy; s->good_match = configuration_table[level].good_length; @@ -524,7 +610,7 @@ s->max_chain_length = configuration_table[level].max_chain; } s->strategy = strategy; - return err; + return Z_OK; } /* ========================================================================= */ @@ -537,12 +623,12 @@ { deflate_state *s; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; - s->good_match = good_length; - s->max_lazy_match = max_lazy; + s->good_match = (uInt)good_length; + s->max_lazy_match = (uInt)max_lazy; s->nice_match = nice_length; - s->max_chain_length = max_chain; + s->max_chain_length = (uInt)max_chain; return Z_OK; } @@ -569,14 +655,13 @@ { deflate_state *s; uLong complen, wraplen; - Bytef *str; /* conservative upper bound for compressed data */ complen = sourceLen + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; /* if can't get parameters, return conservative bound plus zlib wrapper */ - if (strm == Z_NULL || strm->state == Z_NULL) + if (deflateStateCheck(strm)) return complen + 6; /* compute wrapper length */ @@ -588,9 +673,11 @@ case 1: /* zlib wrapper */ wraplen = 6 + (s->strstart ? 4 : 0); break; +#ifdef GZIP case 2: /* gzip wrapper */ wraplen = 18; if (s->gzhead != Z_NULL) { /* user-supplied gzip header */ + Bytef *str; if (s->gzhead->extra != Z_NULL) wraplen += 2 + s->gzhead->extra_len; str = s->gzhead->name; @@ -607,6 +694,7 @@ wraplen += 2; } break; +#endif default: /* for compiler happiness */ wraplen = 6; } @@ -634,10 +722,10 @@ } /* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->next_out buffer and copying into it. - * (See also read_buf()). + * Flush as much pending output as possible. All deflate() output, except for + * some deflate_stored() output, goes through this function so some + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). */ local void flush_pending(strm) z_streamp strm; @@ -654,13 +742,23 @@ strm->next_out += len; s->pending_out += len; strm->total_out += len; - strm->avail_out -= len; - s->pending -= len; + strm->avail_out -= len; + s->pending -= len; if (s->pending == 0) { s->pending_out = s->pending_buf; } } +/* =========================================================================== + * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1]. + */ +#define HCRC_UPDATE(beg) \ + do { \ + if (s->gzhead->hcrc && s->pending > (beg)) \ + strm->adler = crc32(strm->adler, s->pending_buf + (beg), \ + s->pending - (beg)); \ + } while (0) + /* ========================================================================= */ int ZEXPORT deflate (strm, flush) z_streamp strm; @@ -669,230 +767,229 @@ int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; - if (strm == Z_NULL || strm->state == Z_NULL || - flush > Z_BLOCK || flush < 0) { + if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) { return Z_STREAM_ERROR; } s = strm->state; if (strm->next_out == Z_NULL || - (strm->next_in == Z_NULL && strm->avail_in != 0) || + (strm->avail_in != 0 && strm->next_in == Z_NULL) || (s->status == FINISH_STATE && flush != Z_FINISH)) { ERR_RETURN(strm, Z_STREAM_ERROR); } if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); - s->strm = strm; /* just in case */ old_flush = s->last_flush; s->last_flush = flush; + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + /* Write the header */ if (s->status == INIT_STATE) { -#ifdef GZIP - if (s->wrap == 2) { - strm->adler = crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (s->gzhead == Z_NULL) { - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s->level == 9 ? 2 : - (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s->status = BUSY_STATE; - } - else { - put_byte(s, (s->gzhead->text ? 1 : 0) + - (s->gzhead->hcrc ? 2 : 0) + - (s->gzhead->extra == Z_NULL ? 0 : 4) + - (s->gzhead->name == Z_NULL ? 0 : 8) + - (s->gzhead->comment == Z_NULL ? 0 : 16) - ); - put_byte(s, (Byte)(s->gzhead->time & 0xff)); - put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); - put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); - put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); - put_byte(s, s->level == 9 ? 2 : - (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? - 4 : 0)); - put_byte(s, s->gzhead->os & 0xff); - if (s->gzhead->extra != Z_NULL) { - put_byte(s, s->gzhead->extra_len & 0xff); - put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); - } - if (s->gzhead->hcrc) - strm->adler = crc32(strm->adler, s->pending_buf, - s->pending); - s->gzindex = 0; - s->status = EXTRA_STATE; - } - } + /* zlib header */ + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; else -#endif - { - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; - uInt level_flags; - - if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) - level_flags = 0; - else if (s->level < 6) - level_flags = 1; - else if (s->level == 6) - level_flags = 2; - else - level_flags = 3; - header |= (level_flags << 6); - if (s->strstart != 0) header |= PRESET_DICT; - header += 31 - (header % 31); + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#ifdef GZIP + if (s->status == GZIP_STATE) { + /* gzip header */ + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == Z_NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); s->status = BUSY_STATE; - putShortMSB(s, header); - /* Save the adler32 of the preset dictionary: */ - if (s->strstart != 0) { - putShortMSB(s, (uInt)(strm->adler >> 16)); - putShortMSB(s, (uInt)(strm->adler & 0xffff)); + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != Z_NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); } - strm->adler = adler32(0L, Z_NULL, 0); + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; } } -#ifdef GZIP if (s->status == EXTRA_STATE) { if (s->gzhead->extra != Z_NULL) { - uInt beg = s->pending; /* start of bytes to update crc */ - - while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { - if (s->pending == s->pending_buf_size) { - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - flush_pending(strm); - beg = s->pending; - if (s->pending == s->pending_buf_size) - break; + ulg beg = s->pending; /* start of bytes to update crc */ + uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex; + while (s->pending + left > s->pending_buf_size) { + uInt copy = s->pending_buf_size - s->pending; + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, copy); + s->pending = s->pending_buf_size; + HCRC_UPDATE(beg); + s->gzindex += copy; + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } - put_byte(s, s->gzhead->extra[s->gzindex]); - s->gzindex++; - } - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - if (s->gzindex == s->gzhead->extra_len) { - s->gzindex = 0; - s->status = NAME_STATE; + beg = 0; + left -= copy; } + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, left); + s->pending += left; + HCRC_UPDATE(beg); + s->gzindex = 0; } - else - s->status = NAME_STATE; + s->status = NAME_STATE; } if (s->status == NAME_STATE) { if (s->gzhead->name != Z_NULL) { - uInt beg = s->pending; /* start of bytes to update crc */ + ulg beg = s->pending; /* start of bytes to update crc */ int val; - do { if (s->pending == s->pending_buf_size) { - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); + HCRC_UPDATE(beg); flush_pending(strm); - beg = s->pending; - if (s->pending == s->pending_buf_size) { - val = 1; - break; + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } + beg = 0; } val = s->gzhead->name[s->gzindex++]; put_byte(s, val); } while (val != 0); - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - if (val == 0) { - s->gzindex = 0; - s->status = COMMENT_STATE; - } + HCRC_UPDATE(beg); + s->gzindex = 0; } - else - s->status = COMMENT_STATE; + s->status = COMMENT_STATE; } if (s->status == COMMENT_STATE) { if (s->gzhead->comment != Z_NULL) { - uInt beg = s->pending; /* start of bytes to update crc */ + ulg beg = s->pending; /* start of bytes to update crc */ int val; - do { if (s->pending == s->pending_buf_size) { - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); + HCRC_UPDATE(beg); flush_pending(strm); - beg = s->pending; - if (s->pending == s->pending_buf_size) { - val = 1; - break; + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } + beg = 0; } val = s->gzhead->comment[s->gzindex++]; put_byte(s, val); } while (val != 0); - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - if (val == 0) - s->status = HCRC_STATE; + HCRC_UPDATE(beg); } - else - s->status = HCRC_STATE; + s->status = HCRC_STATE; } if (s->status == HCRC_STATE) { if (s->gzhead->hcrc) { - if (s->pending + 2 > s->pending_buf_size) + if (s->pending + 2 > s->pending_buf_size) { flush_pending(strm); - if (s->pending + 2 <= s->pending_buf_size) { - put_byte(s, (Byte)(strm->adler & 0xff)); - put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); - strm->adler = crc32(0L, Z_NULL, 0); - s->status = BUSY_STATE; + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } } + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); } - else - s->status = BUSY_STATE; - } -#endif + s->status = BUSY_STATE; - /* Flush as much pending output as possible */ - if (s->pending != 0) { + /* Compression must start with an empty pending buffer */ flush_pending(strm); - if (strm->avail_out == 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ + if (s->pending != 0) { s->last_flush = -1; return Z_OK; } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && - flush != Z_FINISH) { - ERR_RETURN(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s->status == FINISH_STATE && strm->avail_in != 0) { - ERR_RETURN(strm, Z_BUF_ERROR); } +#endif /* Start a new block or continue the current one. */ @@ -900,9 +997,10 @@ (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { block_state bstate; - bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : - (s->strategy == Z_RLE ? deflate_rle(s, flush) : - (*(configuration_table[s->level].func))(s, flush)); + bstate = s->level == 0 ? deflate_stored(s, flush) : + s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush); if (bstate == finish_started || bstate == finish_done) { s->status = FINISH_STATE; @@ -944,7 +1042,6 @@ } } } - Assert(strm->avail_out > 0, "bug2"); if (flush != Z_FINISH) return Z_OK; if (s->wrap <= 0) return Z_STREAM_END; @@ -981,18 +1078,9 @@ { int status; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; status = strm->state->status; - if (status != INIT_STATE && - status != EXTRA_STATE && - status != NAME_STATE && - status != COMMENT_STATE && - status != HCRC_STATE && - status != BUSY_STATE && - status != FINISH_STATE) { - return Z_STREAM_ERROR; - } /* Deallocate in reverse order of allocations: */ TRY_FREE(strm, strm->state->pending_buf); @@ -1023,7 +1111,7 @@ ushf *overlay; - if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + if (deflateStateCheck(source) || dest == Z_NULL) { return Z_STREAM_ERROR; } @@ -1073,7 +1161,7 @@ * allocating a large strm->next_in buffer and copying from it. * (See also flush_pending()). */ -local int read_buf(strm, buf, size) +local unsigned read_buf(strm, buf, size) z_streamp strm; Bytef *buf; unsigned size; @@ -1097,7 +1185,7 @@ strm->next_in += len; strm->total_in += len; - return (int)len; + return len; } /* =========================================================================== @@ -1151,9 +1239,9 @@ { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ + register Bytef *match; /* matched string */ register int len; /* length of current match */ - int best_len = s->prev_length; /* best match length so far */ + int best_len = (int)s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? s->strstart - (IPos)MAX_DIST(s) : NIL; @@ -1188,7 +1276,7 @@ /* Do not look for matches beyond the end of the input. This is necessary * to make deflate deterministic. */ - if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); @@ -1349,7 +1437,11 @@ #endif /* FASTEST */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG + +#define EQUAL 0 +/* result of memcmp for equal strings */ + /* =========================================================================== * Check that the match at match_start is indeed a match. */ @@ -1375,7 +1467,7 @@ } #else # define check_match(s, start, match, length) -#endif /* DEBUG */ +#endif /* ZLIB_DEBUG */ /* =========================================================================== * Fill the window when the lookahead becomes insufficient. @@ -1390,8 +1482,7 @@ local void fill_window(s) deflate_state *s; { - register unsigned n, m; - register Posf *p; + unsigned n; unsigned more; /* Amount of free space at the end of the window. */ uInt wsize = s->w_size; @@ -1418,35 +1509,11 @@ */ if (s->strstart >= wsize+MAX_DIST(s)) { - zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - n = s->hash_size; - p = &s->head[n]; - do { - m = *--p; - *p = (Pos)(m >= wsize ? m-wsize : NIL); - } while (--n); - - n = wsize; -#ifndef FASTEST - p = &s->prev[n]; - do { - m = *--p; - *p = (Pos)(m >= wsize ? m-wsize : NIL); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); -#endif + slide_hash(s); more += wsize; } if (s->strm->avail_in == 0) break; @@ -1552,70 +1619,201 @@ if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ } +/* Maximum stored block length in deflate format (not including header). */ +#define MAX_STORED 65535 + +/* Minimum of a and b. */ +#ifndef MIN +#define MIN(a, b) ((a) > (b) ? (b) : (a)) +#endif + /* =========================================================================== * Copy without compression as much as possible from the input stream, return * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. + * + * In case deflateParams() is used to later switch to a non-zero compression + * level, s->matches (otherwise unused when storing) keeps track of the number + * of hash table slides to perform. If s->matches is 1, then one hash table + * slide will be done when switching. If s->matches is 2, the maximum value + * allowed here, then the hash table will be cleared, since two or more slides + * is the same as a clear. + * + * deflate_stored() is written to minimize the number of times an input byte is + * copied. It is most efficient with large input and output buffers, which + * maximizes the opportunites to have a single copy from next_in to next_out. */ local block_state deflate_stored(s, flush) deflate_state *s; int flush; { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: + /* Smallest worthy block size when not flushing or finishing. By default + * this is 32K. This can be as small as 507 bytes for memLevel == 1. For + * large input and output buffers, the stored block size will be larger. */ - ulg max_block_size = 0xffff; - ulg max_start; + unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size); - if (max_block_size > s->pending_buf_size - 5) { - max_block_size = s->pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s->lookahead <= 1) { - - Assert(s->strstart < s->w_size+MAX_DIST(s) || - s->block_start >= (long)s->w_size, "slide too late"); + /* Copy as many min_block or larger stored blocks directly to next_out as + * possible. If flushing, copy the remaining available input to next_out as + * stored blocks, if there is enough space. + */ + unsigned len, left, have, last = 0; + unsigned used = s->strm->avail_in; + do { + /* Set len to the maximum size block that we can copy directly with the + * available input data and output space. Set left to how much of that + * would be copied from what's left in the window. + */ + len = MAX_STORED; /* maximum deflate stored block length */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + if (s->strm->avail_out < have) /* need room for header */ + break; + /* maximum stored block length that will fit in avail_out: */ + have = s->strm->avail_out - have; + left = s->strstart - s->block_start; /* bytes left in window */ + if (len > (ulg)left + s->strm->avail_in) + len = left + s->strm->avail_in; /* limit len to the input */ + if (len > have) + len = have; /* limit len to the output */ + + /* If the stored block would be less than min_block in length, or if + * unable to copy all of the available input when flushing, then try + * copying to the window and the pending buffer instead. Also don't + * write an empty block when flushing -- deflate() does that. + */ + if (len < min_block && ((len == 0 && flush != Z_FINISH) || + flush == Z_NO_FLUSH || + len != left + s->strm->avail_in)) + break; - fill_window(s); - if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + /* Make a dummy stored block in pending to get the header bytes, + * including any pending bits. This also updates the debugging counts. + */ + last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0; + _tr_stored_block(s, (char *)0, 0L, last); - if (s->lookahead == 0) break; /* flush the current block */ + /* Replace the lengths in the dummy stored block with len. */ + s->pending_buf[s->pending - 4] = len; + s->pending_buf[s->pending - 3] = len >> 8; + s->pending_buf[s->pending - 2] = ~len; + s->pending_buf[s->pending - 1] = ~len >> 8; + + /* Write the stored block header bytes. */ + flush_pending(s->strm); + +#ifdef ZLIB_DEBUG + /* Update debugging counts for the data about to be copied. */ + s->compressed_len += len << 3; + s->bits_sent += len << 3; +#endif + + /* Copy uncompressed bytes from the window to next_out. */ + if (left) { + if (left > len) + left = len; + zmemcpy(s->strm->next_out, s->window + s->block_start, left); + s->strm->next_out += left; + s->strm->avail_out -= left; + s->strm->total_out += left; + s->block_start += left; + len -= left; } - Assert(s->block_start >= 0L, "block gone"); - - s->strstart += s->lookahead; - s->lookahead = 0; - /* Emit a stored block if pending_buf will be full: */ - max_start = s->block_start + max_block_size; - if (s->strstart == 0 || (ulg)s->strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s->lookahead = (uInt)(s->strstart - max_start); - s->strstart = (uInt)max_start; - FLUSH_BLOCK(s, 0); - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: + /* Copy uncompressed bytes directly from next_in to next_out, updating + * the check value. + */ + if (len) { + read_buf(s->strm, s->strm->next_out, len); + s->strm->next_out += len; + s->strm->avail_out -= len; + s->strm->total_out += len; + } + } while (last == 0); + + /* Update the sliding window with the last s->w_size bytes of the copied + * data, or append all of the copied data to the existing window if less + * than s->w_size bytes were copied. Also update the number of bytes to + * insert in the hash tables, in the event that deflateParams() switches to + * a non-zero compression level. + */ + used -= s->strm->avail_in; /* number of input bytes directly copied */ + if (used) { + /* If any input was used, then no unused input remains in the window, + * therefore s->block_start == s->strstart. */ - if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { - FLUSH_BLOCK(s, 0); + if (used >= s->w_size) { /* supplant the previous history */ + s->matches = 2; /* clear hash */ + zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); + s->strstart = s->w_size; + } + else { + if (s->window_size - s->strstart <= used) { + /* Slide the window down. */ + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + } + zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); + s->strstart += used; } + s->block_start = s->strstart; + s->insert += MIN(used, s->w_size - s->insert); } - s->insert = 0; - if (flush == Z_FINISH) { - FLUSH_BLOCK(s, 1); + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* If the last block was written to next_out, then done. */ + if (last) return finish_done; + + /* If flushing and all input has been consumed, then done. */ + if (flush != Z_NO_FLUSH && flush != Z_FINISH && + s->strm->avail_in == 0 && (long)s->strstart == s->block_start) + return block_done; + + /* Fill the window with any remaining input. */ + have = s->window_size - s->strstart - 1; + if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { + /* Slide the window down. */ + s->block_start -= s->w_size; + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + have += s->w_size; /* more space now */ + } + if (have > s->strm->avail_in) + have = s->strm->avail_in; + if (have) { + read_buf(s->strm, s->window + s->strstart, have); + s->strstart += have; + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* There was not enough avail_out to write a complete worthy or flushed + * stored block to next_out. Write a stored block to pending instead, if we + * have enough input for a worthy block, or if flushing and there is enough + * room for the remaining input as a stored block in the pending buffer. + */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + /* maximum stored block length that will fit in pending: */ + have = MIN(s->pending_buf_size - have, MAX_STORED); + min_block = MIN(have, s->w_size); + left = s->strstart - s->block_start; + if (left >= min_block || + ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH && + s->strm->avail_in == 0 && left <= have)) { + len = MIN(left, have); + last = flush == Z_FINISH && s->strm->avail_in == 0 && + len == left ? 1 : 0; + _tr_stored_block(s, (charf *)s->window + s->block_start, len, last); + s->block_start += len; + flush_pending(s->strm); } - if ((long)s->strstart > s->block_start) - FLUSH_BLOCK(s, 0); - return block_done; + + /* We've done all we can with the available input and output. */ + return last ? finish_started : need_more; } /* =========================================================================== @@ -1892,7 +2090,7 @@ prev == *++scan && prev == *++scan && prev == *++scan && prev == *++scan && scan < strend); - s->match_length = MAX_MATCH - (int)(strend - scan); + s->match_length = MAX_MATCH - (uInt)(strend - scan); if (s->match_length > s->lookahead) s->match_length = s->lookahead; } diff -Nru sudo-1.8.19p1/lib/zlib/deflate.h sudo-1.8.20p2/lib/zlib/deflate.h --- sudo-1.8.19p1/lib/zlib/deflate.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/deflate.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2012 Jean-loup Gailly + * Copyright (C) 1995-2016 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -51,13 +51,16 @@ #define Buf_size 16 /* size of bit buffer in bi_buf */ -#define INIT_STATE 42 -#define EXTRA_STATE 69 -#define NAME_STATE 73 -#define COMMENT_STATE 91 -#define HCRC_STATE 103 -#define BUSY_STATE 113 -#define FINISH_STATE 666 +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#ifdef GZIP +# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#endif +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ /* Stream status */ @@ -83,7 +86,7 @@ typedef struct tree_desc_s { ct_data *dyn_tree; /* the dynamic tree */ int max_code; /* largest code with non zero frequency */ - static_tree_desc *stat_desc; /* the corresponding static tree */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ } FAR tree_desc; typedef ush Pos; @@ -100,10 +103,10 @@ Bytef *pending_buf; /* output still pending */ ulg pending_buf_size; /* size of pending_buf */ Bytef *pending_out; /* next pending byte to output to the stream */ - uInt pending; /* nb of bytes in the pending buffer */ + ulg pending; /* nb of bytes in the pending buffer */ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ gz_headerp gzhead; /* gzip header information to write */ - uInt gzindex; /* where in extra, name, or comment */ + ulg gzindex; /* where in extra, name, or comment */ Byte method; /* can only be DEFLATED */ int last_flush; /* value of flush param for previous deflate call */ @@ -249,7 +252,7 @@ uInt matches; /* number of string matches in current block */ uInt insert; /* bytes at end of window left to insert */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG ulg compressed_len; /* total bit length of compressed file mod 2^32 */ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ #endif @@ -275,7 +278,7 @@ /* Output a byte on the stream. * IN assertion: there is enough room in pending_buf. */ -#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} +#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) @@ -309,7 +312,7 @@ * used. */ -#ifndef DEBUG +#ifndef ZLIB_DEBUG /* Inline versions of _tr_tally for speed: */ #if defined(GEN_TREES_H) || !defined(STDC) @@ -328,8 +331,8 @@ flush = (s->last_lit == s->lit_bufsize-1); \ } # define _tr_tally_dist(s, distance, length, flush) \ - { uch len = (length); \ - ush dist = (distance); \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ s->d_buf[s->last_lit] = dist; \ s->l_buf[s->last_lit++] = len; \ dist--; \ diff -Nru sudo-1.8.19p1/lib/zlib/gzguts.h sudo-1.8.20p2/lib/zlib/gzguts.h --- sudo-1.8.19p1/lib/zlib/gzguts.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/gzguts.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* gzguts.h -- zlib internal header definitions for gz* operations - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler + * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -25,6 +25,10 @@ # include # include #endif + +#ifndef _POSIX_SOURCE +# define _POSIX_SOURCE +#endif #include #ifdef _WIN32 @@ -35,6 +39,10 @@ # include #endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define WIDECHAR +#endif + #ifdef WINAPI_FAMILY # define open _open # define read _read @@ -95,18 +103,19 @@ # endif #endif -/* unlike snprintf (which is required in C99, yet still not supported by - Microsoft more than a decade later!), _snprintf does not guarantee null - termination of the result -- however this is only used in gzlib.c where +/* unlike snprintf (which is required in C99), _snprintf does not guarantee + null termination of the result -- however this is only used in gzlib.c where the result is assured to fit in the space provided */ -#ifdef _MSC_VER +#if defined(_MSC_VER) && _MSC_VER < 1900 # define snprintf _snprintf #endif #ifndef local # define local static #endif -/* compile with -Dlocal if your debugger can't find static symbols */ +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ /* gz* functions always use library allocation functions */ #ifndef STDC @@ -170,7 +179,7 @@ char *path; /* path or fd for error messages */ unsigned size; /* buffer size, zero if not allocated yet */ unsigned want; /* requested buffer size, default is GZBUFSIZE */ - unsigned char *in; /* input buffer */ + unsigned char *in; /* input buffer (double-sized when writing) */ unsigned char *out; /* output buffer (double-sized when reading) */ int direct; /* 0 if processing gzip, 1 if transparent */ /* just for reading */ diff -Nru sudo-1.8.19p1/lib/zlib/gzlib.c sudo-1.8.20p2/lib/zlib/gzlib.c --- sudo-1.8.19p1/lib/zlib/gzlib.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/gzlib.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,11 +1,11 @@ /* gzlib.c -- zlib functions common to reading and writing gzip files - * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler + * Copyright (C) 2004-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "gzguts.h" -#if defined(_WIN32) && !defined(__BORLANDC__) +#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) # define LSEEK _lseeki64 #else #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 @@ -94,7 +94,7 @@ const char *mode; { gz_statep state; - size_t len; + z_size_t len; int oflag; #ifdef O_CLOEXEC int cloexec = 0; @@ -188,10 +188,10 @@ } /* save the path name for error messages */ -#ifdef _WIN32 +#ifdef WIDECHAR if (fd == -2) { len = wcstombs(NULL, path, 0); - if (len == (size_t)-1) + if (len == (z_size_t)-1) len = 0; } else @@ -202,7 +202,7 @@ free(state); return NULL; } -#ifdef _WIN32 +#ifdef WIDECHAR if (fd == -2) if (len) wcstombs(state->path, path, len + 1); @@ -211,7 +211,7 @@ else #endif #if !defined(NO_snprintf) && !defined(NO_vsnprintf) - snprintf(state->path, len + 1, "%s", (const char *)path); + (void)snprintf(state->path, len + 1, "%s", (const char *)path); #else strcpy(state->path, path); #endif @@ -239,7 +239,7 @@ /* open the file with the appropriate flags (or just use fd) */ state->fd = fd > -1 ? fd : ( -#ifdef _WIN32 +#ifdef WIDECHAR fd == -2 ? _wopen(path, oflag, 0666) : #endif open((const char *)path, oflag, 0666)); @@ -248,8 +248,10 @@ free(state); return NULL; } - if (state->mode == GZ_APPEND) + if (state->mode == GZ_APPEND) { + LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */ state->mode = GZ_WRITE; /* simplify later checks */ + } /* save the current position for rewinding (only if reading) */ if (state->mode == GZ_READ) { @@ -291,7 +293,7 @@ if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL) return NULL; #if !defined(NO_snprintf) && !defined(NO_vsnprintf) - snprintf(path, 7 + 3 * sizeof(int), "", fd); /* for debugging */ + (void)snprintf(path, 7 + 3 * sizeof(int), "", fd); #else sprintf(path, "", fd); /* for debugging */ #endif @@ -301,7 +303,7 @@ } /* -- see zlib.h -- */ -#ifdef _WIN32 +#ifdef WIDECHAR gzFile ZEXPORT gzopen_w(path, mode) const wchar_t *path; const char *mode; @@ -329,6 +331,8 @@ return -1; /* check and set requested size */ + if ((size << 1) < size) + return -1; /* need to be able to double it */ if (size < 2) size = 2; /* need two bytes to check magic header */ state->want = size; @@ -604,14 +608,13 @@ return; } #if !defined(NO_snprintf) && !defined(NO_vsnprintf) - snprintf(state->msg, strlen(state->path) + strlen(msg) + 3, - "%s%s%s", state->path, ": ", msg); + (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3, + "%s%s%s", state->path, ": ", msg); #else strcpy(state->msg, state->path); strcat(state->msg, ": "); strcat(state->msg, msg); #endif - return; } #ifndef INT_MAX diff -Nru sudo-1.8.19p1/lib/zlib/gzread.c sudo-1.8.20p2/lib/zlib/gzread.c --- sudo-1.8.19p1/lib/zlib/gzread.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/gzread.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* gzread.c -- zlib functions for reading gzip files - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler + * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -12,6 +12,7 @@ local int gz_decomp OF((gz_statep)); local int gz_fetch OF((gz_statep)); local int gz_skip OF((gz_statep, z_off64_t)); +local z_size_t gz_read OF((gz_statep, voidp, z_size_t)); /* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from state->fd, and update state->eof, state->err, and state->msg as appropriate. @@ -24,13 +25,17 @@ unsigned *have; { int ret; + unsigned get, max = ((unsigned)-1 >> 2) + 1; *have = 0; do { - ret = read(state->fd, buf + *have, len - *have); + get = len - *have; + if (get > max) + get = max; + ret = read(state->fd, buf + *have, get); if (ret <= 0) break; - *have += ret; + *have += (unsigned)ret; } while (*have < len); if (ret < 0) { gz_error(state, Z_ERRNO, zstrerror()); @@ -94,10 +99,8 @@ state->in = (unsigned char *)malloc(state->want); state->out = (unsigned char *)malloc(state->want << 1); if (state->in == NULL || state->out == NULL) { - if (state->out != NULL) - free(state->out); - if (state->in != NULL) - free(state->in); + free(state->out); + free(state->in); gz_error(state, Z_MEM_ERROR, "out of memory"); return -1; } @@ -284,33 +287,17 @@ return 0; } -/* -- see zlib.h -- */ -int ZEXPORT gzread(file, buf, len) - gzFile file; +/* Read len bytes into buf from file, or less than len up to the end of the + input. Return the number of bytes read. If zero is returned, either the + end of file was reached, or there was an error. state->err must be + consulted in that case to determine which. */ +local z_size_t gz_read(state, buf, len) + gz_statep state; voidp buf; - unsigned len; + z_size_t len; { - unsigned got, n; - gz_statep state; - z_streamp strm; - - /* get internal structure */ - if (file == NULL) - return -1; - state = (gz_statep)file; - strm = &(state->strm); - - /* check that we're reading and that there's no (serious) error */ - if (state->mode != GZ_READ || - (state->err != Z_OK && state->err != Z_BUF_ERROR)) - return -1; - - /* since an int is returned, make sure len fits in one, otherwise return - with an error (this avoids the flaw in the interface) */ - if ((int)len < 0) { - gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); - return -1; - } + z_size_t got; + unsigned n; /* if len is zero, avoid unnecessary operations */ if (len == 0) @@ -320,32 +307,38 @@ if (state->seek) { state->seek = 0; if (gz_skip(state, state->skip) == -1) - return -1; + return 0; } /* get len bytes to buf, or less than len if at the end */ got = 0; do { + /* set n to the maximum amount of len that fits in an unsigned int */ + n = -1; + if (n > len) + n = len; + /* first just try copying data from the output buffer */ if (state->x.have) { - n = state->x.have > len ? len : state->x.have; + if (state->x.have < n) + n = state->x.have; memcpy(buf, state->x.next, n); state->x.next += n; state->x.have -= n; } /* output buffer empty -- return if we're at the end of the input */ - else if (state->eof && strm->avail_in == 0) { + else if (state->eof && state->strm.avail_in == 0) { state->past = 1; /* tried to read past end */ break; } /* need output data -- for small len or new stream load up our output buffer */ - else if (state->how == LOOK || len < (state->size << 1)) { + else if (state->how == LOOK || n < (state->size << 1)) { /* get more output, looking for header if required */ if (gz_fetch(state) == -1) - return -1; + return 0; continue; /* no progress yet -- go back to copy above */ /* the copy above assures that we will leave with space in the output buffer, allowing at least one gzungetc() to succeed */ @@ -353,16 +346,16 @@ /* large len -- read directly into user buffer */ else if (state->how == COPY) { /* read directly */ - if (gz_load(state, (unsigned char *)buf, len, &n) == -1) - return -1; + if (gz_load(state, (unsigned char *)buf, n, &n) == -1) + return 0; } /* large len -- decompress directly into user buffer */ else { /* state->how == GZIP */ - strm->avail_out = len; - strm->next_out = (unsigned char *)buf; + state->strm.avail_out = n; + state->strm.next_out = (unsigned char *)buf; if (gz_decomp(state) == -1) - return -1; + return 0; n = state->x.have; state->x.have = 0; } @@ -374,8 +367,75 @@ state->x.pos += n; } while (len); - /* return number of bytes read into user buffer (will fit in int) */ - return (int)got; + /* return number of bytes read into user buffer */ + return got; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzread(file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids a flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in an int"); + return -1; + } + + /* read len or fewer bytes to buf */ + len = gz_read(state, buf, len); + + /* check for an error */ + if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + + /* return the number of bytes read (this is assured to fit in an int) */ + return (int)len; +} + +/* -- see zlib.h -- */ +z_size_t ZEXPORT gzfread(buf, size, nitems, file) + voidp buf; + z_size_t size; + z_size_t nitems; + gzFile file; +{ + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return 0; + + /* compute bytes to read -- error on overflow */ + len = nitems * size; + if (size && len / size != nitems) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); + return 0; + } + + /* read len or fewer bytes to buf, return the number of full items read */ + return len ? gz_read(state, buf, len) / size : 0; } /* -- see zlib.h -- */ @@ -408,8 +468,8 @@ return *(state->x.next)++; } - /* nothing there -- try gzread() */ - ret = gzread(file, buf, 1); + /* nothing there -- try gz_read() */ + ret = gz_read(state, buf, 1); return ret < 1 ? -1 : buf[0]; } @@ -451,7 +511,7 @@ if (state->x.have == 0) { state->x.have = 1; state->x.next = state->out + (state->size << 1) - 1; - state->x.next[0] = c; + state->x.next[0] = (unsigned char)c; state->x.pos--; state->past = 0; return c; @@ -473,7 +533,7 @@ } state->x.have++; state->x.next--; - state->x.next[0] = c; + state->x.next[0] = (unsigned char)c; state->x.pos--; state->past = 0; return c; diff -Nru sudo-1.8.19p1/lib/zlib/gzwrite.c sudo-1.8.20p2/lib/zlib/gzwrite.c --- sudo-1.8.19p1/lib/zlib/gzwrite.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/gzwrite.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* gzwrite.c -- zlib functions for writing gzip files - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler + * Copyright (C) 2004-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,17 +9,19 @@ local int gz_init OF((gz_statep)); local int gz_comp OF((gz_statep, int)); local int gz_zero OF((gz_statep, z_off64_t)); +local z_size_t gz_write OF((gz_statep, voidpc, z_size_t)); /* Initialize state for writing a gzip file. Mark initialization by setting - state->size to non-zero. Return -1 on failure or 0 on success. */ + state->size to non-zero. Return -1 on a memory allocation failure, or 0 on + success. */ local int gz_init(state) gz_statep state; { int ret; z_streamp strm = &(state->strm); - /* allocate input buffer */ - state->in = (unsigned char *)malloc(state->want); + /* allocate input buffer (double size for gzprintf) */ + state->in = (unsigned char *)malloc(state->want << 1); if (state->in == NULL) { gz_error(state, Z_MEM_ERROR, "out of memory"); return -1; @@ -47,6 +49,7 @@ gz_error(state, Z_MEM_ERROR, "out of memory"); return -1; } + strm->next_in = NULL; } /* mark state as initialized */ @@ -62,17 +65,17 @@ } /* Compress whatever is at avail_in and next_in and write to the output file. - Return -1 if there is an error writing to the output file, otherwise 0. - flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH, - then the deflate() state is reset to start a new gzip stream. If gz->direct - is true, then simply write to the output file without compressing, and - ignore flush. */ + Return -1 if there is an error writing to the output file or if gz_init() + fails to allocate memory, otherwise 0. flush is assumed to be a valid + deflate() flush value. If flush is Z_FINISH, then the deflate() state is + reset to start a new gzip stream. If gz->direct is true, then simply write + to the output file without compressing, and ignore flush. */ local int gz_comp(state, flush) gz_statep state; int flush; { - int ret, got; - unsigned have; + int ret, writ; + unsigned have, put, max = ((unsigned)-1 >> 2) + 1; z_streamp strm = &(state->strm); /* allocate memory if this is the first time through */ @@ -81,12 +84,16 @@ /* write directly if requested */ if (state->direct) { - got = write(state->fd, strm->next_in, strm->avail_in); - if (got < 0 || (unsigned)got != strm->avail_in) { - gz_error(state, Z_ERRNO, zstrerror()); - return -1; + while (strm->avail_in) { + put = strm->avail_in > max ? max : strm->avail_in; + writ = write(state->fd, strm->next_in, put); + if (writ < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + strm->avail_in -= (unsigned)writ; + strm->next_in += writ; } - strm->avail_in = 0; return 0; } @@ -97,17 +104,21 @@ doing Z_FINISH then don't write until we get to Z_STREAM_END */ if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && (flush != Z_FINISH || ret == Z_STREAM_END))) { - have = (unsigned)(strm->next_out - state->x.next); - if (have && ((got = write(state->fd, state->x.next, have)) < 0 || - (unsigned)got != have)) { - gz_error(state, Z_ERRNO, zstrerror()); - return -1; + while (strm->next_out > state->x.next) { + put = strm->next_out - state->x.next > (int)max ? max : + (unsigned)(strm->next_out - state->x.next); + writ = write(state->fd, state->x.next, put); + if (writ < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + state->x.next += writ; } if (strm->avail_out == 0) { strm->avail_out = state->size; strm->next_out = state->out; + state->x.next = state->out; } - state->x.next = strm->next_out; } /* compress */ @@ -129,7 +140,8 @@ return 0; } -/* Compress len zeros to output. Return -1 on error, 0 on success. */ +/* Compress len zeros to output. Return -1 on a write error or memory + allocation failure by gz_comp(), or 0 on success. */ local int gz_zero(state, len) gz_statep state; z_off64_t len; @@ -161,32 +173,14 @@ return 0; } -/* -- see zlib.h -- */ -int ZEXPORT gzwrite(file, buf, len) - gzFile file; +/* Write len bytes from buf to file. Return the number of bytes written. If + the returned value is less than len, then there was an error. */ +local z_size_t gz_write(state, buf, len) + gz_statep state; voidpc buf; - unsigned len; + z_size_t len; { - unsigned put = len; - gz_statep state; - z_streamp strm; - - /* get internal structure */ - if (file == NULL) - return 0; - state = (gz_statep)file; - strm = &(state->strm); - - /* check that we're writing and that there's no error */ - if (state->mode != GZ_WRITE || state->err != Z_OK) - return 0; - - /* since an int is returned, make sure len fits in one, otherwise return - with an error (this avoids the flaw in the interface) */ - if ((int)len < 0) { - gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); - return 0; - } + z_size_t put = len; /* if len is zero, avoid unnecessary operations */ if (len == 0) @@ -209,14 +203,15 @@ do { unsigned have, copy; - if (strm->avail_in == 0) - strm->next_in = state->in; - have = (unsigned)((strm->next_in + strm->avail_in) - state->in); + if (state->strm.avail_in == 0) + state->strm.next_in = state->in; + have = (unsigned)((state->strm.next_in + state->strm.avail_in) - + state->in); copy = state->size - have; if (copy > len) copy = len; memcpy(state->in + have, buf, copy); - strm->avail_in += copy; + state->strm.avail_in += copy; state->x.pos += copy; buf = (const char *)buf + copy; len -= copy; @@ -226,19 +221,83 @@ } else { /* consume whatever's left in the input buffer */ - if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1) return 0; /* directly compress user buffer to file */ - strm->avail_in = len; - strm->next_in = (z_const Bytef *)buf; - state->x.pos += len; - if (gz_comp(state, Z_NO_FLUSH) == -1) - return 0; + state->strm.next_in = (z_const Bytef *)buf; + do { + unsigned n = (unsigned)-1; + if (n > len) + n = len; + state->strm.avail_in = n; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + len -= n; + } while (len); + } + + /* input was all buffered or compressed */ + return put; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzwrite(file, buf, len) + gzFile file; + voidpc buf; + unsigned len; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids a flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + return 0; + } + + /* write len bytes from buf (the return value will fit in an int) */ + return (int)gz_write(state, buf, len); +} + +/* -- see zlib.h -- */ +z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) + voidpc buf; + z_size_t size; + z_size_t nitems; + gzFile file; +{ + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* compute bytes to read -- error on overflow */ + len = nitems * size; + if (size && len / size != nitems) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); + return 0; } - /* input was all buffered or compressed (put will fit in int) */ - return (int)put; + /* write len bytes to buf, return the number of full items written */ + return len ? gz_write(state, buf, len) / size : 0; } /* -- see zlib.h -- */ @@ -275,7 +334,7 @@ strm->next_in = state->in; have = (unsigned)((strm->next_in + strm->avail_in) - state->in); if (have < state->size) { - state->in[have] = c; + state->in[have] = (unsigned char)c; strm->avail_in++; state->x.pos++; return c & 0xff; @@ -283,8 +342,8 @@ } /* no room in buffer or not initialized, use gz_write() */ - buf[0] = c; - if (gzwrite(file, buf, 1) != 1) + buf[0] = (unsigned char)c; + if (gz_write(state, buf, 1) != 1) return -1; return c & 0xff; } @@ -295,11 +354,21 @@ const char *str; { int ret; - unsigned len; + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; /* write string */ - len = (unsigned)strlen(str); - ret = gzwrite(file, str, len); + len = strlen(str); + ret = gz_write(state, str, len); return ret == 0 && len != 0 ? -1 : ret; } @@ -309,63 +378,73 @@ /* -- see zlib.h -- */ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { - int size, len; + int len; + unsigned left; + char *next; gz_statep state; z_streamp strm; /* get internal structure */ if (file == NULL) - return -1; + return Z_STREAM_ERROR; state = (gz_statep)file; strm = &(state->strm); /* check that we're writing and that there's no error */ if (state->mode != GZ_WRITE || state->err != Z_OK) - return 0; + return Z_STREAM_ERROR; /* make sure we have some buffer space */ if (state->size == 0 && gz_init(state) == -1) - return 0; + return state->err; /* check for seek request */ if (state->seek) { state->seek = 0; if (gz_zero(state, state->skip) == -1) - return 0; + return state->err; } - /* consume whatever's left in the input buffer */ - if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) - return 0; - - /* do the printf() into the input buffer, put length in len */ - size = (int)(state->size); - state->in[size - 1] = 0; + /* do the printf() into the input buffer, put length in len -- the input + buffer is double-sized just for this function, so there is guaranteed to + be state->size bytes available after the current contents */ + if (strm->avail_in == 0) + strm->next_in = state->in; + next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in); + next[state->size - 1] = 0; #ifdef NO_vsnprintf # ifdef HAS_vsprintf_void - (void)vsprintf((char *)(state->in), format, va); - for (len = 0; len < size; len++) - if (state->in[len] == 0) break; + (void)vsprintf(next, format, va); + for (len = 0; len < state->size; len++) + if (next[len] == 0) break; # else - len = vsprintf((char *)(state->in), format, va); + len = vsprintf(next, format, va); # endif #else # ifdef HAS_vsnprintf_void - (void)vsnprintf((char *)(state->in), size, format, va); - len = strlen((char *)(state->in)); + (void)vsnprintf(next, state->size, format, va); + len = strlen(next); # else - len = vsnprintf((char *)(state->in), size, format, va); + len = vsnprintf(next, state->size, format, va); # endif #endif /* check that printf() results fit in buffer */ - if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0) return 0; - /* update buffer and position, defer compression until needed */ - strm->avail_in = (unsigned)len; - strm->next_in = state->in; + /* update buffer and position, compress first half if past that */ + strm->avail_in += (unsigned)len; state->x.pos += len; + if (strm->avail_in >= state->size) { + left = strm->avail_in - state->size; + strm->avail_in = state->size; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return state->err; + memcpy(state->in, state->in + state->size, left); + strm->next_in = state->in; + strm->avail_in = left; + } return len; } @@ -390,73 +469,82 @@ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; { - int size, len; + unsigned len, left; + char *next; gz_statep state; z_streamp strm; /* get internal structure */ if (file == NULL) - return -1; + return Z_STREAM_ERROR; state = (gz_statep)file; strm = &(state->strm); /* check that can really pass pointer in ints */ if (sizeof(int) != sizeof(void *)) - return 0; + return Z_STREAM_ERROR; /* check that we're writing and that there's no error */ if (state->mode != GZ_WRITE || state->err != Z_OK) - return 0; + return Z_STREAM_ERROR; /* make sure we have some buffer space */ if (state->size == 0 && gz_init(state) == -1) - return 0; + return state->error; /* check for seek request */ if (state->seek) { state->seek = 0; if (gz_zero(state, state->skip) == -1) - return 0; + return state->error; } - /* consume whatever's left in the input buffer */ - if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) - return 0; - - /* do the printf() into the input buffer, put length in len */ - size = (int)(state->size); - state->in[size - 1] = 0; + /* do the printf() into the input buffer, put length in len -- the input + buffer is double-sized just for this function, so there is guaranteed to + be state->size bytes available after the current contents */ + if (strm->avail_in == 0) + strm->next_in = state->in; + next = (char *)(strm->next_in + strm->avail_in); + next[state->size - 1] = 0; #ifdef NO_snprintf # ifdef HAS_sprintf_void - sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, + a13, a14, a15, a16, a17, a18, a19, a20); for (len = 0; len < size; len++) - if (state->in[len] == 0) break; + if (next[len] == 0) + break; # else - len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, + a12, a13, a14, a15, a16, a17, a18, a19, a20); # endif #else # ifdef HAS_snprintf_void - snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); - len = strlen((char *)(state->in)); + snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(next); # else - len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, - a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, - a19, a20); + len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); # endif #endif /* check that printf() results fit in buffer */ - if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + if (len == 0 || len >= state->size || next[state->size - 1] != 0) return 0; - /* update buffer and position, defer compression until needed */ - strm->avail_in = (unsigned)len; - strm->next_in = state->in; + /* update buffer and position, compress first half if past that */ + strm->avail_in += len; state->x.pos += len; - return len; + if (strm->avail_in >= state->size) { + left = strm->avail_in - state->size; + strm->avail_in = state->size; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return state->err; + memcpy(state->in, state->in + state->size, left); + strm->next_in = state->in; + strm->avail_in = left; + } + return (int)len; } #endif @@ -470,7 +558,7 @@ /* get internal structure */ if (file == NULL) - return -1; + return Z_STREAM_ERROR; state = (gz_statep)file; /* check that we're writing and that there's no error */ @@ -485,11 +573,11 @@ if (state->seek) { state->seek = 0; if (gz_zero(state, state->skip) == -1) - return -1; + return state->err; } /* compress remaining data with requested flush */ - gz_comp(state, flush); + (void)gz_comp(state, flush); return state->err; } @@ -520,13 +608,13 @@ if (state->seek) { state->seek = 0; if (gz_zero(state, state->skip) == -1) - return -1; + return state->err; } /* change compression parameters for subsequent input */ if (state->size) { /* flush previous input with previous parameters before changing */ - if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1) + if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1) return state->err; deflateParams(strm, level, strategy); } diff -Nru sudo-1.8.19p1/lib/zlib/infback.c sudo-1.8.20p2/lib/zlib/infback.c --- sudo-1.8.19p1/lib/zlib/infback.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/infback.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* infback.c -- inflate using a call-back interface - * Copyright (C) 1995-2011 Mark Adler + * Copyright (C) 1995-2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -61,7 +61,7 @@ Tracev((stderr, "inflate: allocated\n")); strm->state = (struct internal_state FAR *)state; state->dmax = 32768U; - state->wbits = windowBits; + state->wbits = (uInt)windowBits; state->wsize = 1U << windowBits; state->window = window; state->wnext = 0; diff -Nru sudo-1.8.19p1/lib/zlib/inffast.c sudo-1.8.20p2/lib/zlib/inffast.c --- sudo-1.8.19p1/lib/zlib/inffast.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/inffast.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* inffast.c -- fast decoding - * Copyright (C) 1995-2008, 2010, 2013 Mark Adler + * Copyright (C) 1995-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,26 +8,9 @@ #include "inflate.h" #include "inffast.h" -#ifndef ASMINF - -/* Allow machine dependent optimization for post-increment or pre-increment. - Based on testing to date, - Pre-increment preferred for: - - PowerPC G3 (Adler) - - MIPS R5000 (Randers-Pehrson) - Post-increment preferred for: - - none - No measurable difference: - - Pentium III (Anderson) - - M68060 (Nikl) - */ -#ifdef POSTINC -# define OFF 0 -# define PUP(a) *(a)++ +#ifdef ASMINF +# pragma message("Assembler code may have bugs -- use at your own risk") #else -# define OFF 1 -# define PUP(a) *++(a) -#endif /* Decode literal, length, and distance codes and write out the resulting @@ -96,9 +79,9 @@ /* copy state to local variables */ state = (struct inflate_state FAR *)strm->state; - in = strm->next_in - OFF; + in = strm->next_in; last = in + (strm->avail_in - 5); - out = strm->next_out - OFF; + out = strm->next_out; beg = out - (start - strm->avail_out); end = out + (strm->avail_out - 257); #ifdef INFLATE_STRICT @@ -119,9 +102,9 @@ input data or output space */ do { if (bits < 15) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } here = lcode[hold & lmask]; @@ -134,14 +117,14 @@ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : "inflate: literal 0x%02x\n", here.val)); - PUP(out) = (unsigned char)(here.val); + *out++ = (unsigned char)(here.val); } else if (op & 16) { /* length base */ len = (unsigned)(here.val); op &= 15; /* number of extra bits */ if (op) { if (bits < op) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } len += (unsigned)hold & ((1U << op) - 1); @@ -150,9 +133,9 @@ } Tracevv((stderr, "inflate: length %u\n", len)); if (bits < 15) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } here = dcode[hold & dmask]; @@ -165,10 +148,10 @@ dist = (unsigned)(here.val); op &= 15; /* number of extra bits */ if (bits < op) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; if (bits < op) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } } @@ -196,30 +179,30 @@ #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR if (len <= op - whave) { do { - PUP(out) = 0; + *out++ = 0; } while (--len); continue; } len -= op - whave; do { - PUP(out) = 0; + *out++ = 0; } while (--op > whave); if (op == 0) { from = out - dist; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--len); continue; } #endif } - from = window - OFF; + from = window; if (wnext == 0) { /* very common case */ from += wsize - op; if (op < len) { /* some from window */ len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); from = out - dist; /* rest from output */ } @@ -230,14 +213,14 @@ if (op < len) { /* some from end of window */ len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); - from = window - OFF; + from = window; if (wnext < len) { /* some from start of window */ op = wnext; len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); from = out - dist; /* rest from output */ } @@ -248,35 +231,35 @@ if (op < len) { /* some from window */ len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); from = out - dist; /* rest from output */ } } while (len > 2) { - PUP(out) = PUP(from); - PUP(out) = PUP(from); - PUP(out) = PUP(from); + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; len -= 3; } if (len) { - PUP(out) = PUP(from); + *out++ = *from++; if (len > 1) - PUP(out) = PUP(from); + *out++ = *from++; } } else { from = out - dist; /* copy direct from output */ do { /* minimum length is three */ - PUP(out) = PUP(from); - PUP(out) = PUP(from); - PUP(out) = PUP(from); + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; len -= 3; } while (len > 2); if (len) { - PUP(out) = PUP(from); + *out++ = *from++; if (len > 1) - PUP(out) = PUP(from); + *out++ = *from++; } } } @@ -313,8 +296,8 @@ hold &= (1U << bits) - 1; /* update state and return */ - strm->next_in = in + OFF; - strm->next_out = out + OFF; + strm->next_in = in; + strm->next_out = out; strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); strm->avail_out = (unsigned)(out < end ? 257 + (end - out) : 257 - (out - end)); diff -Nru sudo-1.8.19p1/lib/zlib/inflate.c sudo-1.8.20p2/lib/zlib/inflate.c --- sudo-1.8.19p1/lib/zlib/inflate.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/inflate.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* inflate.c -- zlib decompression - * Copyright (C) 1995-2012 Mark Adler + * Copyright (C) 1995-2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -92,6 +92,7 @@ #endif /* function prototypes */ +local int inflateStateCheck OF((z_streamp strm)); local void fixedtables OF((struct inflate_state FAR *state)); local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, unsigned copy)); @@ -101,12 +102,26 @@ local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, unsigned len)); +local int inflateStateCheck(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + state = (struct inflate_state FAR *)strm->state; + if (state == Z_NULL || state->strm != strm || + state->mode < HEAD || state->mode > SYNC) + return 1; + return 0; +} + int ZEXPORT inflateResetKeep(strm) z_streamp strm; { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; strm->total_in = strm->total_out = state->total = 0; strm->msg = Z_NULL; @@ -131,7 +146,7 @@ { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; state->wsize = 0; state->whave = 0; @@ -147,7 +162,7 @@ struct inflate_state FAR *state; /* get the state */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; /* extract wrap request from windowBits parameter */ @@ -156,7 +171,7 @@ windowBits = -windowBits; } else { - wrap = (windowBits >> 4) + 1; + wrap = (windowBits >> 4) + 5; #ifdef GUNZIP if (windowBits < 48) windowBits &= 15; @@ -210,7 +225,9 @@ if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (struct internal_state FAR *)state; + state->strm = strm; state->window = Z_NULL; + state->mode = HEAD; /* to pass state test in inflateReset2() */ ret = inflateReset2(strm, windowBits); if (ret != Z_OK) { ZFREE(strm, state); @@ -234,17 +251,17 @@ { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (bits < 0) { state->hold = 0; state->bits = 0; return Z_OK; } - if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR; value &= (1L << bits) - 1; - state->hold += value << state->bits; - state->bits += bits; + state->hold += (unsigned)value << state->bits; + state->bits += (uInt)bits; return Z_OK; } @@ -625,7 +642,7 @@ static const unsigned short order[19] = /* permutation of code lengths */ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + if (inflateStateCheck(strm) || strm->next_out == Z_NULL || (strm->next_in == Z_NULL && strm->avail_in != 0)) return Z_STREAM_ERROR; @@ -645,6 +662,8 @@ NEEDBITS(16); #ifdef GUNZIP if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + if (state->wbits == 0) + state->wbits = 15; state->check = crc32(0L, Z_NULL, 0); CRC2(state->check, hold); INITBITS(); @@ -672,7 +691,7 @@ len = BITS(4) + 8; if (state->wbits == 0) state->wbits = len; - else if (len > state->wbits) { + if (len > 15 || len > state->wbits) { strm->msg = (char *)"invalid window size"; state->mode = BAD; break; @@ -699,14 +718,16 @@ } if (state->head != Z_NULL) state->head->text = (int)((hold >> 8) & 1); - if (state->flags & 0x0200) CRC2(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); INITBITS(); state->mode = TIME; case TIME: NEEDBITS(32); if (state->head != Z_NULL) state->head->time = hold; - if (state->flags & 0x0200) CRC4(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC4(state->check, hold); INITBITS(); state->mode = OS; case OS: @@ -715,7 +736,8 @@ state->head->xflags = (int)(hold & 0xff); state->head->os = (int)(hold >> 8); } - if (state->flags & 0x0200) CRC2(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; case EXLEN: @@ -724,7 +746,8 @@ state->length = (unsigned)(hold); if (state->head != Z_NULL) state->head->extra_len = (unsigned)hold; - if (state->flags & 0x0200) CRC2(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); INITBITS(); } else if (state->head != Z_NULL) @@ -742,7 +765,7 @@ len + copy > state->head->extra_max ? state->head->extra_max - len : copy); } - if (state->flags & 0x0200) + if ((state->flags & 0x0200) && (state->wrap & 4)) state->check = crc32(state->check, next, copy); have -= copy; next += copy; @@ -761,9 +784,9 @@ if (state->head != Z_NULL && state->head->name != Z_NULL && state->length < state->head->name_max) - state->head->name[state->length++] = len; + state->head->name[state->length++] = (Bytef)len; } while (len && copy < have); - if (state->flags & 0x0200) + if ((state->flags & 0x0200) && (state->wrap & 4)) state->check = crc32(state->check, next, copy); have -= copy; next += copy; @@ -782,9 +805,9 @@ if (state->head != Z_NULL && state->head->comment != Z_NULL && state->length < state->head->comm_max) - state->head->comment[state->length++] = len; + state->head->comment[state->length++] = (Bytef)len; } while (len && copy < have); - if (state->flags & 0x0200) + if ((state->flags & 0x0200) && (state->wrap & 4)) state->check = crc32(state->check, next, copy); have -= copy; next += copy; @@ -796,7 +819,7 @@ case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); - if (hold != (state->check & 0xffff)) { + if ((state->wrap & 4) && hold != (state->check & 0xffff)) { strm->msg = (char *)"header crc mismatch"; state->mode = BAD; break; @@ -1177,11 +1200,11 @@ out -= left; strm->total_out += out; state->total += out; - if (out) + if ((state->wrap & 4) && out) strm->adler = state->check = UPDATE(state->check, put - out, out); out = left; - if (( + if ((state->wrap & 4) && ( #ifdef GUNZIP state->flags ? hold : #endif @@ -1240,10 +1263,10 @@ strm->total_in += in; strm->total_out += out; state->total += out; - if (state->wrap && out) + if ((state->wrap & 4) && out) strm->adler = state->check = UPDATE(state->check, strm->next_out - out, out); - strm->data_type = state->bits + (state->last ? 64 : 0) + + strm->data_type = (int)state->bits + (state->last ? 64 : 0) + (state->mode == TYPE ? 128 : 0) + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) @@ -1255,7 +1278,7 @@ z_streamp strm; { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->window != Z_NULL) ZFREE(strm, state->window); @@ -1273,7 +1296,7 @@ struct inflate_state FAR *state; /* check state */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; /* copy dictionary */ @@ -1298,7 +1321,7 @@ int ret; /* check state */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->wrap != 0 && state->mode != DICT) return Z_STREAM_ERROR; @@ -1330,7 +1353,7 @@ struct inflate_state FAR *state; /* check state */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; @@ -1383,7 +1406,7 @@ struct inflate_state FAR *state; /* check parameters */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; @@ -1430,7 +1453,7 @@ { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; return state->mode == STORED && state->bits == 0; } @@ -1445,8 +1468,7 @@ unsigned wsize; /* check input */ - if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || - source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + if (inflateStateCheck(source) || dest == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)source->state; @@ -1467,6 +1489,7 @@ /* copy state */ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + copy->strm = dest; if (state->lencode >= state->codes && state->lencode <= state->codes + ENOUGH - 1) { copy->lencode = copy->codes + (state->lencode - state->codes); @@ -1488,25 +1511,51 @@ { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; - state->sane = !subvert; #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + state->sane = !subvert; return Z_OK; #else + (void)subvert; state->sane = 1; return Z_DATA_ERROR; #endif } +int ZEXPORT inflateValidate(strm, check) +z_streamp strm; +int check; +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (check) + state->wrap |= 4; + else + state->wrap &= ~4; + return Z_OK; +} + long ZEXPORT inflateMark(strm) z_streamp strm; { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16; + if (inflateStateCheck(strm)) + return -(1L << 16); state = (struct inflate_state FAR *)strm->state; - return ((long)(state->back) << 16) + + return (long)(((unsigned long)((long)state->back)) << 16) + (state->mode == COPY ? state->length : (state->mode == MATCH ? state->was - state->length : 0)); } + +unsigned long ZEXPORT inflateCodesUsed(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) return (unsigned long)-1; + state = (struct inflate_state FAR *)strm->state; + return (unsigned long)(state->next - state->codes); +} diff -Nru sudo-1.8.19p1/lib/zlib/inflate.h sudo-1.8.20p2/lib/zlib/inflate.h --- sudo-1.8.19p1/lib/zlib/inflate.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/inflate.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* inflate.h -- internal inflate state definition - * Copyright (C) 1995-2009 Mark Adler + * Copyright (C) 1995-2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -18,7 +18,7 @@ /* Possible inflate modes between inflate() calls */ typedef enum { - HEAD, /* i: waiting for magic header */ + HEAD = 16180, /* i: waiting for magic header */ FLAGS, /* i: waiting for method and flags (gzip) */ TIME, /* i: waiting for modification time (gzip) */ OS, /* i: waiting for extra flags and operating system (gzip) */ @@ -77,11 +77,14 @@ CHECK -> LENGTH -> DONE */ -/* state maintained between inflate() calls. Approximately 10K bytes. */ +/* State maintained between inflate() calls -- approximately 7K bytes, not + including the allocated sliding window, which is up to 32K bytes. */ struct inflate_state { + z_streamp strm; /* pointer back to this zlib stream */ inflate_mode mode; /* current inflate mode */ int last; /* true if processing last block */ - int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ int havedict; /* true if dictionary provided */ int flags; /* gzip header method and flags (0 if zlib) */ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ diff -Nru sudo-1.8.19p1/lib/zlib/inftrees.c sudo-1.8.20p2/lib/zlib/inftrees.c --- sudo-1.8.19p1/lib/zlib/inftrees.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/inftrees.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2013 Mark Adler + * Copyright (C) 1995-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.8 Copyright 1995-2013 Mark Adler "; + " inflate 1.2.11 Copyright 1995-2017 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -54,7 +54,7 @@ code FAR *next; /* next available space in table */ const unsigned short FAR *base; /* base value table to use */ const unsigned short FAR *extra; /* extra bits table to use */ - int end; /* use base and extra for symbol > end */ + unsigned match; /* use base and extra for symbol >= match */ unsigned short count[MAXBITS+1]; /* number of codes of each length */ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */ @@ -62,7 +62,7 @@ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, @@ -181,19 +181,17 @@ switch (type) { case CODES: base = extra = work; /* dummy value--not used */ - end = 19; + match = 20; break; case LENS: base = lbase; - base -= 257; extra = lext; - extra -= 257; - end = 256; + match = 257; break; - default: /* DISTS */ + default: /* DISTS */ base = dbase; extra = dext; - end = -1; + match = 0; } /* initialize state for loop */ @@ -216,13 +214,13 @@ for (;;) { /* create table entry */ here.bits = (unsigned char)(len - drop); - if ((int)(work[sym]) < end) { + if (work[sym] + 1U < match) { here.op = (unsigned char)0; here.val = work[sym]; } - else if ((int)(work[sym]) > end) { - here.op = (unsigned char)(extra[work[sym]]); - here.val = base[work[sym]]; + else if (work[sym] >= match) { + here.op = (unsigned char)(extra[work[sym] - match]); + here.val = base[work[sym] - match]; } else { here.op = (unsigned char)(32 + 64); /* end of block */ diff -Nru sudo-1.8.19p1/lib/zlib/Makefile.in sudo-1.8.20p2/lib/zlib/Makefile.in --- sudo-1.8.19p1/lib/zlib/Makefile.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/Makefile.in 2017-05-10 15:38:43.000000000 +0000 @@ -37,7 +37,7 @@ # File extension, mode and map file to use for shared libraries/objects shlib_enable = @SHLIB_ENABLE@ shlib_mode = @SHLIB_MODE@ -shlib_exp = zlib.exp +shlib_exp = $(srcdir)/zlib.exp shlib_map = zlib.map shlib_opt = zlib.opt diff -Nru sudo-1.8.19p1/lib/zlib/trees.c sudo-1.8.20p2/lib/zlib/trees.c --- sudo-1.8.19p1/lib/zlib/trees.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/trees.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2012 Jean-loup Gailly + * Copyright (C) 1995-2017 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -36,7 +36,7 @@ #include "deflate.h" -#ifdef DEBUG +#ifdef ZLIB_DEBUG # include #endif @@ -122,13 +122,13 @@ int max_length; /* max bit length for the codes */ }; -local static_tree_desc static_l_desc = +local const static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; -local static_tree_desc static_d_desc = +local const static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; -local static_tree_desc static_bl_desc = +local const static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== @@ -152,18 +152,16 @@ local unsigned bi_reverse OF((unsigned value, int length)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); -local void copy_block OF((deflate_state *s, charf *buf, unsigned len, - int header)); #ifdef GEN_TREES_H local void gen_trees_header OF((void)); #endif -#ifndef DEBUG +#ifndef ZLIB_DEBUG # define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) /* Send a code of the given tree. c and tree must not have side effects */ -#else /* DEBUG */ +#else /* !ZLIB_DEBUG */ # define send_code(s, c, tree) \ { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ send_bits(s, tree[c].Code, tree[c].Len); } @@ -182,7 +180,7 @@ * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG local void send_bits OF((deflate_state *s, int value, int length)); local void send_bits(s, value, length) @@ -208,12 +206,12 @@ s->bi_valid += length; } } -#else /* !DEBUG */ +#else /* !ZLIB_DEBUG */ #define send_bits(s, value, length) \ { int len = length;\ if (s->bi_valid > (int)Buf_size - len) {\ - int val = value;\ + int val = (int)value;\ s->bi_buf |= (ush)val << s->bi_valid;\ put_short(s, s->bi_buf);\ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ @@ -223,7 +221,7 @@ s->bi_valid += len;\ }\ } -#endif /* DEBUG */ +#endif /* ZLIB_DEBUG */ /* the arguments must not have side effects */ @@ -317,7 +315,7 @@ * Genererate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H -# ifndef DEBUG +# ifndef ZLIB_DEBUG # include # endif @@ -394,7 +392,7 @@ s->bi_buf = 0; s->bi_valid = 0; -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len = 0L; s->bits_sent = 0L; #endif @@ -522,12 +520,12 @@ xbits = 0; if (n >= base) xbits = extra[n-base]; f = tree[n].Freq; - s->opt_len += (ulg)f * (bits + xbits); - if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + s->opt_len += (ulg)f * (unsigned)(bits + xbits); + if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); } if (overflow == 0) return; - Trace((stderr,"\nbit length overflow\n")); + Tracev((stderr,"\nbit length overflow\n")); /* This happens for example on obj2 and pic of the Calgary corpus */ /* Find the first bit length which could increase: */ @@ -554,9 +552,8 @@ m = s->heap[--h]; if (m > max_code) continue; if ((unsigned) tree[m].Len != (unsigned) bits) { - Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s->opt_len += ((long)bits - (long)tree[m].Len) - *(long)tree[m].Freq; + Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq; tree[m].Len = (ush)bits; } n--; @@ -578,7 +575,7 @@ ushf *bl_count; /* number of codes at each bit length */ { ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - ush code = 0; /* running code value */ + unsigned code = 0; /* running code value */ int bits; /* bit index */ int n; /* code index */ @@ -586,7 +583,8 @@ * without bit reversal. */ for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits-1]) << 1; + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = (ush)code; } /* Check that the bit counts in bl_count are consistent. The last code * must be all ones. @@ -599,7 +597,7 @@ int len = tree[n].Len; if (len == 0) continue; /* Now reverse the bits */ - tree[n].Code = bi_reverse(next_code[len]++, len); + tree[n].Code = (ush)bi_reverse(next_code[len]++, len); Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); @@ -821,7 +819,7 @@ if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*(max_blindex+1) + 5+5+4; + s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); @@ -869,11 +867,17 @@ int last; /* one if this is the last block for a file */ { send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ -#ifdef DEBUG + bi_windup(s); /* align on byte boundary */ + put_short(s, (ush)stored_len); + put_short(s, (ush)~stored_len); + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + s->pending += stored_len; +#ifdef ZLIB_DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; + s->bits_sent += 2*16; + s->bits_sent += stored_len<<3; #endif - copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ } /* =========================================================================== @@ -894,7 +898,7 @@ { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ #endif bi_flush(s); @@ -902,7 +906,7 @@ /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. + * trees or store, and write out the encoded block. */ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) deflate_state *s; @@ -974,7 +978,7 @@ send_bits(s, (STATIC_TREES<<1)+last, 3); compress_block(s, (const ct_data *)static_ltree, (const ct_data *)static_dtree); -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len += 3 + s->static_len; #endif } else { @@ -983,7 +987,7 @@ max_blindex+1); compress_block(s, (const ct_data *)s->dyn_ltree, (const ct_data *)s->dyn_dtree); -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len += 3 + s->opt_len; #endif } @@ -995,7 +999,7 @@ if (last) { bi_windup(s); -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len += 7; /* align on byte boundary */ #endif } @@ -1090,7 +1094,7 @@ send_code(s, code, dtree); /* send the distance code */ extra = extra_dbits[code]; if (extra != 0) { - dist -= base_dist[code]; + dist -= (unsigned)base_dist[code]; send_bits(s, dist, extra); /* send the extra distance bits */ } } /* literal or match pair ? */ @@ -1193,34 +1197,7 @@ } s->bi_buf = 0; s->bi_valid = 0; -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->bits_sent = (s->bits_sent+7) & ~7; #endif } - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -local void copy_block(s, buf, len, header) - deflate_state *s; - charf *buf; /* the input data */ - unsigned len; /* its length */ - int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, (ush)len); - put_short(s, (ush)~len); -#ifdef DEBUG - s->bits_sent += 2*16; -#endif - } -#ifdef DEBUG - s->bits_sent += (ulg)len<<3; -#endif - while (len--) { - put_byte(s, *buf++); - } -} diff -Nru sudo-1.8.19p1/lib/zlib/uncompr.c sudo-1.8.20p2/lib/zlib/uncompr.c --- sudo-1.8.19p1/lib/zlib/uncompr.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/uncompr.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* uncompr.c -- decompress a memory buffer - * Copyright (C) 1995-2003, 2010 Jean-loup Gailly. + * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,51 +9,85 @@ #include "zlib.h" /* =========================================================================== - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted. + Decompresses the source buffer into the destination buffer. *sourceLen is + the byte length of the source buffer. Upon entry, *destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, + *destLen is the size of the decompressed data and *sourceLen is the number + of source bytes consumed. Upon return, source + *sourceLen points to the + first unused input byte. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, or + Z_DATA_ERROR if the input data was corrupted, including if the input data is + an incomplete zlib stream. */ -int ZEXPORT uncompress (dest, destLen, source, sourceLen) +int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; - uLong sourceLen; + uLong *sourceLen; { z_stream stream; int err; + const uInt max = (uInt)-1; + uLong len, left; + Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */ + + len = *sourceLen; + if (*destLen) { + left = *destLen; + *destLen = 0; + } + else { + left = 1; + dest = buf; + } stream.next_in = (z_const Bytef *)source; - stream.avail_in = (uInt)sourceLen; - /* Check for source > 64K on 16-bit machine: */ - if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; - - stream.next_out = dest; - stream.avail_out = (uInt)*destLen; - if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; - + stream.avail_in = 0; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; err = inflateInit(&stream); if (err != Z_OK) return err; - err = inflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - inflateEnd(&stream); - if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) - return Z_DATA_ERROR; - return err; - } - *destLen = stream.total_out; + stream.next_out = dest; + stream.avail_out = 0; - err = inflateEnd(&stream); - return err; + do { + if (stream.avail_out == 0) { + stream.avail_out = left > (uLong)max ? max : (uInt)left; + left -= stream.avail_out; + } + if (stream.avail_in == 0) { + stream.avail_in = len > (uLong)max ? max : (uInt)len; + len -= stream.avail_in; + } + err = inflate(&stream, Z_NO_FLUSH); + } while (err == Z_OK); + + *sourceLen -= len + stream.avail_in; + if (dest != buf) + *destLen = stream.total_out; + else if (stream.total_out && err == Z_BUF_ERROR) + left = 1; + + inflateEnd(&stream); + return err == Z_STREAM_END ? Z_OK : + err == Z_NEED_DICT ? Z_DATA_ERROR : + err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR : + err; +} + +int ZEXPORT uncompress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return uncompress2(dest, destLen, source, &sourceLen); } diff -Nru sudo-1.8.19p1/lib/zlib/zconf.h.in sudo-1.8.20p2/lib/zlib/zconf.h.in --- sudo-1.8.19p1/lib/zlib/zconf.h.in 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/zconf.h.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2013 Jean-loup Gailly. + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -39,7 +39,7 @@ #ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ # define Z_PREFIX_SET -/* all linked symbols */ +/* all linked symbols and init macros */ # define _dist_code z__dist_code # define _length_code z__length_code # define _tr_align z__tr_align @@ -51,6 +51,7 @@ # define adler32 z_adler32 # define adler32_combine z_adler32_combine # define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z # ifndef Z_SOLO # define compress z_compress # define compress2 z_compress2 @@ -59,10 +60,14 @@ # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 +# define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound # define deflateCopy z_deflateCopy # define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 # define deflateInit2_ z_deflateInit2_ # define deflateInit_ z_deflateInit_ # define deflateParams z_deflateParams @@ -89,6 +94,8 @@ # define gzeof z_gzeof # define gzerror z_gzerror # define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite # define gzgetc z_gzgetc # define gzgetc_ z_gzgetc_ # define gzgets z_gzgets @@ -100,7 +107,6 @@ # define gzopen_w z_gzopen_w # endif # define gzprintf z_gzprintf -# define gzvprintf z_gzvprintf # define gzputc z_gzputc # define gzputs z_gzputs # define gzread z_gzread @@ -111,32 +117,39 @@ # define gztell z_gztell # define gztell64 z_gztell64 # define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf # define gzwrite z_gzwrite # endif # define inflate z_inflate # define inflateBack z_inflateBack # define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit # define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed # define inflateCopy z_inflateCopy # define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary # define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 # define inflateInit2_ z_inflateInit2_ # define inflateInit_ z_inflateInit_ # define inflateMark z_inflateMark # define inflatePrime z_inflatePrime # define inflateReset z_inflateReset # define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep # define inflateSetDictionary z_inflateSetDictionary -# define inflateGetDictionary z_inflateGetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateUndermine z_inflateUndermine -# define inflateResetKeep z_inflateResetKeep +# define inflateValidate z_inflateValidate # define inflate_copyright z_inflate_copyright # define inflate_fast z_inflate_fast # define inflate_table z_inflate_table # ifndef Z_SOLO # define uncompress z_uncompress +# define uncompress2 z_uncompress2 # endif # define zError z_zError # ifndef Z_SOLO @@ -246,9 +259,19 @@ # define z_const #endif -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) -# define NO_DUMMY_DECL +#ifdef Z_SOLO + typedef unsigned long z_size_t; +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong #endif /* Maximum value for memLevel in deflateInit2 */ @@ -278,7 +301,7 @@ Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes for small objects. */ diff -Nru sudo-1.8.19p1/lib/zlib/zlib.exp sudo-1.8.20p2/lib/zlib/zlib.exp --- sudo-1.8.19p1/lib/zlib/zlib.exp 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/zlib.exp 2017-05-10 15:38:43.000000000 +0000 @@ -1,16 +1,19 @@ adler32 adler32_combine adler32_combine64 +adler32_z compress compress2 compressBound crc32 crc32_combine crc32_combine64 +crc32_z deflate deflateBound deflateCopy deflateEnd +deflateGetDictionary deflateInit2_ deflateInit_ deflateParams @@ -32,6 +35,8 @@ gzeof gzerror gzflush +gzfread +gzfwrite gzgetc gzgetc_ gzgets @@ -56,6 +61,7 @@ inflateBack inflateBackEnd inflateBackInit_ +inflateCodesUsed inflateCopy inflateEnd inflateGetDictionary @@ -71,7 +77,9 @@ inflateSync inflateSyncPoint inflateUndermine +inflateValidate uncompress +uncompress2 zError zlibCompileFlags zlibVersion diff -Nru sudo-1.8.19p1/lib/zlib/zlib.h sudo-1.8.20p2/lib/zlib/zlib.h --- sudo-1.8.19p1/lib/zlib/zlib.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/zlib.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.8, April 28th, 2013 + version 1.2.11, January 15th, 2017 - Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.8" -#define ZLIB_VERNUM 0x1280 +#define ZLIB_VERSION "1.2.11" +#define ZLIB_VERNUM 0x12b0 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 8 +#define ZLIB_VER_REVISION 11 #define ZLIB_VER_SUBREVISION 0 /* @@ -65,7 +65,8 @@ with "gz". The gzip format is different from the zlib format. gzip is a gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - This library can optionally read and write gzip streams in memory as well. + This library can optionally read and write gzip and raw deflate streams in + memory as well. The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single- @@ -74,7 +75,7 @@ The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash - even in case of corrupted input. + even in the case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); @@ -87,7 +88,7 @@ uInt avail_in; /* number of bytes available at next_in */ uLong total_in; /* total number of input bytes read so far */ - Bytef *next_out; /* next output byte should be put there */ + Bytef *next_out; /* next output byte will go here */ uInt avail_out; /* remaining free space at next_out */ uLong total_out; /* total number of bytes output so far */ @@ -98,8 +99,9 @@ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ - int data_type; /* best guess about the data type: binary or text */ - uLong adler; /* adler32 value of the uncompressed data */ + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ uLong reserved; /* reserved for future use */ } z_stream; @@ -142,7 +144,9 @@ zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). On 16-bit systems, the functions zalloc and zfree must be able to allocate exactly 65536 bytes, but will not be required to allocate more than this if @@ -155,7 +159,7 @@ The fields total_in and total_out can be used for statistics or progress reports. After compression, total_in holds the total size of the - uncompressed data and may be saved for use in the decompressor (particularly + uncompressed data and may be saved for use by the decompressor (particularly if the decompressor wants to decompress everything in a single step). */ @@ -200,7 +204,7 @@ #define Z_TEXT 1 #define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ #define Z_UNKNOWN 2 -/* Possible values of the data_type field (though see inflate()) */ +/* Possible values of the data_type field for deflate() */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ @@ -258,11 +262,11 @@ enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - - Provide more output starting at next_out and update next_out and avail_out + - Generate more output starting at next_out and update next_out and avail_out accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). Some - output may be provided even if flush is not set. + should be set only when necessary. Some output may be provided even if + flush is zero. Before the call of deflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more @@ -271,7 +275,9 @@ output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output - buffer because there might be more output pending. + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more ouput + in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to decide how much data to accumulate before producing output, in order to @@ -292,8 +298,8 @@ input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. This completes the current deflate block and follows it with an empty fixed codes block that is 10 bits long. This assures that enough bytes are output - in order for the decompressor to finish the block before the empty fixed code - block. + in order for the decompressor to finish the block before the empty fixed + codes block. If flush is set to Z_BLOCK, a deflate block is completed and emitted, as for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to @@ -319,34 +325,38 @@ If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was - enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the stream - are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least the - value returned by deflateBound (see below). Then deflate is guaranteed to - return Z_STREAM_END. If not enough output space is provided, deflate will - not return Z_STREAM_END, and it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect the - compression algorithm in any manner. + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not - fatal, and deflate() can be called again with more input and more output - space to continue compressing. + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. */ @@ -369,23 +379,21 @@ Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the - exact value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the version assumed by the caller, or Z_STREAM_ERROR if the parameters are invalid, such as a null pointer to the structure. msg is set to null if - there is no error message. inflateInit does not perform any decompression - apart from possibly reading the zlib header if present: actual decompression - will be done by inflate(). (So next_in and avail_in may be modified, but - next_out and avail_out are unused and unchanged.) The current implementation - of inflateInit() does not process any header information -- that is deferred - until inflate() is called. + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. */ @@ -401,17 +409,20 @@ - Decompress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing will - resume at this point for the next call of inflate(). + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). - - Provide more output starting at next_out and update next_out and avail_out + - Generate more output starting at next_out and update next_out and avail_out accordingly. inflate() provides as much output as possible, until there is no more input data or no more space in the output buffer (see below about the flush parameter). Before the call of inflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more - output, and updating the next_* and avail_* values accordingly. The + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The application can consume the uncompressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of inflate(). If inflate returns Z_OK and with zero avail_out, it must be @@ -428,7 +439,7 @@ gets to the end of that block, or when it runs out of data. The Z_BLOCK option assists in appending to or combining deflate streams. - Also to assist in this, on return inflate() will set strm->data_type to the + To assist in this, on return inflate() always sets strm->data_type to the number of unused bits in the last byte taken from strm->next_in, plus 64 if inflate() is currently decoding the last block in the deflate stream, plus 128 if inflate() returned immediately after decoding an end-of-block code or @@ -454,7 +465,7 @@ this case all pending input is processed and all pending output is flushed; avail_out must be large enough to hold all of the uncompressed data for the operation to complete. (The size of the uncompressed data may have been - saved by the compressor for this purpose.) The use of Z_FINISH is not + saved by the compressor for this purpose.) The use of Z_FINISH is not required to perform an inflation in one step. However it may be used to inform inflate that a faster approach can be used for the single inflate() call. Z_FINISH also informs inflate to not maintain a sliding window if the @@ -476,32 +487,33 @@ chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the Adler-32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 + below. At the end of the stream, inflate() checks that its computed Adler-32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. inflate() can decompress and check either zlib-wrapped or gzip-wrapped deflate data. The header type is detected automatically, if requested when initializing with inflateInit2(). Any information contained in the gzip - header is not retained, so applications that need that information should - instead use raw inflate, see inflateInit2() below, or inflateBack() and - perform their own processing of the gzip header and trailer. When processing + header is not retained unless inflateGetHeader() is used. When processing gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output - producted so far. The CRC-32 is checked against the gzip trailer. + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has been reached and all uncompressed output has been produced, Z_NEED_DICT if a preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check - value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and inflate() can be called again with more input and more output space to continue decompressing. If Z_DATA_ERROR is returned, the application may then call inflateSync() to look for a good compression block if a partial - recovery of the data is desired. + recovery of the data is to be attempted. */ @@ -511,9 +523,8 @@ This function discards any unprocessed input and does not flush any pending output. - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. */ @@ -544,16 +555,29 @@ compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits determines the window size. deflate() will then generate raw deflate data - with no zlib header or trailer, and will not compute an adler32 check value. + with no zlib header or trailer, and will not compute a check value. windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the compressed data instead of a zlib wrapper. The gzip header will have no file name, no extra data, no comment, no modification time (set to zero), no - header crc, and the operating system will be set to 255 (unknown). If a - gzip stream is being written, strm->adler is a crc32 instead of an adler32. + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is @@ -614,12 +638,12 @@ addition, the current implementation of deflate will use at most the window size minus 262 bytes of the provided dictionary. - Upon return of this function, strm->adler is set to the adler32 value + Upon return of this function, strm->adler is set to the Adler-32 value of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value + which dictionary has been used by the compressor. (The Adler-32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) If a raw deflate was requested, then the - adler32 value is not computed and strm->adler is not set. + Adler-32 value is not computed and strm->adler is not set. deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is @@ -628,6 +652,28 @@ not perform any compression: this will be done by deflate(). */ +ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, z_streamp source)); /* @@ -648,10 +694,10 @@ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. The - stream will keep the same compression level and any other attributes that - may have been set by deflateInit2. + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). @@ -662,20 +708,36 @@ int strategy)); /* Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be + interpretation of level and strategy is as in deflateInit2(). This can be used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. - If the compression level is changed, the input available so far is - compressed with the old level (and may be flushed); the new level will take - effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to be - compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if - strm->avail_out was zero. + If the compression approach (which is a function of the level) or the + strategy is changed, and if any input has been consumed in a previous + deflate() call, then the input available so far is compressed with the old + level and strategy using deflate(strm, Z_BLOCK). There are three approaches + for the compression levels 0, 1..3, and 4..9 respectively. The new level + and strategy will take effect at the next call of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. */ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, @@ -793,7 +855,7 @@ is for use with other formats that use the deflate compressed data format such as zip. Those formats provide their own check values. If a custom format is developed using the raw deflate format for compressed data, it is - recommended that a check value such as an adler32 or a crc32 be applied to + recommended that a check value such as an Adler-32 or a CRC-32 be applied to the uncompressed data as is done in the zlib, gzip, and zip formats. For most applications, the zlib format should be used as is. Note that comments above on the use in deflateInit2() applies to the magnitude of windowBits. @@ -802,7 +864,10 @@ 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format (the zlib format will return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a - crc32 instead of an adler32. + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will not automatically decode concatenated gzip streams. + inflate() will return Z_STREAM_END at the end of the gzip stream. The state + would need to be reset to continue decoding a subsequent gzip stream. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -823,7 +888,7 @@ Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, if that call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the adler32 value returned by that call of inflate. + can be determined from the Adler-32 value returned by that call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). For raw inflate, this function can be called at any time to set the dictionary. If the provided dictionary is smaller than the @@ -834,7 +899,7 @@ inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not + expected one (incorrect Adler-32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ @@ -892,7 +957,7 @@ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. The + but does not free and reallocate the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source @@ -904,7 +969,9 @@ /* This function is the same as inflateReset, but it also permits changing the wrap and window size requests. The windowBits parameter is interpreted - the same as it is for inflateInit2. + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL), or if @@ -956,7 +1023,7 @@ location in the input stream can be determined from avail_in and data_type as noted in the description for the Z_BLOCK flush parameter for inflate. - inflateMark returns the value noted above or -1 << 16 if the provided + inflateMark returns the value noted above, or -65536 if the provided source stream state was inconsistent. */ @@ -1048,9 +1115,9 @@ This routine would normally be used in a utility that reads zip or gzip files and writes out uncompressed files. The utility would decode the header and process the trailer on its own, hence this routine expects only - the raw deflate stream to decompress. This is different from the normal - behavior of inflate(), which expects either a zlib or gzip header and - trailer around the deflate stream. + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. inflateBack() uses two subroutines supplied by the caller that are then called by inflateBack() for input and output. inflateBack() calls those @@ -1059,12 +1126,12 @@ parameters and return types are defined above in the in_func and out_func typedefs. inflateBack() will call in(in_desc, &buf) which should return the number of bytes of provided input, and a pointer to that input in buf. If - there is no input available, in() must return zero--buf is ignored in that - case--and inflateBack() will return a buffer error. inflateBack() will call - out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() - should return zero on success, or non-zero on failure. If out() returns - non-zero, inflateBack() will return with an error. Neither in() nor out() - are permitted to change the contents of the window provided to + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to inflateBackInit(), which is also the buffer that out() uses to write from. The length written by out() will be at most the window size. Any non-zero amount of input may be provided by in(). @@ -1092,7 +1159,7 @@ using strm->next_in which will be Z_NULL only if in() returned an error. If strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning non-zero. (in() will always be called before out(), so strm->next_in is - assured to be defined if out() returns non-zero.) Note that inflateBack() + assured to be defined if out() returns non-zero.) Note that inflateBack() cannot return Z_OK. */ @@ -1114,7 +1181,7 @@ 7.6: size of z_off_t Compiler, assembler, and debug options: - 8: DEBUG + 8: ZLIB_DEBUG 9: ASMV or ASMINF -- use ASM code 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention 11: 0 (reserved) @@ -1164,7 +1231,8 @@ the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output @@ -1180,7 +1248,7 @@ length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. + compressed data. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, @@ -1203,7 +1271,7 @@ uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen - is the actual size of the uncompressed buffer. + is the actual size of the uncompressed data. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output @@ -1212,6 +1280,14 @@ buffer with the uncompressed data up to that point. */ +ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen)); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + /* gzip file access functions */ /* @@ -1290,10 +1366,9 @@ default buffer size is 8192 bytes. This function must be called after gzopen() or gzdopen(), and before any other calls that read or write the file. The buffer memory allocation is always deferred to the first read or - write. Two buffers are allocated, either both of the specified size when - writing, or one of the specified size and the other twice that size when - reading. A larger buffer size of, for example, 64K or 128K bytes will - noticeably increase the speed of decompression (reading). + write. Three times that size in buffer space is allocated. A larger buffer + size of, for example, 64K or 128K bytes will noticeably increase the speed + of decompression (reading). The new buffer size also affects the maximum length for gzprintf(). @@ -1304,10 +1379,12 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. + of deflateInit2 for the meaning of these parameters. Previously provided + data is flushed before the parameter change. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. */ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); @@ -1335,7 +1412,35 @@ case. gzread returns the number of uncompressed bytes actually read, less than - len for end of file, or -1 for error. + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, + gzFile file)); +/* + Read up to nitems items of size size from file to buf, otherwise operating + as gzread() does. This duplicates the interface of stdio's fread(), with + size_t request and return types. If the library defines size_t, then + z_size_t is identical to size_t. If not, then z_size_t is an unsigned + integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevetheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, reseting and retrying on end-of-file, when size is not 1. */ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, @@ -1346,19 +1451,33 @@ error. */ +ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, + z_size_t nitems, gzFile file)); +/* + gzfwrite() writes nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. +*/ + ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); /* Converts, formats, and writes the arguments to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written, or 0 in case of error. The number of - uncompressed bytes written is limited to 8191, or one less than the buffer - size given to gzbuffer(). The caller should assure that this limit is not - exceeded. If it is exceeded, then gzprintf() will return an error (0) with - nothing written. In this case, there may also be a buffer overflow with - unpredictable consequences, which is possible only if zlib was compiled with - the insecure functions sprintf() or vsprintf() because the secure snprintf() - or vsnprintf() functions were not available. This can be determined using - zlibCompileFlags(). + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); @@ -1418,7 +1537,7 @@ If the flush parameter is Z_FINISH, the remaining data is written and the gzip stream is completed in the output. If gzwrite() is called again, a new gzip stream will be started in the output. gzread() is able to read such - concatented gzip streams. + concatenated gzip streams. gzflush should be called only when strictly necessary because it will degrade compression if called too often. @@ -1572,7 +1691,7 @@ return the updated checksum. If buf is Z_NULL, this function returns the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed much faster. Usage example: @@ -1585,6 +1704,12 @@ if (adler != original_adler) error(); */ +ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as adler32(), but with a size_t length. +*/ + /* ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, z_off_t len2)); @@ -1614,6 +1739,12 @@ if (crc != original_crc) error(); */ +ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as crc32(), but with a size_t length. +*/ + /* ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); @@ -1644,19 +1775,35 @@ unsigned char FAR *window, const char *version, int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ - (int)sizeof(z_stream)) -#define inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, (int)sizeof(z_stream)) +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif #ifndef Z_SOLO @@ -1676,10 +1823,10 @@ #ifdef Z_PREFIX_SET # undef z_gzgetc # define z_gzgetc(g) \ - ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) #else # define gzgetc(g) \ - ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) #endif /* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or @@ -1737,19 +1884,16 @@ #endif /* !Z_SOLO */ -/* hack for buggy compilers */ -#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; -#endif - /* undocumented functions */ ZEXTERN const char * ZEXPORT zError OF((int)); ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); -#if defined(_WIN32) && !defined(Z_SOLO) +#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, const char *mode)); #endif diff -Nru sudo-1.8.19p1/lib/zlib/zutil.c sudo-1.8.20p2/lib/zlib/zutil.c --- sudo-1.8.19p1/lib/zlib/zutil.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/zutil.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* zutil.c -- target dependent utility functions for the compression library - * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly. + * Copyright (C) 1995-2017 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -10,21 +10,18 @@ # include "gzguts.h" #endif -#ifndef NO_DUMMY_DECL -struct internal_state {int dummy;}; /* for buggy compilers */ -#endif - z_const char * const z_errmsg[10] = { -"need dictionary", /* Z_NEED_DICT 2 */ -"stream end", /* Z_STREAM_END 1 */ -"", /* Z_OK 0 */ -"file error", /* Z_ERRNO (-1) */ -"stream error", /* Z_STREAM_ERROR (-2) */ -"data error", /* Z_DATA_ERROR (-3) */ -"insufficient memory", /* Z_MEM_ERROR (-4) */ -"buffer error", /* Z_BUF_ERROR (-5) */ -"incompatible version",/* Z_VERSION_ERROR (-6) */ -""}; + (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */ + (z_const char *)"stream end", /* Z_STREAM_END 1 */ + (z_const char *)"", /* Z_OK 0 */ + (z_const char *)"file error", /* Z_ERRNO (-1) */ + (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */ + (z_const char *)"data error", /* Z_DATA_ERROR (-3) */ + (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */ + (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */ + (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */ + (z_const char *)"" +}; const char * ZEXPORT zlibVersion() @@ -61,7 +58,7 @@ case 8: flags += 2 << 6; break; default: flags += 3 << 6; } -#ifdef DEBUG +#ifdef ZLIB_DEBUG flags += 1 << 8; #endif #if defined(ASMV) || defined(ASMINF) @@ -115,8 +112,8 @@ return flags; } -#ifdef DEBUG - +#ifdef ZLIB_DEBUG +#include # ifndef verbose # define verbose 0 # endif @@ -219,9 +216,11 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) { - voidpf buf = opaque; /* just to make some compilers happy */ + voidpf buf; ulg bsize = (ulg)items*size; + (void)opaque; + /* If we allocate less than 65520 bytes, we assume that farmalloc * will return a usable pointer which doesn't have to be normalized. */ @@ -244,6 +243,9 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) { int n; + + (void)opaque; + if (*(ush*)&ptr != 0) { /* object < 64K */ farfree(ptr); return; @@ -259,7 +261,6 @@ next_ptr--; return; } - ptr = opaque; /* just to make some compilers happy */ Assert(0, "zcfree: ptr not found"); } @@ -278,13 +279,13 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) { - if (opaque) opaque = 0; /* to make compiler happy */ + (void)opaque; return _halloc((long)items, size); } void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) { - if (opaque) opaque = 0; /* to make compiler happy */ + (void)opaque; _hfree(ptr); } @@ -306,7 +307,7 @@ unsigned items; unsigned size; { - if (opaque) items += size - size; /* make compiler happy */ + (void)opaque; return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : (voidpf)calloc(items, size); } @@ -315,8 +316,8 @@ voidpf opaque; voidpf ptr; { + (void)opaque; free(ptr); - if (opaque) return; /* make compiler happy */ } #endif /* MY_ZCALLOC */ diff -Nru sudo-1.8.19p1/lib/zlib/zutil.h sudo-1.8.20p2/lib/zlib/zutil.h --- sudo-1.8.19p1/lib/zlib/zutil.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/lib/zlib/zutil.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2013 Jean-loup Gailly. + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -36,7 +36,9 @@ #ifndef local # define local static #endif -/* compile with -Dlocal if your debugger can't find static symbols */ +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ typedef unsigned char uch; typedef uch FAR uchf; @@ -98,28 +100,38 @@ #endif #ifdef AMIGA -# define OS_CODE 0x01 +# define OS_CODE 1 #endif #if defined(VAXC) || defined(VMS) -# define OS_CODE 0x02 +# define OS_CODE 2 # define F_OPEN(name, mode) \ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") #endif +#ifdef __370__ +# if __TARGET_LIB__ < 0x20000000 +# define OS_CODE 4 +# elif __TARGET_LIB__ < 0x40000000 +# define OS_CODE 11 +# else +# define OS_CODE 8 +# endif +#endif + #if defined(ATARI) || defined(atarist) -# define OS_CODE 0x05 +# define OS_CODE 5 #endif #ifdef OS2 -# define OS_CODE 0x06 +# define OS_CODE 6 # if defined(M_I86) && !defined(Z_SOLO) # include # endif #endif #if defined(MACOS) || defined(TARGET_OS_MAC) -# define OS_CODE 0x07 +# define OS_CODE 7 # ifndef Z_SOLO # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os # include /* for fdopen */ @@ -131,18 +143,24 @@ # endif #endif -#ifdef TOPS20 -# define OS_CODE 0x0a +#ifdef __acorn +# define OS_CODE 13 #endif -#ifdef WIN32 -# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ -# define OS_CODE 0x0b -# endif +#if defined(WIN32) && !defined(__CYGWIN__) +# define OS_CODE 10 +#endif + +#ifdef _BEOS_ +# define OS_CODE 16 +#endif + +#ifdef __TOS_OS400__ +# define OS_CODE 18 #endif -#ifdef __50SERIES /* Prime/PRIMOS */ -# define OS_CODE 0x0f +#ifdef __APPLE__ +# define OS_CODE 19 #endif #if defined(_BEOS_) || defined(RISCOS) @@ -177,7 +195,7 @@ /* common defaults */ #ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ +# define OS_CODE 3 /* assume Unix */ #endif #ifndef F_OPEN @@ -216,7 +234,7 @@ #endif /* Diagnostic functions */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG # include extern int ZLIB_INTERNAL z_verbose; extern void ZLIB_INTERNAL z_error OF((char *m)); diff -Nru sudo-1.8.19p1/Makefile.in sudo-1.8.20p2/Makefile.in --- sudo-1.8.19p1/Makefile.in 2016-12-18 13:52:09.000000000 +0000 +++ sudo-1.8.20p2/Makefile.in 2017-05-10 15:38:43.000000000 +0000 @@ -151,22 +151,18 @@ (cd lib/util && exec $(MAKE) $@) depend: siglist.c signame.c - @if test "$(srcdir)" != "."; then \ - echo "make depend only supported in the source directory"; \ - exit 1; \ - fi; \ - $(srcdir)/mkdep.pl $(srcdir)/lib/util/Makefile.in \ - $(srcdir)/plugins/sample/Makefile.in \ - $(srcdir)/plugins/group_file/Makefile.in \ - $(srcdir)/plugins/sudoers/Makefile.in \ - $(srcdir)/plugins/system_group/Makefile.in \ - $(srcdir)/src/Makefile.in $(srcdir)/lib/zlib/Makefile.in; \ - ./config.status --file $(srcdir)/lib/util/Makefile \ - --file $(srcdir)/plugins/sample/Makefile \ - --file $(srcdir)/plugins/group_file/Makefile \ - --file $(srcdir)/plugins/sudoers/Makefile \ - --file $(srcdir)/plugins/system_group/Makefile \ - --file $(srcdir)/src/Makefile --file $(srcdir)/lib/zlib/Makefile + $(top_srcdir)/mkdep.pl --builddir=`pwd` --srcdir=$(top_srcdir) \ + lib/util/Makefile.in lib/zlib/Makefile.in \ + plugins/group_file/Makefile.in plugins/sample/Makefile.in \ + plugins/sudoers/Makefile.in plugins/system_group/Makefile.in \ + src/Makefile.in && \ + $(top_builddir)/config.status --file $(top_builddir)/lib/util/Makefile \ + --file $(top_builddir)/plugins/sample/Makefile \ + --file $(top_builddir)/plugins/group_file/Makefile \ + --file $(top_builddir)/plugins/sudoers/Makefile \ + --file $(top_builddir)/plugins/system_group/Makefile \ + --file $(top_builddir)/src/Makefile \ + --file $(top_builddir)/lib/zlib/Makefile ChangeLog: if test -d $(srcdir)/.hg && cd $(srcdir); then \ @@ -284,7 +280,7 @@ fi check-dist: update-pot compile-po - @if [ -d .hg ]; then \ + @if test -d $(srcdir)/.hg && cd $(srcdir); then \ if test `hg stat -am | wc -l` -ne 0; then \ echo "Uncommitted changes" 1>&2; \ hg stat -am 1>&2; \ @@ -295,10 +291,11 @@ dist: check-dist force-dist force-dist: ChangeLog $(srcdir)/MANIFEST + cd $(top_srcdir) && \ pax -w -x ustar -s '/^/$(PACKAGE_TARNAME)-$(VERSION)\//' \ -f ../$(PACKAGE_TARNAME)-$(VERSION).tar \ - `$(SED) 's/[ ].*//' $(srcdir)/MANIFEST` - gzip -9f ../$(PACKAGE_TARNAME)-$(VERSION).tar + `$(SED) 's/[ ].*//' $(srcdir)/MANIFEST` && \ + gzip -9f ../$(PACKAGE_TARNAME)-$(VERSION).tar && \ ls -l ../$(PACKAGE_TARNAME)-$(VERSION).tar.gz package: $(srcdir)/sudo.pp diff -Nru sudo-1.8.19p1/MANIFEST sudo-1.8.20p2/MANIFEST --- sudo-1.8.19p1/MANIFEST 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/MANIFEST 2017-05-10 20:37:59.000000000 +0000 @@ -107,7 +107,9 @@ lib/util/mksigname.c lib/util/mksigname.h lib/util/mktemp.c +lib/util/nanosleep.c lib/util/parseln.c +lib/util/pipe2.c lib/util/progname.c lib/util/pw_dup.c lib/util/reallocarray.c @@ -152,6 +154,7 @@ lib/util/regress/sudo_parseln/test6.in lib/util/regress/sudo_parseln/test6.out.ok lib/util/regress/tailq/hltq_test.c +lib/util/regress/vsyslog/vsyslog_test.c lib/util/secure_path.c lib/util/setgroups.c lib/util/sha2.c @@ -258,13 +261,19 @@ plugins/sudoers/def_data.in plugins/sudoers/defaults.c plugins/sudoers/defaults.h +plugins/sudoers/digestname.c plugins/sudoers/editor.c plugins/sudoers/env.c +plugins/sudoers/filedigest.c +plugins/sudoers/filedigest_gcrypt.c +plugins/sudoers/filedigest_openssl.c plugins/sudoers/find_path.c plugins/sudoers/gc.c +plugins/sudoers/gentime.c plugins/sudoers/getdate.c plugins/sudoers/getdate.y plugins/sudoers/getspwuid.c +plugins/sudoers/gmtoff.c plugins/sudoers/goodpath.c plugins/sudoers/gram.c plugins/sudoers/gram.h @@ -372,6 +381,7 @@ plugins/sudoers/regress/parser/check_digest.c plugins/sudoers/regress/parser/check_digest.out.ok plugins/sudoers/regress/parser/check_fill.c +plugins/sudoers/regress/parser/check_gentime.c plugins/sudoers/regress/parser/check_hexchar.c plugins/sudoers/regress/sudoers/test1.in plugins/sudoers/regress/sudoers/test1.json.ok @@ -405,10 +415,30 @@ plugins/sudoers/regress/sudoers/test16.json.ok plugins/sudoers/regress/sudoers/test16.out.ok plugins/sudoers/regress/sudoers/test16.toke.ok +plugins/sudoers/regress/sudoers/test17.in +plugins/sudoers/regress/sudoers/test17.json.ok +plugins/sudoers/regress/sudoers/test17.out.ok +plugins/sudoers/regress/sudoers/test17.toke.ok +plugins/sudoers/regress/sudoers/test18.in +plugins/sudoers/regress/sudoers/test18.json.ok +plugins/sudoers/regress/sudoers/test18.out.ok +plugins/sudoers/regress/sudoers/test18.toke.ok +plugins/sudoers/regress/sudoers/test19.in +plugins/sudoers/regress/sudoers/test19.json.ok +plugins/sudoers/regress/sudoers/test19.out.ok +plugins/sudoers/regress/sudoers/test19.toke.ok plugins/sudoers/regress/sudoers/test2.in plugins/sudoers/regress/sudoers/test2.json.ok plugins/sudoers/regress/sudoers/test2.out.ok plugins/sudoers/regress/sudoers/test2.toke.ok +plugins/sudoers/regress/sudoers/test20.in +plugins/sudoers/regress/sudoers/test20.json.ok +plugins/sudoers/regress/sudoers/test20.out.ok +plugins/sudoers/regress/sudoers/test20.toke.ok +plugins/sudoers/regress/sudoers/test21.in +plugins/sudoers/regress/sudoers/test21.json.ok +plugins/sudoers/regress/sudoers/test21.out.ok +plugins/sudoers/regress/sudoers/test21.toke.ok plugins/sudoers/regress/sudoers/test3.in plugins/sudoers/regress/sudoers/test3.json.ok plugins/sudoers/regress/sudoers/test3.out.ok @@ -455,6 +485,8 @@ plugins/sudoers/regress/testsudoers/test7.sh plugins/sudoers/regress/visudo/test1.out.ok plugins/sudoers/regress/visudo/test1.sh +plugins/sudoers/regress/visudo/test10.out.ok +plugins/sudoers/regress/visudo/test10.sh plugins/sudoers/regress/visudo/test2.err.ok plugins/sudoers/regress/visudo/test2.out.ok plugins/sudoers/regress/visudo/test2.sh @@ -472,6 +504,8 @@ plugins/sudoers/regress/visudo/test8.err.ok plugins/sudoers/regress/visudo/test8.out.ok plugins/sudoers/regress/visudo/test8.sh +plugins/sudoers/regress/visudo/test9.out.ok +plugins/sudoers/regress/visudo/test9.sh plugins/sudoers/set_perms.c plugins/sudoers/solaris_audit.c plugins/sudoers/solaris_audit.h @@ -489,6 +523,7 @@ plugins/sudoers/sudoers_version.h plugins/sudoers/sudoreplay.c plugins/sudoers/testsudoers.c +plugins/sudoers/timeout.c plugins/sudoers/timestamp.c plugins/sudoers/timestr.c plugins/sudoers/toke.c @@ -568,6 +603,8 @@ src/env_hooks.c src/exec.c src/exec_common.c +src/exec_monitor.c +src/exec_nopty.c src/exec_pty.c src/get_pty.c src/hooks.c @@ -590,6 +627,7 @@ src/sudo_noexec.c src/sudo_plugin_int.h src/sudo_usage.h.in +src/tcsetpgrp_nobg.c src/tgetpass.c src/ttyname.c src/utmp.c diff -Nru sudo-1.8.19p1/mkdep.pl sudo-1.8.20p2/mkdep.pl --- sudo-1.8.19p1/mkdep.pl 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/mkdep.pl 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env perl # -# Copyright (c) 2011-2014 Todd C. Miller +# Copyright (c) 2011-2017 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 @@ -19,21 +19,33 @@ use Fcntl; use warnings; -die "usage: $0 Makefile ...\n" unless $#ARGV >= 0; +die "usage: $0 [--builddir=dir] [--srcdir=dir] Makefile.in ...\n" unless $#ARGV >= 0; my @incpaths; my %dir_vars; my %implicit; my %generated; +my $top_builddir = "."; +my $top_srcdir; -# Read in MANIFEST fail if present -my %manifest; -if (open(MANIFEST, ") { - chomp; - next unless /([^\/]+\.[cly])$/; - $manifest{$1} = $_; +# Check for srcdir and/or builddir, if present +while ($ARGV[0] =~ /^--(src|build)dir=(.*)/) { + if ($1 eq 'src') { + $top_srcdir = $2; + } else { + $top_builddir = $2; } + shift @ARGV; +} +chdir($top_srcdir) if defined($top_srcdir); + +# Read in MANIFEST or fail if not present +my %manifest; +die "unable to open MANIFEST: $!\n" unless open(MANIFEST, ") { + chomp; + next unless /([^\/]+\.[cly])$/; + $manifest{$1} = $_; } foreach (@ARGV) { @@ -70,7 +82,8 @@ $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo solaris_audit.lo sssd.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 getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; - $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo strtonum.lo utimens.lo vsyslog.lo:; + $makefile =~ s:\@FILEDIGEST\@:filedigest.lo filedigest_openssl.lo filedigest_gcrypt.lo:; + $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo strtonum.lo utimens.lo vsyslog.lo pipe2.lo:; # Parse OBJS lines my %objs; @@ -100,6 +113,7 @@ $dir_vars{'srcdir'} = $1 || '.'; $dir_vars{'devdir'} = $dir_vars{'srcdir'}; $dir_vars{'authdir'} = $dir_vars{'srcdir'} . "/auth"; + $dir_vars{'builddir'} = $top_builddir . "/" . $dir_vars{'srcdir'}; $dir_vars{'top_srcdir'} = '.'; #$dir_vars{'top_builddir'} = '.'; $dir_vars{'incdir'} = 'include'; @@ -183,8 +197,8 @@ my ($deps, $code, %headers); if ($src !~ /\//) { - # XXX - want build dir not src dir - $src = "$dir_vars{'srcdir'}/$src"; + # generated file, local to build dir + $src = "$dir_vars{'builddir'}/$src"; } # resolve $(srcdir) etc. diff -Nru sudo-1.8.19p1/NEWS sudo-1.8.20p2/NEWS --- sudo-1.8.19p1/NEWS 2016-12-20 17:28:49.000000000 +0000 +++ sudo-1.8.20p2/NEWS 2017-05-31 15:14:31.000000000 +0000 @@ -1,3 +1,115 @@ +What's new in Sudo 1.8.20p2 + + * Fixed a bug parsing /proc/pid/stat on Linux when the process + name contains newlines. This is not exploitable due to the /dev + traversal changes in sudo 1.8.20p1. + +What's new in Sudo 1.8.20p1 + + * Fixed "make check" when using OpenSSL or GNU crypt. + Bug #787. + + * Fixed CVE-2017-1000367, a bug parsing /proc/pid/stat on Linux + when the process name contains spaces. Since the user has control + over the command name, this could potentially be used by a user + with sudo access to overwrite an arbitrary file on systems with + SELinux enabled. Also stop performing a breadth-first traversal + of /dev when looking for the device; only a hard-coded list of + directories are checked, + +What's new in Sudo 1.8.20 + + * Added support for SASL_MECH in ldap.conf. Bug #764 + + * Added support for digest matching when the command is a glob-style + pattern or a directory. Previously, only explicit path matches + supported digest checks. + + * New "fdexec" Defaults option to control whether a command + is executed by path or by open file descriptor. + + * The embedded copy of zlib has been upgraded to version 1.2.11. + + * Fixed a bug that prevented sudoers include files with a relative + path starting with the letter 'i' from being opened. Bug #776. + + * Added support for command timeouts in sudoers. The command will + be terminated if the timeout expires. + + * The SELinux role and type are now displayed in the "sudo -l" + output for the LDAP and SSSD backends, just as they are in the + sudoers backend. + + * A new command line option, -T, can be used to specify a command + timeout as long as the user-specified timeout is not longer than + the timeout specified in sudoers. This option may only be + used when the "user_command_timeouts" flag is enabled in sudoers. + + * Added NOTBEFORE and NOTAFTER command options to the sudoers + backend similar to what is already available in the LDAP backend. + + * Sudo can now optionally use the SHA2 functions in OpenSSL or GNU + crypt instead of the SHA2 implementation bundled with sudo. + + * Fixed a compilation error on systems without the stdbool.h header + file. Bug #778. + + * Fixed a compilation error in the standalone Kerberos V authentication + module. Bug #777. + + * Added the iolog_flush flag to sudoers which causes I/O log data + to be written immediately to disk instead of being buffered. + + * I/O log files are now created with group ID 0 by default unless + the "iolog_user" or "iolog_group" options are set in sudoers. + + * It is now possible to store I/O log files on an NFS-mounted + file system where uid 0 is remapped to an unprivileged user. + The "iolog_user" option must be set to a non-root user and the + top-level I/O log directory must exist and be owned by that user. + + * Added the restricted_env_file setting to sudoers which is similar + to env_file but its contents are subject to the same restrictions + as variables in the invoking user's environment. + + * Fixed a use after free bug in the SSSD backend when the fqdn + sudoOption is enabled and no hostname value is present in + /etc/sssd/sssd.conf. + + * Fixed a typo that resulted in a compilation error on systems + where the killpg() function is not found by configure. + + * Fixed a compilation error with the included version of zlib + when sudo was built outside the source tree. + + * Fixed the exit value of sudo when the command is terminated by + a signal other than SIGINT. This was broken in sudo 1.8.15 by + the fix for Bug #722. Bug #784. + + * Fixed a regression introduced in sudo 1.8.18 where the "lecture" + option could not be used in a positive boolean context, only + a negative one. + + * Fixed an issue where sudo would consume stdin if it was not + connected to a tty even if log_input is not enabled in sudoers. + Bug #786. + + * Clarify in the sudoers manual that the #includedir directive + diverts control to the files in the specified directory and, + when parsing of those files is complete, returns control to the + original file. Bug #775. + +What's new in Sudo 1.8.19p2 + + * Fixed a crash in visudo introduced in sudo 1.8.9 when an IP address + or network is used in a host-based Defaults entry. Bug #766 + + * Added a missing check for the ignore_iolog_errors flag when + the sudoers plugin generates the I/O log file path name. + + * Fixed a typo in sudo's vsyslog() replacement that resulted in + garbage being logged to syslog. + What's new in Sudo 1.8.19p1 * Fixed a bug introduced in sudo 1.8.19 that resulted in the wrong @@ -11,8 +123,8 @@ * Sudo has been run against PVS-Studio and any issues that were not false positives have been addressed. - * I/O log files are now created same group ID as the parent directory - and not the invoking user's group ID. + * I/O log files are now created with the same group ID as the + parent directory and not the invoking user's group ID. * I/O log permissions and ownership are now configurable via the "iolog_mode", "iolog_user" and "iolog_group" sudoers Defaults @@ -1118,7 +1230,7 @@ * Allow sudo to be build with sss support without also including ldap support. - * Fix running commands that need the terminal in the background + * Fixed running commands that need the terminal in the background when I/O logging is enabled. E.g. "sudo vi &". When the command is foregrounded, it will now resume properly. diff -Nru sudo-1.8.19p1/plugins/sudoers/auth/kerb5.c sudo-1.8.20p2/plugins/sudoers/auth/kerb5.c --- sudo-1.8.19p1/plugins/sudoers/auth/kerb5.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/auth/kerb5.c 2017-05-10 15:38:43.000000000 +0000 @@ -197,7 +197,7 @@ } #else int -sudo_krb5_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_krb5_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { krb5_context sudo_context; krb5_principal princ; diff -Nru sudo-1.8.19p1/plugins/sudoers/defaults.c sudo-1.8.20p2/plugins/sudoers/defaults.c --- sudo-1.8.19p1/plugins/sudoers/defaults.c 2016-12-20 17:28:49.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/defaults.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2005, 2007-2016 + * Copyright (c) 1999-2005, 2007-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -79,6 +79,7 @@ }; static struct early_default early_defaults[] = { + { I_IGNORE_UNKNOWN_DEFAULTS }, #ifdef FQDN { I_FQDN, true }, #else @@ -100,6 +101,7 @@ static int store_str(const char *str, union sudo_defs_val *sd_un); static bool store_syslogfac(const char *str, union sudo_defs_val *sd_un); static bool store_syslogpri(const char *str, union sudo_defs_val *sd_un); +static bool store_timeout(const char *str, union sudo_defs_val *sd_un); static bool store_tuple(const char *str, union sudo_defs_val *sd_un, struct def_values *tuple_vals); static bool store_uint(const char *str, union sudo_defs_val *sd_un); static bool store_float(const char *str, union sudo_defs_val *sd_un); @@ -177,6 +179,13 @@ } } break; + case T_TIMEOUT: + if (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_TUPLE: for (def = cur->values; def->sval; def++) { if (cur->sd_un.tuple == def->nval) { @@ -206,7 +215,7 @@ if (strcmp(name, sudo_defs_table[i].name) == 0) debug_return_int(i); } - if (!quiet) { + if (!quiet && !def_ignore_unknown_defaults) { if (lineno > 0) { sudo_warnx(U_("%s:%d unknown defaults entry \"%s\""), file, lineno, name); @@ -229,19 +238,37 @@ int rc; debug_decl(parse_default_entry, SUDOERS_DEBUG_DEFAULTS) - if (val == NULL && !ISSET(def->type, T_FLAG)) { - /* Check for bogus boolean usage or missing value if non-boolean. */ - if (!ISSET(def->type, T_BOOL) || op != false) { - if (!quiet) { - if (lineno > 0) { - sudo_warnx(U_("%s:%d no value specified for \"%s\""), - file, lineno, def->name); - } else { - sudo_warnx(U_("%s: no value specified for \"%s\""), - file, def->name); + /* + * If no value specified, the boolean flag must be set for non-flags. + * Only flags and tuples support boolean "true". + */ + if (val == NULL) { + switch (def->type & T_MASK) { + case T_FLAG: + break; + case T_TUPLE: + if (ISSET(def->type, T_BOOL)) + break; + /* FALLTHROUGH */ + case T_LOGFAC: + if (op == true) { + /* Use default syslog facility if none specified. */ + val = LOGFAC; + } + break; + default: + if (!ISSET(def->type, T_BOOL) || op != false) { + if (!quiet) { + if (lineno > 0) { + sudo_warnx(U_("%s:%d no value specified for \"%s\""), + file, lineno, def->name); + } else { + sudo_warnx(U_("%s: no value specified for \"%s\""), + file, def->name); + } } + debug_return_bool(false); } - debug_return_bool(false); } } @@ -300,6 +327,9 @@ case T_LIST: rc = store_list(val, sd_un, op); break; + case T_TIMEOUT: + rc = store_timeout(val, sd_un); + break; case T_TUPLE: rc = store_tuple(val, sd_un, def->values); break; @@ -533,6 +563,7 @@ def_netgroup_tuple = false; def_sudoedit_checkdir = true; def_iolog_mode = S_IRUSR|S_IWUSR; + def_fdexec = digest_only; /* Syslog options need special care since they both strings and ints */ #if (LOGGING & SLOG_SYSLOG) @@ -983,6 +1014,25 @@ } debug_return_bool(true); } + +static bool +store_timeout(const char *str, union sudo_defs_val *sd_un) +{ + debug_decl(store_mode, SUDOERS_DEBUG_DEFAULTS) + + if (str == NULL) { + sd_un->ival = 0; + } else { + int seconds = parse_timeout(str); + if (seconds == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "%s", str); + debug_return_bool(false); + } + sd_un->ival = seconds; + } + debug_return_bool(true); +} static bool list_op(const char *str, size_t len, union sudo_defs_val *sd_un, diff -Nru sudo-1.8.19p1/plugins/sudoers/defaults.h sudo-1.8.20p2/plugins/sudoers/defaults.h --- sudo-1.8.19p1/plugins/sudoers/defaults.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/defaults.h 2017-05-10 15:38:43.000000000 +0000 @@ -99,6 +99,8 @@ #define T_TUPLE 0x009 #undef T_FLOAT #define T_FLOAT 0x010 +#undef T_TIMEOUT +#define T_TIMEOUT 0x020 #undef T_MASK #define T_MASK 0x0FF #undef T_BOOL diff -Nru sudo-1.8.19p1/plugins/sudoers/def_data.c sudo-1.8.20p2/plugins/sudoers/def_data.c --- sudo-1.8.19p1/plugins/sudoers/def_data.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/def_data.c 2017-05-10 15:38:43.000000000 +0000 @@ -21,6 +21,13 @@ { NULL, 0 }, }; +static struct def_values def_data_fdexec[] = { + { "never", never }, + { "digest_only", digest_only }, + { "always", always }, + { NULL, 0 }, +}; + struct sudo_defs_types sudo_defs_table[] = { { "syslog", T_LOGFAC|T_BOOL, @@ -295,6 +302,10 @@ N_("Path to the sudo-specific environment file: %s"), NULL, }, { + "restricted_env_file", T_STR|T_PATH|T_BOOL, + N_("Path to the restricted sudo-specific environment file: %s"), + NULL, + }, { "sudoers_locale", T_STR, N_("Locale to use while parsing sudoers: %s"), NULL, @@ -420,7 +431,7 @@ NULL, }, { "syslog_maxlen", T_UINT, - N_("Log entries larger than this value will be split into multiple syslog messages"), + N_("Log entries larger than this value will be split into multiple syslog messages: %u"), NULL, }, { "iolog_user", T_STR|T_BOOL, @@ -435,6 +446,26 @@ N_("File mode to use for the I/O log files: 0%o"), NULL, }, { + "fdexec", T_TUPLE|T_BOOL, + N_("Execute commands by file descriptor instead of by path: %s"), + def_data_fdexec, + }, { + "ignore_unknown_defaults", T_FLAG, + N_("Ignore unknown Defaults entries in sudoers instead of producing a warning"), + NULL, + }, { + "command_timeout", T_TIMEOUT|T_BOOL, + N_("Time in seconds after which the command will be terminated: %u"), + NULL, + }, { + "user_command_timeouts", T_FLAG, + N_("Allow the user to specify a timeout on the command line"), + NULL, + }, { + "iolog_flush", T_FLAG, + N_("Flush I/O log data to disk immediately instead of buffering it"), + NULL, + }, { NULL, 0, NULL } }; diff -Nru sudo-1.8.19p1/plugins/sudoers/def_data.h sudo-1.8.20p2/plugins/sudoers/def_data.h --- sudo-1.8.19p1/plugins/sudoers/def_data.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/def_data.h 2017-05-10 15:38:43.000000000 +0000 @@ -134,81 +134,94 @@ #define def_type (sudo_defs_table[I_TYPE].sd_un.str) #define I_ENV_FILE 67 #define def_env_file (sudo_defs_table[I_ENV_FILE].sd_un.str) -#define I_SUDOERS_LOCALE 68 +#define I_RESTRICTED_ENV_FILE 68 +#define def_restricted_env_file (sudo_defs_table[I_RESTRICTED_ENV_FILE].sd_un.str) +#define I_SUDOERS_LOCALE 69 #define def_sudoers_locale (sudo_defs_table[I_SUDOERS_LOCALE].sd_un.str) -#define I_VISIBLEPW 69 +#define I_VISIBLEPW 70 #define def_visiblepw (sudo_defs_table[I_VISIBLEPW].sd_un.flag) -#define I_PWFEEDBACK 70 +#define I_PWFEEDBACK 71 #define def_pwfeedback (sudo_defs_table[I_PWFEEDBACK].sd_un.flag) -#define I_FAST_GLOB 71 +#define I_FAST_GLOB 72 #define def_fast_glob (sudo_defs_table[I_FAST_GLOB].sd_un.flag) -#define I_UMASK_OVERRIDE 72 +#define I_UMASK_OVERRIDE 73 #define def_umask_override (sudo_defs_table[I_UMASK_OVERRIDE].sd_un.flag) -#define I_LOG_INPUT 73 +#define I_LOG_INPUT 74 #define def_log_input (sudo_defs_table[I_LOG_INPUT].sd_un.flag) -#define I_LOG_OUTPUT 74 +#define I_LOG_OUTPUT 75 #define def_log_output (sudo_defs_table[I_LOG_OUTPUT].sd_un.flag) -#define I_COMPRESS_IO 75 +#define I_COMPRESS_IO 76 #define def_compress_io (sudo_defs_table[I_COMPRESS_IO].sd_un.flag) -#define I_USE_PTY 76 +#define I_USE_PTY 77 #define def_use_pty (sudo_defs_table[I_USE_PTY].sd_un.flag) -#define I_GROUP_PLUGIN 77 +#define I_GROUP_PLUGIN 78 #define def_group_plugin (sudo_defs_table[I_GROUP_PLUGIN].sd_un.str) -#define I_IOLOG_DIR 78 +#define I_IOLOG_DIR 79 #define def_iolog_dir (sudo_defs_table[I_IOLOG_DIR].sd_un.str) -#define I_IOLOG_FILE 79 +#define I_IOLOG_FILE 80 #define def_iolog_file (sudo_defs_table[I_IOLOG_FILE].sd_un.str) -#define I_SET_UTMP 80 +#define I_SET_UTMP 81 #define def_set_utmp (sudo_defs_table[I_SET_UTMP].sd_un.flag) -#define I_UTMP_RUNAS 81 +#define I_UTMP_RUNAS 82 #define def_utmp_runas (sudo_defs_table[I_UTMP_RUNAS].sd_un.flag) -#define I_PRIVS 82 +#define I_PRIVS 83 #define def_privs (sudo_defs_table[I_PRIVS].sd_un.str) -#define I_LIMITPRIVS 83 +#define I_LIMITPRIVS 84 #define def_limitprivs (sudo_defs_table[I_LIMITPRIVS].sd_un.str) -#define I_EXEC_BACKGROUND 84 +#define I_EXEC_BACKGROUND 85 #define def_exec_background (sudo_defs_table[I_EXEC_BACKGROUND].sd_un.flag) -#define I_PAM_SERVICE 85 +#define I_PAM_SERVICE 86 #define def_pam_service (sudo_defs_table[I_PAM_SERVICE].sd_un.str) -#define I_PAM_LOGIN_SERVICE 86 +#define I_PAM_LOGIN_SERVICE 87 #define def_pam_login_service (sudo_defs_table[I_PAM_LOGIN_SERVICE].sd_un.str) -#define I_PAM_SETCRED 87 +#define I_PAM_SETCRED 88 #define def_pam_setcred (sudo_defs_table[I_PAM_SETCRED].sd_un.flag) -#define I_PAM_SESSION 88 +#define I_PAM_SESSION 89 #define def_pam_session (sudo_defs_table[I_PAM_SESSION].sd_un.flag) -#define I_MAXSEQ 89 +#define I_MAXSEQ 90 #define def_maxseq (sudo_defs_table[I_MAXSEQ].sd_un.uival) -#define I_USE_NETGROUPS 90 +#define I_USE_NETGROUPS 91 #define def_use_netgroups (sudo_defs_table[I_USE_NETGROUPS].sd_un.flag) -#define I_SUDOEDIT_CHECKDIR 91 +#define I_SUDOEDIT_CHECKDIR 92 #define def_sudoedit_checkdir (sudo_defs_table[I_SUDOEDIT_CHECKDIR].sd_un.flag) -#define I_SUDOEDIT_FOLLOW 92 +#define I_SUDOEDIT_FOLLOW 93 #define def_sudoedit_follow (sudo_defs_table[I_SUDOEDIT_FOLLOW].sd_un.flag) -#define I_ALWAYS_QUERY_GROUP_PLUGIN 93 +#define I_ALWAYS_QUERY_GROUP_PLUGIN 94 #define def_always_query_group_plugin (sudo_defs_table[I_ALWAYS_QUERY_GROUP_PLUGIN].sd_un.flag) -#define I_NETGROUP_TUPLE 94 +#define I_NETGROUP_TUPLE 95 #define def_netgroup_tuple (sudo_defs_table[I_NETGROUP_TUPLE].sd_un.flag) -#define I_IGNORE_AUDIT_ERRORS 95 +#define I_IGNORE_AUDIT_ERRORS 96 #define def_ignore_audit_errors (sudo_defs_table[I_IGNORE_AUDIT_ERRORS].sd_un.flag) -#define I_IGNORE_IOLOG_ERRORS 96 +#define I_IGNORE_IOLOG_ERRORS 97 #define def_ignore_iolog_errors (sudo_defs_table[I_IGNORE_IOLOG_ERRORS].sd_un.flag) -#define I_IGNORE_LOGFILE_ERRORS 97 +#define I_IGNORE_LOGFILE_ERRORS 98 #define def_ignore_logfile_errors (sudo_defs_table[I_IGNORE_LOGFILE_ERRORS].sd_un.flag) -#define I_MATCH_GROUP_BY_GID 98 +#define I_MATCH_GROUP_BY_GID 99 #define def_match_group_by_gid (sudo_defs_table[I_MATCH_GROUP_BY_GID].sd_un.flag) -#define I_SYSLOG_MAXLEN 99 +#define I_SYSLOG_MAXLEN 100 #define def_syslog_maxlen (sudo_defs_table[I_SYSLOG_MAXLEN].sd_un.uival) -#define I_IOLOG_USER 100 +#define I_IOLOG_USER 101 #define def_iolog_user (sudo_defs_table[I_IOLOG_USER].sd_un.str) -#define I_IOLOG_GROUP 101 +#define I_IOLOG_GROUP 102 #define def_iolog_group (sudo_defs_table[I_IOLOG_GROUP].sd_un.str) -#define I_IOLOG_MODE 102 +#define I_IOLOG_MODE 103 #define def_iolog_mode (sudo_defs_table[I_IOLOG_MODE].sd_un.mode) +#define I_FDEXEC 104 +#define def_fdexec (sudo_defs_table[I_FDEXEC].sd_un.tuple) +#define I_IGNORE_UNKNOWN_DEFAULTS 105 +#define def_ignore_unknown_defaults (sudo_defs_table[I_IGNORE_UNKNOWN_DEFAULTS].sd_un.flag) +#define I_COMMAND_TIMEOUT 106 +#define def_command_timeout (sudo_defs_table[I_COMMAND_TIMEOUT].sd_un.ival) +#define I_USER_COMMAND_TIMEOUTS 107 +#define def_user_command_timeouts (sudo_defs_table[I_USER_COMMAND_TIMEOUTS].sd_un.flag) +#define I_IOLOG_FLUSH 108 +#define def_iolog_flush (sudo_defs_table[I_IOLOG_FLUSH].sd_un.flag) enum def_tuple { never, once, always, any, - all + all, + digest_only }; diff -Nru sudo-1.8.19p1/plugins/sudoers/def_data.in sudo-1.8.20p2/plugins/sudoers/def_data.in --- sudo-1.8.19p1/plugins/sudoers/def_data.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/def_data.in 2017-05-10 15:38:43.000000000 +0000 @@ -217,6 +217,9 @@ env_file T_STR|T_PATH|T_BOOL "Path to the sudo-specific environment file: %s" +restricted_env_file + T_STR|T_PATH|T_BOOL + "Path to the restricted sudo-specific environment file: %s" sudoers_locale T_STR "Locale to use while parsing sudoers: %s" @@ -312,7 +315,7 @@ "Resolve groups in sudoers and match on the group ID, not the name" syslog_maxlen T_UINT - "Log entries larger than this value will be split into multiple syslog messages" + "Log entries larger than this value will be split into multiple syslog messages: %u" iolog_user T_STR|T_BOOL "User that will own the I/O log files: %s" @@ -322,3 +325,19 @@ iolog_mode T_MODE "File mode to use for the I/O log files: 0%o" +fdexec + T_TUPLE|T_BOOL + "Execute commands by file descriptor instead of by path: %s" + never digest_only always +ignore_unknown_defaults + T_FLAG + "Ignore unknown Defaults entries in sudoers instead of producing a warning" +command_timeout + T_TIMEOUT|T_BOOL + "Time in seconds after which the command will be terminated: %u" +user_command_timeouts + T_FLAG + "Allow the user to specify a timeout on the command line" +iolog_flush + T_FLAG + "Flush I/O log data to disk immediately instead of buffering it" diff -Nru sudo-1.8.19p1/plugins/sudoers/digestname.c sudo-1.8.20p2/plugins/sudoers/digestname.c --- sudo-1.8.19p1/plugins/sudoers/digestname.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/digestname.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2017 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 + +#include "sudo_compat.h" +#include "sudoers_debug.h" +#include "parse.h" + +const char * +digest_type_to_name(int digest_type) +{ + const char *digest_name; + debug_decl(digest_type_to_name, SUDOERS_DEBUG_UTIL) + + switch (digest_type) { + case SUDO_DIGEST_SHA224: + digest_name = "sha224"; + break; + case SUDO_DIGEST_SHA256: + digest_name = "sha256"; + break; + case SUDO_DIGEST_SHA384: + digest_name = "sha384"; + break; + case SUDO_DIGEST_SHA512: + digest_name = "sha512"; + break; + default: + digest_name = "unknown digest"; + break; + } + debug_return_const_str(digest_name); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/env.c sudo-1.8.20p2/plugins/sudoers/env.c --- sudo-1.8.19p1/plugins/sudoers/env.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/env.c 2017-05-10 20:37:59.000000000 +0000 @@ -497,6 +497,7 @@ char **cur = ep; while ((*cur = *(cur + 1)) != NULL) cur++; + env.env_len--; /* Keep going, could be multiple instances of the var. */ } else { ep++; @@ -899,7 +900,7 @@ #endif /* HAVE_LOGIN_CAP_H */ #if defined(_AIX) || (defined(__linux__) && !defined(HAVE_PAM)) /* Insert system-wide environment variables. */ - read_env_file(_PATH_ENVIRONMENT, true); + read_env_file(_PATH_ENVIRONMENT, true, false); #endif for (ep = env.envp; *ep; ep++) env_update_didvar(*ep, &didvar); @@ -1170,7 +1171,7 @@ * character are skipped. */ bool -read_env_file(const char *path, int overwrite) +read_env_file(const char *path, bool overwrite, bool restricted) { FILE *fp; bool ret = true; @@ -1205,6 +1206,15 @@ var_len = (size_t)(val - var); val_len = strlen(++val); + /* + * If the env file is restricted, apply env_check and env_keep + * when env_reset is set or env_delete when it is not. + */ + if (restricted) { + if (def_env_reset ? !env_should_keep(var) : env_should_delete(var)) + continue; + } + /* Strip leading and trailing single/double quotes */ if ((val[0] == '\'' || val[0] == '\"') && val[0] == val[val_len - 1]) { val[val_len - 1] = '\0'; diff -Nru sudo-1.8.19p1/plugins/sudoers/filedigest.c sudo-1.8.20p2/plugins/sudoers/filedigest.c --- sudo-1.8.19p1/plugins/sudoers/filedigest.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/filedigest.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2013-2017 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 +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#if defined(HAVE_STDINT_H) +# include +#elif defined(HAVE_INTTYPES_H) +# include +#endif +#include +#include +#include + +#include "sudoers.h" +#include "parse.h" + +#ifdef HAVE_SHA224UPDATE +# include +#else +# include "compat/sha2.h" +#endif + +static struct digest_function { + const unsigned int digest_len; + void (*init)(SHA2_CTX *); +#ifdef SHA2_VOID_PTR + void (*update)(SHA2_CTX *, const void *, size_t); + void (*final)(void *, SHA2_CTX *); +#else + void (*update)(SHA2_CTX *, const unsigned char *, size_t); + void (*final)(unsigned char *, SHA2_CTX *); +#endif +} digest_functions[] = { + { + SHA224_DIGEST_LENGTH, + SHA224Init, + SHA224Update, + SHA224Final + }, { + SHA256_DIGEST_LENGTH, + SHA256Init, + SHA256Update, + SHA256Final + }, { + SHA384_DIGEST_LENGTH, + SHA384Init, + SHA384Update, + SHA384Final + }, { + SHA512_DIGEST_LENGTH, + SHA512Init, + SHA512Update, + SHA512Final + }, { + 0 + } +}; + +unsigned char * +sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_len) +{ + struct digest_function *func = NULL; + unsigned char *file_digest = NULL; + unsigned char buf[32 * 1024]; + size_t nread; + SHA2_CTX ctx; + int i, fd2; + FILE *fp = NULL; + debug_decl(sudo_filedigest, SUDOERS_DEBUG_UTIL) + + for (i = 0; digest_functions[i].digest_len != 0; i++) { + if (digest_type == i) { + func = &digest_functions[i]; + break; + } + } + if (func == NULL) { + sudo_warnx(U_("unsupported digest type %d for %s"), digest_type, file); + goto bad; + } + + if ((fd2 = dup(fd)) == -1) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to dup %s: %s", + file, strerror(errno)); + goto bad; + } + if ((fp = fdopen(fd2, "r")) == NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to fdopen %s: %s", + file, strerror(errno)); + close(fd2); + goto bad; + } + if ((file_digest = malloc(func->digest_len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } + + func->init(&ctx); + while ((nread = fread(buf, 1, sizeof(buf), fp)) != 0) { + func->update(&ctx, buf, nread); + } + if (ferror(fp)) { + sudo_warnx(U_("%s: read error"), file); + goto bad; + } + func->final(file_digest, &ctx); + fclose(fp); + + *digest_len = func->digest_len; + debug_return_ptr(file_digest); +bad: + free(file_digest); + if (fp != NULL) + fclose(fp); + debug_return_ptr(NULL); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/filedigest_gcrypt.c sudo-1.8.20p2/plugins/sudoers/filedigest_gcrypt.c --- sudo-1.8.19p1/plugins/sudoers/filedigest_gcrypt.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/filedigest_gcrypt.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2017 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 +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include +#include + +#include + +#include "sudoers.h" +#include "parse.h" + +unsigned char * +sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_lenp) +{ + unsigned char *file_digest = NULL; + unsigned char buf[32 * 1024]; + int fd2, gcry_digest_type; + size_t digest_len, nread; + gcry_error_t error; + gcry_md_hd_t ctx; + FILE *fp = NULL; + debug_decl(sudo_filedigest, SUDOERS_DEBUG_UTIL) + + switch (digest_type) { + case SUDO_DIGEST_SHA224: + gcry_digest_type = GCRY_MD_SHA224; + break; + case SUDO_DIGEST_SHA256: + gcry_digest_type = GCRY_MD_SHA256; + break; + case SUDO_DIGEST_SHA384: + gcry_digest_type = GCRY_MD_SHA384; + break; + case SUDO_DIGEST_SHA512: + gcry_digest_type = GCRY_MD_SHA512; + break; + default: + sudo_warnx(U_("unsupported digest type %d for %s"), digest_type, file); + debug_return_ptr(NULL); + } + + error = gcry_md_open(&ctx, gcry_digest_type, 0); + if (error != 0) { + sudo_warnx(U_("%s: %s"), digest_type_to_name(digest_type), + gcry_strerror(error)); + goto bad; + } + digest_len = gcry_md_get_algo_dlen(gcry_digest_type); + + if ((fd2 = dup(fd)) == -1) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to dup %s: %s", + file, strerror(errno)); + goto bad; + } + if ((fp = fdopen(fd2, "r")) == NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to fdopen %s: %s", + file, strerror(errno)); + close(fd2); + goto bad; + } + if ((file_digest = malloc(digest_len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } + + while ((nread = fread(buf, 1, sizeof(buf), fp)) != 0) { + gcry_md_write(ctx, buf, nread); + } + if (ferror(fp)) { + sudo_warnx(U_("%s: read error"), file); + goto bad; + } + gcry_md_final(ctx); + fclose(fp); + + memcpy(file_digest, gcry_md_read(ctx, 0), digest_len); + *digest_lenp = digest_len; + debug_return_ptr(file_digest); +bad: + free(file_digest); + gcry_md_close(ctx); + if (fp != NULL) + fclose(fp); + debug_return_ptr(NULL); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/filedigest_openssl.c sudo-1.8.20p2/plugins/sudoers/filedigest_openssl.c --- sudo-1.8.19p1/plugins/sudoers/filedigest_openssl.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/filedigest_openssl.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2013-2017 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 +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include +#include + +#include + +#include "sudoers.h" +#include "parse.h" + +union ANY_CTX { + SHA256_CTX sha256; + SHA512_CTX sha512; +}; + +static struct digest_function { + const unsigned int digest_len; + int (*init)(union ANY_CTX *); + int (*update)(union ANY_CTX *, const void *, size_t); + int (*final)(unsigned char *, union ANY_CTX *); +} digest_functions[] = { + { + SHA224_DIGEST_LENGTH, + (int (*)(union ANY_CTX *))SHA224_Init, + (int (*)(union ANY_CTX *, const void *, size_t))SHA224_Update, + (int (*)(unsigned char *, union ANY_CTX *))SHA224_Final + }, { + SHA256_DIGEST_LENGTH, + (int (*)(union ANY_CTX *))SHA256_Init, + (int (*)(union ANY_CTX *, const void *, size_t))SHA256_Update, + (int (*)(unsigned char *, union ANY_CTX *))SHA256_Final + }, { + SHA384_DIGEST_LENGTH, + (int (*)(union ANY_CTX *))SHA384_Init, + (int (*)(union ANY_CTX *, const void *, size_t))SHA384_Update, + (int (*)(unsigned char *, union ANY_CTX *))SHA384_Final + }, { + SHA512_DIGEST_LENGTH, + (int (*)(union ANY_CTX *))SHA512_Init, + (int (*)(union ANY_CTX *, const void *, size_t))SHA512_Update, + (int (*)(unsigned char *, union ANY_CTX *))SHA512_Final + }, { + 0 + } +}; + +unsigned char * +sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_len) +{ + struct digest_function *func = NULL; + unsigned char *file_digest = NULL; + unsigned char buf[32 * 1024]; + size_t nread; + union ANY_CTX ctx; + int i, fd2; + FILE *fp = NULL; + debug_decl(sudo_filedigest, SUDOERS_DEBUG_UTIL) + + for (i = 0; digest_functions[i].digest_len != 0; i++) { + if (digest_type == i) { + func = &digest_functions[i]; + break; + } + } + if (func == NULL) { + sudo_warnx(U_("unsupported digest type %d for %s"), digest_type, file); + goto bad; + } + + if ((fd2 = dup(fd)) == -1) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to dup %s: %s", + file, strerror(errno)); + goto bad; + } + if ((fp = fdopen(fd2, "r")) == NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to fdopen %s: %s", + file, strerror(errno)); + close(fd2); + goto bad; + } + if ((file_digest = malloc(func->digest_len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } + + func->init(&ctx); + while ((nread = fread(buf, 1, sizeof(buf), fp)) != 0) { + func->update(&ctx, buf, nread); + } + if (ferror(fp)) { + sudo_warnx(U_("%s: read error"), file); + goto bad; + } + func->final(file_digest, &ctx); + fclose(fp); + + *digest_len = func->digest_len; + debug_return_ptr(file_digest); +bad: + free(file_digest); + if (fp != NULL) + fclose(fp); + debug_return_ptr(NULL); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/gentime.c sudo-1.8.20p2/plugins/sudoers/gentime.c --- sudo-1.8.19p1/plugins/sudoers/gentime.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/gentime.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2017 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 +#include +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include + +#include "sudo_compat.h" +#include "sudoers_debug.h" +#include "parse.h" + +/* + * Parse a timestamp in Generalized Time format as per RFC4517. + * E.g. yyyymmddHHMMSS.FZ or yyyymmddHHMMSS.F[+-]TZOFF + * where minutes, seconds and fraction are optional. + * Returns the time in Unix time format or -1 on error. + */ +time_t +parse_gentime(const char *timestr) +{ + char tcopy[sizeof("yyyymmddHHMMSS.F")]; + const char *cp; + time_t result; + struct tm tm; + size_t len; + int items, tzoff = 0; + bool islocal = false; + debug_decl(parse_gentime, SUDOERS_DEBUG_PARSER) + + /* Make a copy of the time without time zone for easy parsing. */ + len = strspn(timestr, "0123456789.,"); + if (len >= sizeof(tcopy)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to parse general time string %s", timestr); + debug_return_time_t(-1); + } + memcpy(tcopy, timestr, len); + tcopy[len] = '\0'; + + /* Parse general time, ignoring the timezone for now. */ + memset(&tm, 0, sizeof(tm)); + items = sscanf(tcopy, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon, + &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec); + if (items == EOF || items < 4) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "only parsed %d items in general time string %s", items, timestr); + debug_return_time_t(-1); + } + cp = timestr + ((items + 1) * 2); + + /* Parse optional fractional hours/minute/second if present. */ + if ((cp[0] == '.' || cp[0] == ',') && isdigit((unsigned char)cp[1])) { + int frac = cp[1] - '0'; + switch (items) { + case 4: + /* convert fractional hour -> minutes */ + tm.tm_min += 60 / 10 * frac; + break; + case 5: + /* convert fractional minute -> seconds */ + tm.tm_sec += 60 / 10 * frac; + break; + case 6: + /* ignore fractional second */ + break; + } + cp += 2; /* skip over radix and fraction */ + } + + switch (*cp) { + case '-': + case '+': { + int hour = 0, min = 0; + + /* No DST */ + tm.tm_isdst = 0; + /* parse time zone offset */ + items = sscanf(cp + 1, "%2d%2d", &hour, &min); + if (items == EOF || items < 1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to parse time zone offset in %s, items %d", + timestr, items); + debug_return_time_t(-1); + } + if (*cp == '-') + tzoff = -((hour * 60) + min) * 60; + else + tzoff = ((hour * 60) + min) * 60; + cp += 1 + (items * 2); + break; + } + case 'Z': + /* GMT/UTC, no DST */ + tm.tm_isdst = 0; + cp++; + break; + case '\0': + /* no zone specified, use local time */ + tm.tm_isdst = -1; + islocal = true; + break; + default: + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to parse general time string %s", timestr); + debug_return_time_t(-1); + } + if (*cp != '\0') { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "trailing garbage in general time string %s", timestr); + debug_return_time_t(-1); + } + + /* Adjust from Generalized Time to struct tm */ + tm.tm_year -= 1900; + tm.tm_mon--; + + result = mktime(&tm); + if (result != -1) { + if (!islocal) { + /* Not local time, convert to GMT */ + result += get_gmtoff(&result); + /* Adjust time based on supplied GMT offset. */ + result -= tzoff; + } + } + + debug_return_time_t(result); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/gmtoff.c sudo-1.8.20p2/plugins/sudoers/gmtoff.c --- sudo-1.8.19p1/plugins/sudoers/gmtoff.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/gmtoff.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 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 +#include +#include + +#include "sudo_compat.h" +#include "sudoers_debug.h" +#include "parse.h" + +/* + * Returns the offset from GMT in seconds (algorithm taken from sendmail). + * Warning: clobbers the static storage used by localtime() and gmtime(). + */ +#ifdef HAVE_STRUCT_TM_TM_GMTOFF +long +get_gmtoff(time_t *clock) +{ + struct tm *local; + + local = localtime(clock); + return local->tm_gmtoff; +} +#else +long +get_gmtoff(time_t *clock) +{ + struct tm *gm, gmt, *local; + long offset; + + if ((gm = gmtime(clock)) == NULL) + return 0; + gmt = *gm; + if ((local = localtime(clock)) == NULL) + return 0; + + offset = (local->tm_sec - gmt.tm_sec) + + ((local->tm_min - gmt.tm_min) * 60) + + ((local->tm_hour - gmt.tm_hour) * 3600); + + /* Timezone may cause year rollover to happen on a different day. */ + if (local->tm_year < gmt.tm_year) + offset -= 24 * 3600; + else if (local->tm_year > gmt.tm_year) + offset -= 24 * 3600; + else if (local->tm_yday < gmt.tm_yday) + offset -= 24 * 3600; + else if (local->tm_yday > gmt.tm_yday) + offset += 24 * 3600; + + return offset; +} +#endif /* HAVE_TM_GMTOFF */ diff -Nru sudo-1.8.19p1/plugins/sudoers/gram.c sudo-1.8.20p2/plugins/sudoers/gram.c --- sudo-1.8.19p1/plugins/sudoers/gram.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/gram.c 2017-05-10 15:38:43.000000000 +0000 @@ -38,7 +38,7 @@ #define YYPREFIX "sudoers" #line 2 "gram.y" /* - * Copyright (c) 1996, 1998-2005, 2007-2013, 2014-2016 + * Copyright (c) 1996, 1998-2005, 2007-2013, 2014-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -81,7 +81,7 @@ #if defined(YYBISON) && defined(HAVE_ALLOCA_H) && !defined(__GNUC__) # include #endif /* YYBISON && HAVE_ALLOCA_H && !__GNUC__ */ -#include +#include #include "sudoers.h" /* XXX */ #include "parse.h" @@ -104,12 +104,13 @@ /* * Local protoypes */ +static void init_options(struct command_options *opts); static bool add_defaults(int, struct member *, struct defaults *); static bool add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, short); static struct member *new_member(char *, int); -static struct sudo_digest *new_digest(int, const char *); -#line 76 "gram.y" +static struct sudo_digest *new_digest(int, char *); +#line 77 "gram.y" #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -120,9 +121,8 @@ struct privilege *privilege; struct sudo_digest *digest; struct sudo_command command; + struct command_options options; struct cmndtag tag; - struct selinux_info seinfo; - struct solaris_privs_info privinfo; char *string; int tok; } YYSTYPE; @@ -166,11 +166,14 @@ #define ROLE 292 #define PRIVS 293 #define LIMITPRIVS 294 -#define MYSELF 295 -#define SHA224_TOK 296 -#define SHA256_TOK 297 -#define SHA384_TOK 298 -#define SHA512_TOK 299 +#define CMND_TIMEOUT 295 +#define NOTBEFORE 296 +#define NOTAFTER 297 +#define MYSELF 298 +#define SHA224_TOK 299 +#define SHA256_TOK 300 +#define SHA384_TOK 301 +#define SHA512_TOK 302 #define YYERRCODE 256 #if defined(__cplusplus) || defined(__STDC__) const short sudoerslhs[] = @@ -178,18 +181,18 @@ short sudoerslhs[] = #endif { -1, - 0, 0, 30, 30, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 4, 4, 3, 3, + 0, 0, 32, 32, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 4, 4, 3, 3, 3, 3, 3, 21, 21, 20, 11, 11, 9, 9, - 9, 9, 9, 2, 2, 1, 29, 29, 29, 29, - 7, 7, 6, 6, 24, 25, 23, 23, 23, 23, - 23, 27, 28, 26, 26, 26, 26, 26, 18, 18, - 19, 19, 19, 19, 19, 22, 22, 22, 22, 22, + 9, 9, 9, 2, 2, 1, 31, 31, 31, 31, + 7, 7, 6, 6, 28, 29, 30, 24, 25, 26, + 27, 18, 18, 19, 19, 19, 19, 19, 23, 23, + 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 5, 5, 5, 33, 33, 36, 10, 10, 34, 34, - 37, 8, 8, 35, 35, 38, 32, 32, 39, 14, - 14, 12, 12, 13, 13, 13, 13, 13, 17, 17, - 15, 15, 16, 16, 16, + 22, 5, 5, 5, 35, 35, 38, 10, 10, 36, + 36, 39, 8, 8, 37, 37, 40, 34, 34, 41, + 14, 14, 12, 12, 13, 13, 13, 13, 13, 17, + 17, 15, 15, 16, 16, 16, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerslen[] = @@ -200,15 +203,15 @@ 0, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 1, 3, 1, 2, 3, 3, 3, 1, 3, 3, 1, 2, 1, 1, - 1, 1, 1, 1, 3, 5, 3, 3, 3, 3, - 1, 2, 1, 2, 3, 3, 0, 1, 1, 2, - 2, 3, 3, 0, 1, 1, 2, 2, 0, 3, - 0, 1, 3, 2, 1, 0, 2, 2, 2, 2, + 1, 1, 1, 1, 3, 4, 3, 3, 3, 3, + 1, 2, 1, 2, 3, 3, 3, 3, 3, 3, + 3, 0, 3, 0, 1, 3, 2, 1, 0, 2, + 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 3, 3, 1, 3, 1, 3, - 3, 1, 3, 1, 3, 3, 1, 3, 3, 1, - 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, - 1, 2, 1, 1, 1, + 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, + 3, 3, 1, 3, 1, 3, 3, 1, 3, 3, + 1, 3, 1, 2, 1, 1, 1, 1, 1, 1, + 3, 1, 2, 1, 1, 1, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoersdefred[] = @@ -216,24 +219,25 @@ short sudoersdefred[] = #endif { 0, - 0, 104, 106, 107, 108, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 0, 0, 0, 0, 100, 102, + 0, 105, 107, 108, 109, 0, 0, 0, 0, 0, + 106, 5, 0, 0, 0, 0, 0, 0, 101, 103, 0, 0, 3, 6, 0, 0, 17, 0, 29, 32, - 31, 33, 30, 0, 27, 0, 87, 0, 0, 83, - 82, 81, 0, 0, 0, 0, 0, 43, 41, 92, - 0, 0, 0, 0, 84, 0, 0, 89, 0, 0, - 97, 0, 0, 94, 103, 0, 0, 24, 0, 4, + 31, 33, 30, 0, 27, 0, 88, 0, 0, 84, + 83, 82, 0, 0, 0, 0, 0, 43, 41, 93, + 0, 0, 0, 0, 85, 0, 0, 90, 0, 0, + 98, 0, 0, 95, 104, 0, 0, 24, 0, 4, 0, 0, 0, 20, 0, 28, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 42, 0, 0, - 0, 0, 0, 0, 0, 0, 101, 0, 0, 21, - 22, 23, 18, 88, 37, 38, 39, 40, 93, 0, - 85, 0, 90, 0, 98, 0, 95, 0, 34, 0, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 113, 115, 114, 0, 109, 111, 0, 0, 60, - 35, 0, 0, 0, 0, 66, 0, 0, 50, 51, - 112, 0, 0, 46, 45, 0, 0, 0, 57, 58, - 110, 52, 53, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 79, 80, 77, 78, 36, + 0, 0, 0, 0, 0, 0, 102, 0, 0, 21, + 22, 23, 18, 89, 37, 38, 39, 40, 94, 0, + 86, 0, 91, 0, 99, 0, 96, 0, 34, 0, + 59, 25, 0, 0, 0, 0, 0, 114, 116, 115, + 0, 110, 112, 0, 0, 53, 35, 0, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 62, + 60, 61, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 80, 81, 78, 79, 36, 111, 49, 48, + 50, 51, 45, 46, 47, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoersdgoto[] = @@ -242,43 +246,45 @@ #endif { 18, 119, 120, 27, 28, 48, 49, 50, 51, 35, 67, - 37, 19, 20, 21, 136, 137, 138, 121, 125, 68, - 69, 158, 129, 130, 131, 146, 147, 148, 52, 22, - 23, 60, 54, 57, 63, 55, 58, 64, 61, + 37, 19, 20, 21, 132, 133, 134, 121, 125, 68, + 69, 145, 127, 146, 147, 148, 149, 150, 151, 152, + 52, 22, 23, 60, 54, 57, 63, 55, 58, 64, + 61, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerssindex[] = #else short sudoerssindex[] = #endif - { 686, + { 512, -272, 0, 0, 0, 0, -23, 227, -19, -19, -5, 0, 0, -239, -236, -234, -232, -231, 0, 0, 0, - -33, 686, 0, 0, -3, -220, 0, 3, 0, 0, + -33, 512, 0, 0, -3, -220, 0, 3, 0, 0, 0, 0, 0, -225, 0, -28, 0, -24, -24, 0, - 0, 0, -240, -15, -8, 2, 8, 0, 0, 0, - -21, -12, -9, 10, 0, 9, 13, 0, 11, 16, - 0, 14, 19, 0, 0, -19, -36, 0, 20, 0, - -208, -187, -183, 0, -23, 0, 227, 3, 3, 3, - 0, -181, -180, -179, -178, -5, 3, 0, 227, -239, - -5, -236, -19, -234, -19, -232, 0, 41, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 47, 0, 48, 0, 48, 0, -29, 0, 50, - -230, 0, 289, -7, 52, 41, 34, 37, -229, -192, - -191, 0, 0, 0, -217, 0, 0, 56, 289, 0, - 0, -161, -160, 43, 44, 0, -188, -185, 0, 0, - 0, 289, 56, 0, 0, -154, -153, 533, 0, 0, + 0, 0, -240, -15, -8, 2, 4, 0, 0, 0, + -21, -12, -9, 6, 0, 7, 12, 0, 10, 14, + 0, 13, 25, 0, 0, -19, -36, 0, 26, 0, + -208, -202, -198, 0, -23, 0, 227, 3, 3, 3, + 0, -179, -178, -174, -173, -5, 3, 0, 227, -239, + -5, -236, -19, -234, -19, -232, 0, 52, 227, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, + 0, 51, 0, 54, 0, 54, 0, -29, 0, 55, + 0, 0, 289, -7, 59, 52, -216, 0, 0, 0, + -217, 0, 0, 57, 289, 0, 0, 32, 41, 42, + 43, 44, 45, 47, 450, 0, 0, 0, 0, 0, + 0, 0, 0, 289, 57, -154, -153, -150, -149, -148, + -147, -146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,}; + 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) const short sudoersrindex[] = #else short sudoersrindex[] = #endif - { 113, + { 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 0, 0, 1, 0, 0, 145, 0, 0, + 0, 119, 0, 0, 1, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 193, 0, 0, 207, @@ -287,25 +293,27 @@ 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 49, 0, 63, 0, 97, 0, 74, 0, 111, - 434, 0, 75, 76, 0, 404, 0, 0, 566, 465, - 499, 0, 0, 0, 0, 0, 0, 77, 0, 0, - 0, 0, 0, 0, 0, 0, 597, 630, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, + 0, 49, 0, 63, 0, 97, 0, 79, 0, 111, + 0, 0, 81, 82, 0, 404, 483, 0, 0, 0, + 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,}; + 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) const short sudoersgindex[] = #else short sudoersgindex[] = #endif { 0, - -4, 0, 45, 18, 80, 72, -79, 35, 91, -1, - 51, 61, 112, -6, -20, -2, 4, 0, 0, 32, - 0, 0, 0, 5, 7, 0, -14, 6, 0, 0, - 116, 0, 0, 0, 0, 57, 54, 39, 55, + 5, 0, 53, 18, 86, 74, -79, 36, 98, -1, + 56, 68, 120, -6, -18, 8, 11, 0, 0, 39, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 113, 0, 0, 0, 0, 58, 48, 46, + 60, }; -#define YYTABLESIZE 975 +#define YYTABLESIZE 801 #if defined(__cplusplus) || defined(__STDC__) const short sudoerstable[] = #else @@ -313,21 +321,21 @@ #endif { 34, 19, 38, 39, 17, 26, 36, 109, 77, 26, 26, - 66, 26, 24, 17, 86, 77, 40, 41, 53, 66, + 66, 26, 24, 17, 87, 77, 40, 41, 53, 66, 43, 56, 86, 59, 98, 62, 2, 43, 123, 3, 4, 5, 29, 19, 30, 31, 66, 32, 74, 72, - 132, 73, 82, 42, 19, 133, 75, 86, 91, 83, - 139, 89, 11, 78, 100, 79, 80, 71, 33, 84, - 127, 128, 99, 144, 145, 85, 134, 90, 87, 91, - 92, 93, 86, 94, 95, 101, 96, 99, 178, 102, - 118, 91, 105, 106, 107, 108, 114, 110, 116, 77, - 86, 66, 140, 126, 142, 99, 96, 143, 127, 152, - 128, 154, 155, 156, 157, 145, 91, 144, 162, 163, - 26, 124, 1, 2, 61, 65, 62, 64, 63, 103, - 99, 141, 81, 88, 76, 112, 97, 104, 65, 96, - 122, 161, 151, 160, 117, 150, 149, 70, 0, 0, - 0, 0, 153, 26, 12, 113, 111, 0, 115, 0, - 0, 0, 159, 0, 96, 0, 0, 0, 9, 0, + 128, 73, 82, 42, 19, 129, 75, 87, 92, 83, + 135, 89, 11, 78, 100, 79, 80, 71, 33, 84, + 101, 85, 100, 90, 102, 177, 130, 91, 87, 92, + 93, 94, 87, 95, 138, 139, 140, 141, 142, 143, + 144, 92, 96, 99, 105, 106, 114, 110, 116, 107, + 108, 118, 156, 77, 86, 100, 97, 66, 126, 136, + 154, 157, 158, 159, 160, 161, 92, 162, 179, 180, + 26, 124, 181, 182, 183, 184, 185, 1, 2, 54, + 100, 58, 55, 57, 56, 88, 112, 103, 81, 97, + 137, 76, 104, 97, 70, 178, 65, 122, 153, 113, + 0, 117, 0, 26, 12, 155, 0, 111, 0, 0, + 0, 0, 0, 115, 97, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -339,77 +347,60 @@ 11, 3, 4, 5, 40, 41, 0, 0, 0, 0, 33, 40, 41, 0, 11, 0, 19, 0, 19, 34, 0, 19, 19, 19, 11, 19, 19, 19, 19, 19, - 86, 42, 86, 11, 7, 86, 86, 86, 42, 86, - 86, 86, 86, 86, 19, 19, 19, 19, 19, 19, - 44, 45, 46, 47, 0, 0, 0, 0, 86, 86, - 86, 86, 86, 86, 91, 0, 91, 7, 15, 91, - 91, 91, 0, 91, 91, 91, 91, 91, 99, 0, - 99, 135, 13, 99, 99, 99, 0, 99, 99, 99, - 99, 99, 91, 91, 91, 91, 91, 91, 0, 0, - 0, 15, 0, 0, 0, 0, 99, 99, 99, 99, - 99, 99, 96, 0, 96, 13, 14, 96, 96, 96, - 0, 96, 96, 96, 96, 96, 26, 0, 26, 0, + 87, 42, 87, 11, 7, 87, 87, 87, 42, 87, + 87, 87, 87, 87, 19, 19, 19, 19, 19, 19, + 0, 0, 0, 44, 45, 46, 47, 0, 87, 87, + 87, 87, 87, 87, 92, 0, 92, 7, 15, 92, + 92, 92, 0, 92, 92, 92, 92, 92, 100, 0, + 100, 131, 13, 100, 100, 100, 0, 100, 100, 100, + 100, 100, 92, 92, 92, 92, 92, 92, 0, 0, + 0, 15, 0, 0, 0, 0, 100, 100, 100, 100, + 100, 100, 97, 0, 97, 13, 14, 97, 97, 97, + 0, 97, 97, 97, 97, 97, 26, 0, 26, 0, 16, 26, 26, 26, 0, 26, 26, 26, 26, 26, - 96, 96, 96, 96, 96, 96, 0, 0, 0, 14, + 97, 97, 97, 97, 97, 97, 0, 0, 0, 14, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 12, 0, 12, 16, 0, 12, 12, 12, 0, 12, 12, 12, 12, 12, 9, 0, 9, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 12, 12, - 12, 12, 12, 12, 0, 0, 59, 0, 0, 0, + 12, 12, 12, 12, 0, 0, 52, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 10, 0, 10, 0, 0, 10, 10, 10, 0, 10, 10, 10, - 10, 10, 8, 0, 8, 0, 47, 8, 8, 8, + 10, 10, 8, 0, 8, 0, 0, 8, 8, 8, 0, 8, 8, 8, 8, 8, 10, 10, 10, 10, - 10, 10, 0, 0, 29, 0, 30, 31, 0, 32, - 8, 8, 8, 8, 8, 8, 11, 48, 11, 0, + 10, 10, 43, 0, 29, 0, 30, 31, 0, 32, + 8, 8, 8, 8, 8, 8, 11, 0, 11, 0, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, - 7, 49, 7, 0, 0, 7, 7, 7, 0, 7, - 7, 7, 7, 7, 0, 0, 132, 0, 0, 0, - 0, 133, 0, 0, 0, 0, 0, 0, 7, 7, - 7, 7, 7, 7, 15, 43, 15, 0, 0, 15, - 15, 15, 134, 15, 15, 15, 15, 15, 13, 0, + 7, 0, 7, 0, 0, 7, 7, 7, 0, 7, + 7, 7, 7, 7, 17, 0, 128, 0, 0, 0, + 0, 129, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 7, 7, 15, 0, 15, 0, 0, 15, + 15, 15, 130, 15, 15, 15, 15, 15, 13, 0, 13, 0, 0, 13, 13, 13, 0, 13, 13, 13, - 13, 13, 15, 15, 15, 15, 15, 15, 54, 0, + 13, 13, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 14, 0, 14, 0, 0, 14, 14, 14, - 0, 14, 14, 14, 14, 14, 16, 0, 16, 55, + 0, 14, 14, 14, 14, 14, 16, 0, 16, 0, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, - 59, 59, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, - 47, 47, 0, 0, 59, 59, 59, 59, 0, 59, - 59, 59, 59, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 17, 0, - 0, 48, 48, 0, 0, 0, 47, 47, 0, 47, - 47, 47, 47, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, - 0, 0, 0, 0, 0, 49, 49, 48, 48, 0, - 48, 48, 48, 48, 0, 0, 0, 0, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 0, 0, 0, 0, 0, 0, 40, - 41, 49, 49, 0, 49, 49, 49, 49, 0, 0, - 0, 0, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 42, 0, 0, 0, - 0, 0, 54, 54, 0, 0, 0, 0, 44, 45, - 46, 47, 0, 0, 0, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 0, 0, 0, 55, 55, 0, 0, 0, 0, 0, - 0, 54, 54, 54, 54, 0, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 0, 0, 0, 0, 0, 56, 56, 0, 0, - 0, 0, 55, 55, 55, 55, 0, 0, 0, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 56, 56, 56, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 2, 0, 0, 3, 4, 5, 0, - 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 12, 13, 14, 15, 16, + 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 0, 0, + 0, 0, 0, 0, 52, 52, 52, 52, 52, 52, + 52, 0, 52, 52, 52, 52, 40, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 42, 0, 0, 0, 0, 0, 67, + 67, 0, 0, 0, 0, 0, 0, 0, 44, 45, + 46, 47, 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 1, 0, 2, + 0, 0, 3, 4, 5, 0, 6, 7, 8, 9, + 10, 67, 67, 67, 67, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 11, 12, 13, 14, 15, + 16, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerscheck[] = @@ -423,16 +414,16 @@ 262, 263, 258, 33, 260, 261, 44, 263, 259, 43, 258, 45, 58, 284, 44, 263, 44, 33, 0, 58, 58, 61, 284, 36, 263, 38, 39, 61, 284, 58, - 291, 292, 0, 293, 294, 58, 284, 58, 51, 61, - 58, 61, 58, 58, 61, 263, 58, 58, 158, 263, - 40, 33, 264, 264, 264, 264, 93, 89, 95, 44, - 44, 44, 41, 44, 61, 33, 0, 61, 291, 44, - 292, 263, 263, 61, 61, 294, 58, 293, 263, 263, - 0, 118, 0, 0, 41, 41, 41, 41, 41, 75, - 58, 126, 43, 52, 34, 91, 66, 77, 17, 33, - 99, 152, 135, 148, 96, 131, 130, 22, -1, -1, - -1, -1, 139, 33, 0, 92, 90, -1, 94, -1, - -1, -1, 147, -1, 58, -1, -1, -1, 0, -1, + 263, 58, 0, 58, 263, 145, 284, 61, 51, 58, + 61, 58, 58, 61, 291, 292, 293, 294, 295, 296, + 297, 33, 58, 58, 264, 264, 93, 89, 95, 264, + 264, 40, 61, 44, 44, 33, 0, 44, 44, 41, + 44, 61, 61, 61, 61, 61, 58, 61, 263, 263, + 0, 118, 263, 263, 263, 263, 263, 0, 0, 41, + 58, 41, 41, 41, 41, 52, 91, 75, 43, 33, + 126, 34, 77, 66, 22, 154, 17, 99, 131, 92, + -1, 96, -1, 33, 0, 135, -1, 90, -1, -1, + -1, -1, -1, 94, 58, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -446,7 +437,7 @@ -1, 261, 262, 263, 284, 265, 266, 267, 268, 269, 256, 284, 258, 33, 0, 261, 262, 263, 284, 265, 266, 267, 268, 269, 284, 285, 286, 287, 288, 289, - 296, 297, 298, 299, -1, -1, -1, -1, 284, 285, + -1, -1, -1, 299, 300, 301, 302, -1, 284, 285, 286, 287, 288, 289, 256, -1, 258, 33, 0, 261, 262, 263, -1, 265, 266, 267, 268, 269, 256, -1, 258, 33, 0, 261, 262, 263, -1, 265, 266, 267, @@ -463,64 +454,47 @@ 286, 287, 288, 289, -1, -1, 33, -1, -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 256, -1, 258, -1, 33, 261, 262, 263, + 268, 269, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 284, 285, 286, 287, - 288, 289, -1, -1, 258, -1, 260, 261, -1, 263, - 284, 285, 286, 287, 288, 289, 256, 33, 258, -1, + 288, 289, 33, -1, 258, -1, 260, 261, -1, 263, + 284, 285, 286, 287, 288, 289, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 284, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, - 256, 33, 258, -1, -1, 261, 262, 263, -1, 265, - 266, 267, 268, 269, -1, -1, 258, -1, -1, -1, + 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, + 266, 267, 268, 269, 33, -1, 258, -1, -1, -1, -1, 263, -1, -1, -1, -1, -1, -1, 284, 285, - 286, 287, 288, 289, 256, 33, 258, -1, -1, 261, + 286, 287, 288, 289, 256, -1, 258, -1, -1, 261, 262, 263, 284, 265, 266, 267, 268, 269, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 284, 285, 286, 287, 288, 289, 33, -1, + 268, 269, 284, 285, 286, 287, 288, 289, -1, -1, -1, -1, -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, 256, -1, 258, -1, -1, 261, 262, 263, - -1, 265, 266, 267, 268, 269, 256, -1, 258, 33, + -1, 265, 266, 267, 268, 269, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 284, 285, 286, 287, 288, 289, -1, -1, -1, -1, -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, - 257, 258, 33, -1, -1, -1, -1, -1, -1, -1, + 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, -1, - 257, 258, -1, -1, 291, 292, 293, 294, -1, 296, - 297, 298, 299, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 33, -1, - -1, 257, 258, -1, -1, -1, 293, 294, -1, 296, - 297, 298, 299, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, - -1, -1, -1, -1, -1, 257, 258, 293, 294, -1, - 296, 297, 298, 299, -1, -1, -1, -1, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, -1, -1, -1, -1, -1, -1, 257, - 258, 293, 294, -1, 296, 297, 298, 299, -1, -1, - -1, -1, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, -1, -1, -1, - -1, -1, 257, 258, -1, -1, -1, -1, 296, 297, - 298, 299, -1, -1, -1, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, - -1, 296, 297, 298, 299, -1, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, -1, -1, -1, -1, -1, 257, 258, -1, -1, - -1, -1, 296, 297, 298, 299, -1, -1, -1, 270, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 297, -1, 299, 300, 301, 302, 257, 258, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 296, 297, 298, 299, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, 258, -1, -1, 261, 262, 263, -1, - 265, 266, 267, 268, 269, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, - 285, 286, 287, 288, 289, + 281, 282, 283, 284, -1, -1, -1, -1, -1, 257, + 258, -1, -1, -1, -1, -1, -1, -1, 299, 300, + 301, 302, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 256, -1, 258, + -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, + 269, 299, 300, 301, 302, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 284, 285, 286, 287, 288, + 289, }; #define YYFINAL 18 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 299 +#define YYMAXTOKEN 302 #if YYDEBUG #if defined(__cplusplus) || defined(__STDC__) const char * const sudoersname[] = @@ -540,8 +514,8 @@ "NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV","NOSETENV","LOG_INPUT", "NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL","NOMAIL","FOLLOW","NOFOLLOW", "ALL","COMMENT","HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS","ERROR","TYPE", -"ROLE","PRIVS","LIMITPRIVS","MYSELF","SHA224_TOK","SHA256_TOK","SHA384_TOK", -"SHA512_TOK", +"ROLE","PRIVS","LIMITPRIVS","CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF", +"SHA224_TOK","SHA256_TOK","SHA384_TOK","SHA512_TOK", }; #if defined(__cplusplus) || defined(__STDC__) const char * const sudoersrule[] = @@ -584,7 +558,7 @@ "host : WORD", "cmndspeclist : cmndspec", "cmndspeclist : cmndspeclist ',' cmndspec", -"cmndspec : runasspec selinux solarisprivs cmndtag digcmnd", +"cmndspec : runasspec options cmndtag digcmnd", "digest : SHA224_TOK ':' DIGEST", "digest : SHA256_TOK ':' DIGEST", "digest : SHA384_TOK ':' DIGEST", @@ -593,20 +567,13 @@ "digcmnd : digest opcmnd", "opcmnd : cmnd", "opcmnd : '!' cmnd", +"timeoutspec : CMND_TIMEOUT '=' WORD", +"notbeforespec : NOTBEFORE '=' WORD", +"notafterspec : NOTAFTER '=' WORD", "rolespec : ROLE '=' WORD", "typespec : TYPE '=' WORD", -"selinux :", -"selinux : rolespec", -"selinux : typespec", -"selinux : rolespec typespec", -"selinux : typespec rolespec", "privsspec : PRIVS '=' WORD", "limitprivsspec : LIMITPRIVS '=' WORD", -"solarisprivs :", -"solarisprivs : privsspec", -"solarisprivs : limitprivsspec", -"solarisprivs : privsspec limitprivsspec", -"solarisprivs : limitprivsspec privsspec", "runasspec :", "runasspec : '(' runaslist ')'", "runaslist :", @@ -614,6 +581,14 @@ "runaslist : userlist ':' grouplist", "runaslist : ':' grouplist", "runaslist : ':'", +"options :", +"options : options notbeforespec", +"options : options notafterspec", +"options : options timeoutspec", +"options : options rolespec", +"options : options typespec", +"options : options privsspec", +"options : options limitprivsspec", "cmndtag :", "cmndtag : cmndtag NOPASSWD", "cmndtag : cmndtag PASSWD", @@ -692,7 +667,7 @@ YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 856 "gram.y" +#line 899 "gram.y" void sudoerserror(const char *s) { @@ -766,7 +741,7 @@ } static struct sudo_digest * -new_digest(int digest_type, const char *digest_str) +new_digest(int digest_type, char *digest_str) { struct sudo_digest *dig; debug_decl(new_digest, SUDOERS_DEBUG_PARSER) @@ -778,7 +753,7 @@ } dig->digest_type = digest_type; - dig->digest_str = strdup(digest_str); + dig->digest_str = digest_str; if (dig->digest_str == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unable to allocate memory"); @@ -956,6 +931,10 @@ (struct sudo_command *) cs->cmnd->name; free(c->cmnd); free(c->args); + if (c->digest != NULL) { + free(c->digest->digest_str); + free(c->digest); + } } free(cs->cmnd->name); free(cs->cmnd); @@ -1007,7 +986,26 @@ debug_return_bool(ret); } -#line 958 "gram.c" + +/* + * Initialize all options in a cmndspec. + */ +static void +init_options(struct command_options *opts) +{ + opts->notbefore = UNSPEC; + opts->notafter = UNSPEC; + opts->timeout = UNSPEC; +#ifdef HAVE_SELINUX + opts->role = NULL; + opts->type = NULL; +#endif +#ifdef HAVE_PRIV_SET + opts->privs = NULL; + opts->limitprivs = NULL; +#endif +} +#line 956 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -1216,23 +1214,23 @@ switch (yyn) { case 1: -#line 170 "gram.y" +#line 176 "gram.y" { ; } break; case 5: -#line 178 "gram.y" +#line 184 "gram.y" { ; } break; case 6: -#line 181 "gram.y" +#line 187 "gram.y" { yyerrok; } break; case 7: -#line 184 "gram.y" +#line 190 "gram.y" { if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1241,73 +1239,73 @@ } break; case 8: -#line 190 "gram.y" +#line 196 "gram.y" { ; } break; case 9: -#line 193 "gram.y" +#line 199 "gram.y" { ; } break; case 10: -#line 196 "gram.y" +#line 202 "gram.y" { ; } break; case 11: -#line 199 "gram.y" +#line 205 "gram.y" { ; } break; case 12: -#line 202 "gram.y" +#line 208 "gram.y" { if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) YYERROR; } break; case 13: -#line 206 "gram.y" +#line 212 "gram.y" { if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 14: -#line 210 "gram.y" +#line 216 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 15: -#line 214 "gram.y" +#line 220 "gram.y" { if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 16: -#line 218 "gram.y" +#line 224 "gram.y" { if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 18: -#line 225 "gram.y" +#line 231 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; case 19: -#line 231 "gram.y" +#line 237 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1317,7 +1315,7 @@ } break; case 20: -#line 238 "gram.y" +#line 244 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1327,7 +1325,7 @@ } break; case 21: -#line 245 "gram.y" +#line 251 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1337,7 +1335,7 @@ } break; case 22: -#line 252 "gram.y" +#line 258 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1347,7 +1345,7 @@ } break; case 23: -#line 259 "gram.y" +#line 265 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1357,14 +1355,14 @@ } break; case 25: -#line 269 "gram.y" +#line 275 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; case 26: -#line 275 "gram.y" +#line 281 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1378,21 +1376,21 @@ } break; case 27: -#line 288 "gram.y" +#line 294 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 28: -#line 292 "gram.y" +#line 298 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 29: -#line 298 "gram.y" +#line 304 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1402,7 +1400,7 @@ } break; case 30: -#line 305 "gram.y" +#line 311 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1412,7 +1410,7 @@ } break; case 31: -#line 312 "gram.y" +#line 318 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1422,7 +1420,7 @@ } break; case 32: -#line 319 "gram.y" +#line 325 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1432,7 +1430,7 @@ } break; case 33: -#line 326 "gram.y" +#line 332 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1442,25 +1440,33 @@ } break; case 35: -#line 336 "gram.y" +#line 342 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); HLTQ_CONCAT(yyvsp[-2].cmndspec, yyvsp[0].cmndspec, entries); #ifdef HAVE_SELINUX /* propagate role and type */ - if (yyvsp[0].cmndspec->role == NULL) + if (yyvsp[0].cmndspec->role == NULL && yyvsp[0].cmndspec->type == NULL) { yyvsp[0].cmndspec->role = prev->role; - if (yyvsp[0].cmndspec->type == NULL) yyvsp[0].cmndspec->type = prev->type; + } #endif /* HAVE_SELINUX */ #ifdef HAVE_PRIV_SET /* propagate privs & limitprivs */ - if (yyvsp[0].cmndspec->privs == NULL) + if (yyvsp[0].cmndspec->privs == NULL && yyvsp[0].cmndspec->limitprivs == NULL) { yyvsp[0].cmndspec->privs = prev->privs; - if (yyvsp[0].cmndspec->limitprivs == NULL) yyvsp[0].cmndspec->limitprivs = prev->limitprivs; + } #endif /* HAVE_PRIV_SET */ + /* propagate command time restrictions */ + if (yyvsp[0].cmndspec->notbefore == UNSPEC) + yyvsp[0].cmndspec->notbefore = prev->notbefore; + if (yyvsp[0].cmndspec->notafter == UNSPEC) + yyvsp[0].cmndspec->notafter = prev->notafter; + /* propagate command timeout */ + if (yyvsp[0].cmndspec->timeout == UNSPEC) + yyvsp[0].cmndspec->timeout = prev->timeout; /* propagate tags and runas list */ if (yyvsp[0].cmndspec->tags.nopasswd == UNSPEC) yyvsp[0].cmndspec->tags.nopasswd = prev->tags.nopasswd; @@ -1488,15 +1494,15 @@ } break; case 36: -#line 381 "gram.y" +#line 395 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } - if (yyvsp[-4].runas != NULL) { - if (yyvsp[-4].runas->runasusers != NULL) { + if (yyvsp[-3].runas != NULL) { + if (yyvsp[-3].runas->runasusers != NULL) { cs->runasuserlist = malloc(sizeof(*cs->runasuserlist)); if (cs->runasuserlist == NULL) { @@ -1504,9 +1510,9 @@ YYERROR; } HLTQ_TO_TAILQ(cs->runasuserlist, - yyvsp[-4].runas->runasusers, entries); + yyvsp[-3].runas->runasusers, entries); } - if (yyvsp[-4].runas->runasgroups != NULL) { + if (yyvsp[-3].runas->runasgroups != NULL) { cs->runasgrouplist = malloc(sizeof(*cs->runasgrouplist)); if (cs->runasgrouplist == NULL) { @@ -1514,18 +1520,21 @@ YYERROR; } HLTQ_TO_TAILQ(cs->runasgrouplist, - yyvsp[-4].runas->runasgroups, entries); + yyvsp[-3].runas->runasgroups, entries); } - free(yyvsp[-4].runas); + free(yyvsp[-3].runas); } #ifdef HAVE_SELINUX - cs->role = yyvsp[-3].seinfo.role; - cs->type = yyvsp[-3].seinfo.type; + cs->role = yyvsp[-2].options.role; + cs->type = yyvsp[-2].options.type; #endif #ifdef HAVE_PRIV_SET - cs->privs = yyvsp[-2].privinfo.privs; - cs->limitprivs = yyvsp[-2].privinfo.limitprivs; + cs->privs = yyvsp[-2].options.privs; + cs->limitprivs = yyvsp[-2].options.limitprivs; #endif + cs->notbefore = yyvsp[-2].options.notbefore; + cs->notafter = yyvsp[-2].options.notafter; + cs->timeout = yyvsp[-2].options.timeout; cs->tags = yyvsp[-1].tag; cs->cmnd = yyvsp[0].member; HLTQ_INIT(cs, entries); @@ -1537,7 +1546,7 @@ } break; case 37: -#line 429 "gram.y" +#line 446 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1547,7 +1556,7 @@ } break; case 38: -#line 436 "gram.y" +#line 453 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1557,7 +1566,7 @@ } break; case 39: -#line 443 "gram.y" +#line 460 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1567,7 +1576,7 @@ } break; case 40: -#line 450 "gram.y" +#line 467 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1577,13 +1586,13 @@ } break; case 41: -#line 459 "gram.y" +#line 476 "gram.y" { yyval.member = yyvsp[0].member; } break; case 42: -#line 462 "gram.y" +#line 479 "gram.y" { if (yyvsp[0].member->type != COMMAND) { sudoerserror(N_("a digest requires a path name")); @@ -1595,127 +1604,75 @@ } break; case 43: -#line 473 "gram.y" +#line 490 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 44: -#line 477 "gram.y" +#line 494 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 45: -#line 483 "gram.y" +#line 500 "gram.y" { yyval.string = yyvsp[0].string; } break; case 46: -#line 488 "gram.y" +#line 505 "gram.y" { yyval.string = yyvsp[0].string; } break; case 47: -#line 493 "gram.y" -{ - yyval.seinfo.role = NULL; - yyval.seinfo.type = NULL; - } -break; -case 48: -#line 497 "gram.y" -{ - yyval.seinfo.role = yyvsp[0].string; - yyval.seinfo.type = NULL; - } -break; -case 49: -#line 501 "gram.y" -{ - yyval.seinfo.type = yyvsp[0].string; - yyval.seinfo.role = NULL; - } -break; -case 50: -#line 505 "gram.y" -{ - yyval.seinfo.role = yyvsp[-1].string; - yyval.seinfo.type = yyvsp[0].string; - } -break; -case 51: #line 509 "gram.y" { - yyval.seinfo.type = yyvsp[-1].string; - yyval.seinfo.role = yyvsp[0].string; + yyval.string = yyvsp[0].string; } break; -case 52: -#line 515 "gram.y" +case 48: +#line 514 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 53: +case 49: #line 519 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 54: +case 50: #line 524 "gram.y" { - yyval.privinfo.privs = NULL; - yyval.privinfo.limitprivs = NULL; + yyval.string = yyvsp[0].string; } break; -case 55: +case 51: #line 528 "gram.y" { - yyval.privinfo.privs = yyvsp[0].string; - yyval.privinfo.limitprivs = NULL; - } -break; -case 56: -#line 532 "gram.y" -{ - yyval.privinfo.privs = NULL; - yyval.privinfo.limitprivs = yyvsp[0].string; - } -break; -case 57: -#line 536 "gram.y" -{ - yyval.privinfo.privs = yyvsp[-1].string; - yyval.privinfo.limitprivs = yyvsp[0].string; - } -break; -case 58: -#line 540 "gram.y" -{ - yyval.privinfo.limitprivs = yyvsp[-1].string; - yyval.privinfo.privs = yyvsp[0].string; + yyval.string = yyvsp[0].string; } break; -case 59: -#line 546 "gram.y" +case 52: +#line 533 "gram.y" { yyval.runas = NULL; } break; -case 60: -#line 549 "gram.y" +case 53: +#line 536 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; -case 61: -#line 554 "gram.y" +case 54: +#line 541 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1732,8 +1689,8 @@ } } break; -case 62: -#line 569 "gram.y" +case 55: +#line 556 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1744,8 +1701,8 @@ /* $$->runasgroups = NULL; */ } break; -case 63: -#line 578 "gram.y" +case 56: +#line 565 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1756,8 +1713,8 @@ yyval.runas->runasgroups = yyvsp[0].member; } break; -case 64: -#line 587 "gram.y" +case 57: +#line 574 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1768,8 +1725,8 @@ yyval.runas->runasgroups = yyvsp[0].member; } break; -case 65: -#line 596 "gram.y" +case 58: +#line 583 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1786,98 +1743,176 @@ } } break; +case 59: +#line 600 "gram.y" +{ + init_options(&yyval.options); + } +break; +case 60: +#line 603 "gram.y" +{ + yyval.options.notbefore = parse_gentime(yyvsp[0].string); + free(yyvsp[0].string); + if (yyval.options.notbefore == -1) { + sudoerserror(N_("invalid notbefore value")); + YYERROR; + } + } +break; +case 61: +#line 611 "gram.y" +{ + yyval.options.notafter = parse_gentime(yyvsp[0].string); + free(yyvsp[0].string); + if (yyval.options.notafter == -1) { + sudoerserror(N_("invalid notafter value")); + YYERROR; + } + } +break; +case 62: +#line 619 "gram.y" +{ + yyval.options.timeout = parse_timeout(yyvsp[0].string); + free(yyvsp[0].string); + if (yyval.options.timeout == -1) { + if (errno == ERANGE) + sudoerserror(N_("timeout value too large")); + else + sudoerserror(N_("invalid timeout value")); + YYERROR; + } + } +break; +case 63: +#line 630 "gram.y" +{ +#ifdef HAVE_SELINUX + free(yyval.options.role); + yyval.options.role = yyvsp[0].string; +#endif + } +break; +case 64: +#line 636 "gram.y" +{ +#ifdef HAVE_SELINUX + free(yyval.options.type); + yyval.options.type = yyvsp[0].string; +#endif + } +break; +case 65: +#line 642 "gram.y" +{ +#ifdef HAVE_PRIV_SET + free(yyval.options.privs); + yyval.options.privs = yyvsp[0].string; +#endif + } +break; case 66: -#line 613 "gram.y" +#line 648 "gram.y" { - TAGS_INIT(yyval.tag); +#ifdef HAVE_PRIV_SET + free(yyval.options.limitprivs); + yyval.options.limitprivs = yyvsp[0].string; +#endif } break; case 67: -#line 616 "gram.y" +#line 656 "gram.y" { - yyval.tag.nopasswd = true; + TAGS_INIT(yyval.tag); } break; case 68: -#line 619 "gram.y" +#line 659 "gram.y" { - yyval.tag.nopasswd = false; + yyval.tag.nopasswd = true; } break; case 69: -#line 622 "gram.y" +#line 662 "gram.y" { - yyval.tag.noexec = true; + yyval.tag.nopasswd = false; } break; case 70: -#line 625 "gram.y" +#line 665 "gram.y" { - yyval.tag.noexec = false; + yyval.tag.noexec = true; } break; case 71: -#line 628 "gram.y" +#line 668 "gram.y" { - yyval.tag.setenv = true; + yyval.tag.noexec = false; } break; case 72: -#line 631 "gram.y" +#line 671 "gram.y" { - yyval.tag.setenv = false; + yyval.tag.setenv = true; } break; case 73: -#line 634 "gram.y" +#line 674 "gram.y" { - yyval.tag.log_input = true; + yyval.tag.setenv = false; } break; case 74: -#line 637 "gram.y" +#line 677 "gram.y" { - yyval.tag.log_input = false; + yyval.tag.log_input = true; } break; case 75: -#line 640 "gram.y" +#line 680 "gram.y" { - yyval.tag.log_output = true; + yyval.tag.log_input = false; } break; case 76: -#line 643 "gram.y" +#line 683 "gram.y" { - yyval.tag.log_output = false; + yyval.tag.log_output = true; } break; case 77: -#line 646 "gram.y" +#line 686 "gram.y" { - yyval.tag.follow = true; + yyval.tag.log_output = false; } break; case 78: -#line 649 "gram.y" +#line 689 "gram.y" { - yyval.tag.follow = false; + yyval.tag.follow = true; } break; case 79: -#line 652 "gram.y" +#line 692 "gram.y" { - yyval.tag.send_mail = true; + yyval.tag.follow = false; } break; case 80: -#line 655 "gram.y" +#line 695 "gram.y" { - yyval.tag.send_mail = false; + yyval.tag.send_mail = true; } break; case 81: -#line 660 "gram.y" +#line 698 "gram.y" +{ + yyval.tag.send_mail = false; + } +break; +case 82: +#line 703 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1886,8 +1921,8 @@ } } break; -case 82: -#line 667 "gram.y" +case 83: +#line 710 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1896,8 +1931,8 @@ } } break; -case 83: -#line 674 "gram.y" +case 84: +#line 717 "gram.y" { struct sudo_command *c = calloc(1, sizeof(*c)); if (c == NULL) { @@ -1914,8 +1949,8 @@ } } break; -case 86: -#line 695 "gram.y" +case 87: +#line 738 "gram.y" { const char *s; s = alias_add(yyvsp[-2].string, HOSTALIAS, sudoers, this_lineno, yyvsp[0].member); @@ -1925,15 +1960,15 @@ } } break; -case 88: -#line 706 "gram.y" +case 89: +#line 749 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 91: -#line 716 "gram.y" +case 92: +#line 759 "gram.y" { const char *s; s = alias_add(yyvsp[-2].string, CMNDALIAS, sudoers, this_lineno, yyvsp[0].member); @@ -1943,15 +1978,15 @@ } } break; -case 93: -#line 727 "gram.y" +case 94: +#line 770 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 96: -#line 737 "gram.y" +case 97: +#line 780 "gram.y" { const char *s; s = alias_add(yyvsp[-2].string, RUNASALIAS, sudoers, this_lineno, yyvsp[0].member); @@ -1961,8 +1996,8 @@ } } break; -case 99: -#line 751 "gram.y" +case 100: +#line 794 "gram.y" { const char *s; s = alias_add(yyvsp[-2].string, USERALIAS, sudoers, this_lineno, yyvsp[0].member); @@ -1972,29 +2007,29 @@ } } break; -case 101: -#line 762 "gram.y" +case 102: +#line 805 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 102: -#line 768 "gram.y" +case 103: +#line 811 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 103: -#line 772 "gram.y" +case 104: +#line 815 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 104: -#line 778 "gram.y" +case 105: +#line 821 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2003,8 +2038,8 @@ } } break; -case 105: -#line 785 "gram.y" +case 106: +#line 828 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2013,8 +2048,8 @@ } } break; -case 106: -#line 792 "gram.y" +case 107: +#line 835 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2023,8 +2058,8 @@ } } break; -case 107: -#line 799 "gram.y" +case 108: +#line 842 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2033,8 +2068,8 @@ } } break; -case 108: -#line 806 "gram.y" +case 109: +#line 849 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2043,29 +2078,29 @@ } } break; -case 110: -#line 816 "gram.y" +case 111: +#line 859 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 111: -#line 822 "gram.y" +case 112: +#line 865 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 112: -#line 826 "gram.y" +case 113: +#line 869 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 113: -#line 832 "gram.y" +case 114: +#line 875 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2074,8 +2109,8 @@ } } break; -case 114: -#line 839 "gram.y" +case 115: +#line 882 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2084,8 +2119,8 @@ } } break; -case 115: -#line 846 "gram.y" +case 116: +#line 889 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2094,7 +2129,7 @@ } } break; -#line 2045 "gram.c" +#line 2080 "gram.c" } yyssp -= yym; yystate = *yyssp; diff -Nru sudo-1.8.19p1/plugins/sudoers/gram.h sudo-1.8.20p2/plugins/sudoers/gram.h --- sudo-1.8.19p1/plugins/sudoers/gram.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/gram.h 2017-05-10 15:38:43.000000000 +0000 @@ -36,11 +36,14 @@ #define ROLE 292 #define PRIVS 293 #define LIMITPRIVS 294 -#define MYSELF 295 -#define SHA224_TOK 296 -#define SHA256_TOK 297 -#define SHA384_TOK 298 -#define SHA512_TOK 299 +#define CMND_TIMEOUT 295 +#define NOTBEFORE 296 +#define NOTAFTER 297 +#define MYSELF 298 +#define SHA224_TOK 299 +#define SHA256_TOK 300 +#define SHA384_TOK 301 +#define SHA512_TOK 302 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -51,9 +54,8 @@ struct privilege *privilege; struct sudo_digest *digest; struct sudo_command command; + struct command_options options; struct cmndtag tag; - struct selinux_info seinfo; - struct solaris_privs_info privinfo; char *string; int tok; } YYSTYPE; diff -Nru sudo-1.8.19p1/plugins/sudoers/gram.y sudo-1.8.20p2/plugins/sudoers/gram.y --- sudo-1.8.19p1/plugins/sudoers/gram.y 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/gram.y 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ %{ /* - * Copyright (c) 1996, 1998-2005, 2007-2013, 2014-2016 + * Copyright (c) 1996, 1998-2005, 2007-2013, 2014-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -43,7 +43,7 @@ #if defined(YYBISON) && defined(HAVE_ALLOCA_H) && !defined(__GNUC__) # include #endif /* YYBISON && HAVE_ALLOCA_H && !__GNUC__ */ -#include +#include #include "sudoers.h" /* XXX */ #include "parse.h" @@ -66,11 +66,12 @@ /* * Local protoypes */ +static void init_options(struct command_options *opts); static bool add_defaults(int, struct member *, struct defaults *); static bool add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, short); static struct member *new_member(char *, int); -static struct sudo_digest *new_digest(int, const char *); +static struct sudo_digest *new_digest(int, char *); %} %union { @@ -81,9 +82,8 @@ struct privilege *privilege; struct sudo_digest *digest; struct sudo_command command; + struct command_options options; struct cmndtag tag; - struct selinux_info seinfo; - struct solaris_privs_info privinfo; char *string; int tok; } @@ -129,6 +129,9 @@ %token ROLE /* SELinux role */ %token PRIVS /* Solaris privileges */ %token LIMITPRIVS /* Solaris limit privileges */ +%token CMND_TIMEOUT /* command timeout */ +%token NOTBEFORE /* time restriction */ +%token NOTAFTER /* time restriction */ %token MYSELF /* run as myself, not another user */ %token SHA224_TOK /* sha224 token */ %token SHA256_TOK /* sha256 token */ @@ -157,13 +160,16 @@ %type privilege %type privileges %type cmndtag -%type selinux +%type options %type rolespec %type typespec -%type solarisprivs %type privsspec %type limitprivsspec +%type timeoutspec +%type notbeforespec +%type notafterspec %type digest +%type options %% @@ -339,18 +345,26 @@ HLTQ_CONCAT($1, $3, entries); #ifdef HAVE_SELINUX /* propagate role and type */ - if ($3->role == NULL) + if ($3->role == NULL && $3->type == NULL) { $3->role = prev->role; - if ($3->type == NULL) $3->type = prev->type; + } #endif /* HAVE_SELINUX */ #ifdef HAVE_PRIV_SET /* propagate privs & limitprivs */ - if ($3->privs == NULL) + if ($3->privs == NULL && $3->limitprivs == NULL) { $3->privs = prev->privs; - if ($3->limitprivs == NULL) $3->limitprivs = prev->limitprivs; + } #endif /* HAVE_PRIV_SET */ + /* propagate command time restrictions */ + if ($3->notbefore == UNSPEC) + $3->notbefore = prev->notbefore; + if ($3->notafter == UNSPEC) + $3->notafter = prev->notafter; + /* propagate command timeout */ + if ($3->timeout == UNSPEC) + $3->timeout = prev->timeout; /* propagate tags and runas list */ if ($3->tags.nopasswd == UNSPEC) $3->tags.nopasswd = prev->tags.nopasswd; @@ -378,7 +392,7 @@ } ; -cmndspec : runasspec selinux solarisprivs cmndtag digcmnd { +cmndspec : runasspec options cmndtag digcmnd { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { sudoerserror(N_("unable to allocate memory")); @@ -412,11 +426,14 @@ cs->type = $2.type; #endif #ifdef HAVE_PRIV_SET - cs->privs = $3.privs; - cs->limitprivs = $3.limitprivs; + cs->privs = $2.privs; + cs->limitprivs = $2.limitprivs; #endif - cs->tags = $4; - cs->cmnd = $5; + cs->notbefore = $2.notbefore; + cs->notafter = $2.notafter; + cs->timeout = $2.timeout; + cs->tags = $3; + cs->cmnd = $4; HLTQ_INIT(cs, entries); /* sudo "ALL" implies the SETENV tag */ if (cs->cmnd->type == ALL && !cs->cmnd->negated && @@ -480,66 +497,36 @@ } ; -rolespec : ROLE '=' WORD { +timeoutspec : CMND_TIMEOUT '=' WORD { $$ = $3; } ; -typespec : TYPE '=' WORD { +notbeforespec : NOTBEFORE '=' WORD { $$ = $3; } - ; -selinux : /* empty */ { - $$.role = NULL; - $$.type = NULL; - } - | rolespec { - $$.role = $1; - $$.type = NULL; - } - | typespec { - $$.type = $1; - $$.role = NULL; - } - | rolespec typespec { - $$.role = $1; - $$.type = $2; - } - | typespec rolespec { - $$.type = $1; - $$.role = $2; +notafterspec : NOTAFTER '=' WORD { + $$ = $3; } ; -privsspec : PRIVS '=' WORD { +rolespec : ROLE '=' WORD { $$ = $3; } ; -limitprivsspec : LIMITPRIVS '=' WORD { + +typespec : TYPE '=' WORD { $$ = $3; } ; -solarisprivs : /* empty */ { - $$.privs = NULL; - $$.limitprivs = NULL; - } - | privsspec { - $$.privs = $1; - $$.limitprivs = NULL; - } - | limitprivsspec { - $$.privs = NULL; - $$.limitprivs = $1; - } - | privsspec limitprivsspec { - $$.privs = $1; - $$.limitprivs = $2; +privsspec : PRIVS '=' WORD { + $$ = $3; } - | limitprivsspec privsspec { - $$.limitprivs = $1; - $$.privs = $2; + ; +limitprivsspec : LIMITPRIVS '=' WORD { + $$ = $3; } ; @@ -610,6 +597,62 @@ } ; +options : /* empty */ { + init_options(&$$); + } + | options notbeforespec { + $$.notbefore = parse_gentime($2); + free($2); + if ($$.notbefore == -1) { + sudoerserror(N_("invalid notbefore value")); + YYERROR; + } + } + | options notafterspec { + $$.notafter = parse_gentime($2); + free($2); + if ($$.notafter == -1) { + sudoerserror(N_("invalid notafter value")); + YYERROR; + } + } + | options timeoutspec { + $$.timeout = parse_timeout($2); + free($2); + if ($$.timeout == -1) { + if (errno == ERANGE) + sudoerserror(N_("timeout value too large")); + else + sudoerserror(N_("invalid timeout value")); + YYERROR; + } + } + | options rolespec { +#ifdef HAVE_SELINUX + free($$.role); + $$.role = $2; +#endif + } + | options typespec { +#ifdef HAVE_SELINUX + free($$.type); + $$.type = $2; +#endif + } + | options privsspec { +#ifdef HAVE_PRIV_SET + free($$.privs); + $$.privs = $2; +#endif + } + | options limitprivsspec { +#ifdef HAVE_PRIV_SET + free($$.limitprivs); + $$.limitprivs = $2; +#endif + } + ; + cmndtag : /* empty */ { TAGS_INIT($$); } @@ -926,7 +969,7 @@ } static struct sudo_digest * -new_digest(int digest_type, const char *digest_str) +new_digest(int digest_type, char *digest_str) { struct sudo_digest *dig; debug_decl(new_digest, SUDOERS_DEBUG_PARSER) @@ -938,7 +981,7 @@ } dig->digest_type = digest_type; - dig->digest_str = strdup(digest_str); + dig->digest_str = digest_str; if (dig->digest_str == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unable to allocate memory"); @@ -1116,6 +1159,10 @@ (struct sudo_command *) cs->cmnd->name; free(c->cmnd); free(c->args); + if (c->digest != NULL) { + free(c->digest->digest_str); + free(c->digest); + } } free(cs->cmnd->name); free(cs->cmnd); @@ -1167,3 +1214,22 @@ debug_return_bool(ret); } + +/* + * Initialize all options in a cmndspec. + */ +static void +init_options(struct command_options *opts) +{ + opts->notbefore = UNSPEC; + opts->notafter = UNSPEC; + opts->timeout = UNSPEC; +#ifdef HAVE_SELINUX + opts->role = NULL; + opts->type = NULL; +#endif +#ifdef HAVE_PRIV_SET + opts->privs = NULL; + opts->limitprivs = NULL; +#endif +} diff -Nru sudo-1.8.19p1/plugins/sudoers/interfaces.c sudo-1.8.20p2/plugins/sudoers/interfaces.c --- sudo-1.8.19p1/plugins/sudoers/interfaces.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/interfaces.c 2017-01-14 04:30:22.000000000 +0000 @@ -43,7 +43,7 @@ # define INADDR_NONE ((unsigned int)-1) #endif -static struct interface_list interfaces; +static struct interface_list interfaces = SLIST_HEAD_INITIALIZER(interfaces); /* * Parse a space-delimited list of IP address/netmask pairs and diff -Nru sudo-1.8.19p1/plugins/sudoers/iolog.c sudo-1.8.20p2/plugins/sudoers/iolog.c --- sudo-1.8.19p1/plugins/sudoers/iolog.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/iolog.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2016 Todd C. Miller + * Copyright (c) 2009-2017 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 @@ -71,10 +71,13 @@ static bool warned = false; static struct timeval last_time; static unsigned int sessid_max = SESSID_MAX; -static uid_t iolog_uid = ROOT_UID; -static gid_t iolog_gid = (gid_t)-1; static mode_t iolog_filemode = S_IRUSR|S_IWUSR; static mode_t iolog_dirmode = S_IRWXU; +static bool iolog_gid_set; + +/* shared with set_perms.c */ +uid_t iolog_uid = ROOT_UID; +gid_t iolog_gid = ROOT_GID; /* sudoers_io is declared at the end of this file. */ extern __dso_public struct io_plugin sudoers_io; @@ -83,18 +86,27 @@ * Create directory and any parent directories as needed. */ static bool -io_mkdirs(char *path, uid_t uid, gid_t *gidp, mode_t mode, bool set_intermediate) +io_mkdirs(char *path) { struct stat sb; - uid_t parent_uid; - gid_t parent_gid; - mode_t parent_mode; - bool ok = true; + bool ok, uid_changed = false; debug_decl(io_mkdirs, SUDOERS_DEBUG_UTIL) - if (stat(path, &sb) == 0) { + ok = stat(path, &sb) == 0; + if (!ok && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + if (set_perms(PERM_IOLOG)) { + ok = stat(path, &sb) == 0; + if (!restore_perms()) + ok = false; + } + } + if (ok) { if (S_ISDIR(sb.st_mode)) { - parent_gid = sb.st_gid; + if (sb.st_uid != iolog_uid || sb.st_gid != iolog_gid) + ignore_result(chown(path, iolog_uid, iolog_gid)); + if ((sb.st_mode & ALLPERMS) != iolog_dirmode) + ignore_result(chmod(path, iolog_dirmode)); } else { sudo_warnx(U_("%s exists but is not a directory (0%o)"), path, (unsigned int) sb.st_mode); @@ -103,35 +115,34 @@ goto done; } - /* Parent directory ownership and mode. */ - if (!set_intermediate) { - parent_mode = S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH; - parent_uid = ROOT_UID; - parent_gid = (gid_t)-1; - } else { - parent_mode = mode; - parent_uid = uid; - parent_gid = *gidp; + ok = sudo_mkdir_parents(path, iolog_uid, iolog_gid, iolog_dirmode, true); + if (!ok && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + uid_changed = set_perms(PERM_IOLOG); + ok = sudo_mkdir_parents(path, -1, -1, iolog_dirmode, false); } - - ok = sudo_mkdir_parents(path, parent_uid, &parent_gid, parent_mode, false); if (ok) { - /* Use group ID if specified, else parent gid. */ - gid_t gid = *gidp != (gid_t)-1 ? *gidp : parent_gid; - /* Create final path component. */ sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "mkdir %s, mode 0%o", path, (unsigned int) mode); - if (mkdir(path, mode) != 0 && errno != EEXIST) { - sudo_warnx(U_("unable to mkdir %s"), path); - ok = false; + "mkdir %s, mode 0%o", path, (unsigned int) iolog_dirmode); + ok = mkdir(path, iolog_dirmode) == 0 || errno == EEXIST; + if (!ok) { + if (errno == EACCES && !uid_changed) { + /* Try again as the I/O log owner (for NFS). */ + uid_changed = set_perms(PERM_IOLOG); + ok = mkdir(path, iolog_dirmode) == 0 || errno == EEXIST; + } + if (!ok) + sudo_warn(U_("unable to mkdir %s"), path); } else { - ignore_result(chown(path, uid, gid)); + ignore_result(chown(path, iolog_uid, iolog_gid)); } } + if (uid_changed) { + if (!restore_perms()) + ok = false; + } done: - if (ok && *gidp == (gid_t)-1) - *gidp = parent_gid; debug_return_bool(ok); } @@ -139,43 +150,40 @@ * Create temporary directory and any parent directories as needed. */ static bool -io_mkdtemp(char *path, uid_t uid, gid_t *gidp, mode_t mode, bool set_intermediate) +io_mkdtemp(char *path) { - uid_t parent_uid; - gid_t parent_gid; - mode_t parent_mode; bool ok = true; + bool uid_changed = false; debug_decl(io_mkdtemp, SUDOERS_DEBUG_UTIL) - /* Parent directory ownership and mode. */ - if (!set_intermediate) { - parent_mode = S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH; - parent_uid = ROOT_UID; - parent_gid = (gid_t)-1; - } else { - parent_mode = mode; - parent_uid = uid; - parent_gid = *gidp; + ok = sudo_mkdir_parents(path, iolog_uid, iolog_gid, iolog_dirmode, true); + if (!ok && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + uid_changed = set_perms(PERM_IOLOG); + ok = sudo_mkdir_parents(path, -1, -1, iolog_dirmode, false); } - - ok = sudo_mkdir_parents(path, parent_uid, &parent_gid, parent_mode, false); if (ok) { - /* Use group ID if specified, else parent gid. */ - gid_t gid = *gidp != (gid_t)-1 ? *gidp : parent_gid; - /* Create final path component. */ sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "mkdtemp %s", path); + /* We cannot retry mkdtemp() so always use PERM_IOLOG */ + if (!uid_changed) + uid_changed = set_perms(PERM_IOLOG); if (mkdtemp(path) == NULL) { sudo_warn(U_("unable to mkdir %s"), path); ok = false; } else { - ignore_result(chown(path, uid, gid)); + if (chmod(path, iolog_dirmode) != 0) { + sudo_warn(U_("unable to change mode of %s to 0%o"), + path, (unsigned int)iolog_dirmode); + } } } - if (ok && *gidp == (gid_t)-1) - *gidp = parent_gid; + if (uid_changed) { + if (!restore_perms()) + ok = false; + } debug_return_bool(ok); } @@ -217,25 +225,31 @@ } /* - * Look up I/O log user ID from user name. + * Look up I/O log user ID from user name. Sets iolog_uid. + * Also sets iolog_gid if iolog_group not specified. */ static bool -iolog_set_uid(const char *name) +iolog_set_user(const char *name) { struct passwd *pw; - debug_decl(iolog_set_uid, SUDOERS_DEBUG_UTIL) + debug_decl(iolog_set_user, SUDOERS_DEBUG_UTIL) if (name != NULL) { pw = sudo_getpwnam(name); if (pw != NULL) { iolog_uid = pw->pw_uid; + if (!iolog_gid_set) + iolog_gid = pw->pw_gid; sudo_pw_delref(pw); } else { log_warningx(SLOG_SEND_MAIL, N_("unknown user: %s"), name); } } else { + /* Reset to default. */ iolog_uid = ROOT_UID; + if (!iolog_gid_set) + iolog_gid = ROOT_GID; } debug_return_bool(true); @@ -247,29 +261,33 @@ bool cb_iolog_user(const union sudo_defs_val *sd_un) { - return iolog_set_uid(sd_un->str); + return iolog_set_user(sd_un->str); } /* * Look up I/O log group ID from group name. + * Sets iolog_gid. */ static bool -iolog_set_gid(const char *name) +iolog_set_group(const char *name) { struct group *gr; - debug_decl(iolog_set_gid, SUDOERS_DEBUG_UTIL) + debug_decl(iolog_set_group, SUDOERS_DEBUG_UTIL) if (name != NULL) { gr = sudo_getgrnam(name); if (gr != NULL) { iolog_gid = gr->gr_gid; + iolog_gid_set = true; sudo_gr_delref(gr); } else { log_warningx(SLOG_SEND_MAIL, N_("unknown group: %s"), name); } } else { - iolog_gid = (mode_t)-1; + /* Reset to default. */ + iolog_gid = ROOT_GID; + iolog_gid_set = false; } debug_return_bool(true); @@ -281,7 +299,7 @@ bool cb_iolog_group(const union sudo_defs_val *sd_un) { - return iolog_set_gid(sd_un->str); + return iolog_set_group(sd_un->str); } /* @@ -292,13 +310,14 @@ { debug_decl(iolog_set_mode, SUDOERS_DEBUG_UTIL) - /* Restrict file mode to a subset of 0666. */ - iolog_filemode = mode & (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); + /* I/O log files must be readable and writable by owner. */ + iolog_filemode = S_IRUSR|S_IWUSR; + + /* Add in group and other read/write if specified. */ + iolog_filemode |= mode & (S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); /* For directory mode, add execute bits as needed. */ - iolog_dirmode = iolog_filemode; - if (iolog_dirmode & (S_IRUSR|S_IWUSR)) - iolog_dirmode |= S_IXUSR; + iolog_dirmode = iolog_filemode | S_IXUSR; if (iolog_dirmode & (S_IRGRP|S_IWGRP)) iolog_dirmode |= S_IXGRP; if (iolog_dirmode & (S_IROTH|S_IWOTH)) @@ -317,6 +336,33 @@ } /* + * Wrapper for open(2) that retries with PERM_IOLOG if open(2) + * returns EACCES. + */ +static int +io_open(const char *path, int flags, mode_t perm) +{ + int fd; + debug_decl(io_open, SUDOERS_DEBUG_UTIL) + + fd = open(path, flags, perm); + if (fd == -1 && errno == EACCES) { + /* Try again as the I/O log owner (for NFS). */ + if (set_perms(PERM_IOLOG)) { + fd = open(path, flags, perm); + if (!restore_perms()) { + /* restore_perms() warns on error. */ + if (fd != -1) { + close(fd); + fd = -1; + } + } + } + } + debug_return_int(fd); +} + +/* * Read the on-disk sequence number, set sessid to the next * number, and update the on-disk copy. * Uses file locking to avoid sequence number collisions. @@ -328,18 +374,20 @@ char buf[32], *ep; int i, len, fd = -1; unsigned long id = 0; - gid_t gid = iolog_gid; + mode_t omask; ssize_t nread; bool ret = false; char pathbuf[PATH_MAX]; static const char b36char[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; debug_decl(io_nextid, SUDOERS_DEBUG_UTIL) + /* umask must not be more restrictive than the file modes. */ + omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); + /* * Create I/O log directory if it doesn't already exist. - * Avoid modifying iolog_gid at this point. */ - if (!io_mkdirs(iolog_dir, iolog_uid, &gid, iolog_dirmode, false)) + if (!io_mkdirs(iolog_dir)) goto done; /* @@ -351,13 +399,13 @@ log_warning(SLOG_SEND_MAIL, "%s/seq", pathbuf); goto done; } - fd = open(pathbuf, O_RDWR|O_CREAT, iolog_filemode); + fd = io_open(pathbuf, O_RDWR|O_CREAT, iolog_filemode); if (fd == -1) { log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), pathbuf); goto done; } sudo_lock_file(fd, SUDO_LOCK); - ignore_result(fchown(fd, iolog_uid, gid)); + ignore_result(fchown(fd, iolog_uid, iolog_gid)); /* * If there is no seq file in iolog_dir and a fallback dir was @@ -371,9 +419,9 @@ len = snprintf(fallback, sizeof(fallback), "%s/seq", iolog_dir_fallback); if (len > 0 && (size_t)len < sizeof(fallback)) { - int fd2 = open(fallback, O_RDWR|O_CREAT, iolog_filemode); + int fd2 = io_open(fallback, O_RDWR|O_CREAT, iolog_filemode); if (fd2 != -1) { - ignore_result(fchown(fd2, iolog_uid, gid)); + ignore_result(fchown(fd2, iolog_uid, iolog_gid)); nread = read(fd2, buf, sizeof(buf) - 1); if (nread > 0) { if (buf[nread - 1] == '\n') @@ -439,6 +487,7 @@ ret = true; done: + umask(omask); if (fd != -1) close(fd); debug_return_bool(ret); @@ -469,9 +518,9 @@ * Sets iolog_gid (if it is not already set) as a side effect. */ if (len >= 6 && strcmp(&pathbuf[len - 6], "XXXXXX") == 0) - ok = io_mkdtemp(pathbuf, iolog_uid, &iolog_gid, iolog_dirmode, true); + ok = io_mkdtemp(pathbuf); else - ok = io_mkdirs(pathbuf, iolog_uid, &iolog_gid, iolog_dirmode, true); + ok = io_mkdirs(pathbuf); debug_return_size_t(ok ? len : (size_t)-1); } @@ -490,7 +539,7 @@ pathbuf[len] = '\0'; strlcat(pathbuf, iol->suffix, PATH_MAX); if (iol->enabled) { - int fd = open(pathbuf, O_CREAT|O_TRUNC|O_WRONLY, iolog_filemode); + int fd = io_open(pathbuf, O_CREAT|O_TRUNC|O_WRONLY, iolog_filemode); if (fd != -1) { ignore_result(fchown(fd, iolog_uid, iolog_gid)); (void)fcntl(fd, F_SETFD, FD_CLOEXEC); @@ -629,11 +678,11 @@ continue; } if (strncmp(*cur, "iolog_group=", sizeof("iolog_group=") - 1) == 0) { - iolog_set_gid(*cur + sizeof("iolog_group=") - 1); + iolog_set_group(*cur + sizeof("iolog_group=") - 1); continue; } if (strncmp(*cur, "iolog_user=", sizeof("iolog_user=") - 1) == 0) { - iolog_set_uid(*cur + sizeof("iolog_user=") - 1); + iolog_set_user(*cur + sizeof("iolog_user=") - 1); continue; } break; @@ -709,6 +758,7 @@ /* * Write the "/log" file that contains the user and command info. + * This file is not compressed. */ static bool write_info_log(char *pathbuf, size_t len, struct iolog_details *details, @@ -722,7 +772,7 @@ pathbuf[len] = '\0'; strlcat(pathbuf, "/log", PATH_MAX); - fd = open(pathbuf, O_CREAT|O_TRUNC|O_WRONLY, iolog_filemode); + fd = io_open(pathbuf, O_CREAT|O_TRUNC|O_WRONLY, iolog_filemode); if (fd == -1 || (fp = fdopen(fd, "w")) == NULL) { log_warning(SLOG_SEND_MAIL, N_("unable to create %s"), pathbuf); debug_return_bool(false); @@ -747,6 +797,57 @@ debug_return_bool(ret); } +#ifdef HAVE_ZLIB_H +static const char * +gzstrerror(gzFile file) +{ + int errnum; + + return gzerror(file, &errnum); +} +#endif /* HAVE_ZLIB_H */ + +/* + * Write to an I/O log, compressing if iolog_compress is enabled. + * If def_iolog_flush is true, flush the buffer immediately. + */ +static const char * +iolog_write(const void *buf, unsigned int len, int idx) +{ + const char *errstr = NULL; + debug_decl(iolog_write, SUDOERS_DEBUG_PLUGIN) + +#ifdef HAVE_ZLIB_H + if (iolog_compress) { + if (gzwrite(io_log_files[idx].fd.g, (const voidp)buf, len) != (int)len) { + errstr = gzstrerror(io_log_files[idx].fd.g); + goto done; + } + if (def_iolog_flush) { + if (gzflush(io_log_files[idx].fd.g, Z_SYNC_FLUSH) != Z_OK) { + errstr = gzstrerror(io_log_files[idx].fd.g); + goto done; + } + } + } else +#endif + { + if (fwrite(buf, 1, len, io_log_files[idx].fd.f) != len) { + errstr = strerror(errno); + goto done; + } + if (def_iolog_flush) { + if (fflush(io_log_files[idx].fd.f) != 0) { + errstr = strerror(errno); + goto done; + } + } + } + +done: + debug_return_const_str(errstr); +} + static int sudoers_io_open(unsigned int version, sudo_conv_t conversation, sudo_printf_t plugin_printf, char * const settings[], @@ -759,6 +860,7 @@ char * const *cur; const char *cp, *plugin_path = NULL; size_t len; + mode_t omask; int i, ret = -1; debug_decl(sudoers_io_open, SUDOERS_DEBUG_PLUGIN) @@ -784,6 +886,10 @@ continue; } } + + /* umask must not be more restrictive than the file modes. */ + omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); + if (!sudoers_debug_register(plugin_path, &debug_files)) { ret = -1; goto done; @@ -852,6 +958,7 @@ ret = true; done: + umask(omask); free(tofree); if (iolog_details.runas_pw) sudo_pw_delref(iolog_details.runas_pw); @@ -914,13 +1021,15 @@ /* * Generic I/O logging function. Called by the I/O logging entry points. + * Returns 1 on success and -1 on error. */ static int sudoers_io_log(const char *buf, unsigned int len, int idx) { struct timeval now, delay; + char tbuf[1024]; const char *errstr = NULL; - int ret = true; + int ret = -1; debug_decl(sudoers_io_version, SUDOERS_DEBUG_PLUGIN) if (io_log_files[idx].fd.v == NULL) { @@ -931,41 +1040,28 @@ gettimeofday(&now, NULL); -#ifdef HAVE_ZLIB_H - if (iolog_compress) { - if (gzwrite(io_log_files[idx].fd.g, (const voidp)buf, len) != (int)len) { - int errnum; + /* Write I/O log file entry. */ + errstr = iolog_write(buf, len, idx); + if (errstr != NULL) + goto done; - errstr = gzerror(io_log_files[idx].fd.g, &errnum); - ret = -1; - } - } else -#endif - { - if (fwrite(buf, 1, len, io_log_files[idx].fd.f) != len) { - errstr = strerror(errno); - ret = -1; - } - } + /* Write timing file entry. */ sudo_timevalsub(&now, &last_time, &delay); -#ifdef HAVE_ZLIB_H - if (iolog_compress) { - if (gzprintf(io_log_files[IOFD_TIMING].fd.g, "%d %f %u\n", idx, - delay.tv_sec + ((double)delay.tv_usec / 1000000), len) == 0) { - int errnum; - - errstr = gzerror(io_log_files[IOFD_TIMING].fd.g, &errnum); - ret = -1; - } - } else -#endif - { - if (fprintf(io_log_files[IOFD_TIMING].fd.f, "%d %f %u\n", idx, - delay.tv_sec + ((double)delay.tv_usec / 1000000), len) < 0) { - errstr = strerror(errno); - ret = -1; - } + len = (unsigned int)snprintf(tbuf, sizeof(tbuf), "%d %f %u\n", idx, + delay.tv_sec + ((double)delay.tv_usec / 1000000), len); + if (len >= sizeof(tbuf)) { + /* Not actually possible due to the size of tbuf[]. */ + errstr = strerror(EOVERFLOW); + goto done; } + errstr = iolog_write(tbuf, len, IOFD_TIMING); + if (errstr != NULL) + goto done; + + /* Success. */ + ret = 1; + +done: last_time.tv_sec = now.tv_sec; last_time.tv_usec = now.tv_usec; @@ -979,7 +1075,7 @@ /* Ignore errors if they occur if the policy says so. */ if (iolog_details.ignore_iolog_errors) - ret = true; + ret = 1; } debug_return_int(ret); diff -Nru sudo-1.8.19p1/plugins/sudoers/ldap.c sudo-1.8.20p2/plugins/sudoers/ldap.c --- sudo-1.8.19p1/plugins/sudoers/ldap.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/ldap.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2016 Todd C. Miller + * Copyright (c) 2003-2017 Todd C. Miller * * This code is derived from software contributed by Aaron Spangler. * @@ -258,6 +258,7 @@ char *tls_certfile; char *tls_keyfile; char *tls_keypw; + char *sasl_mech; char *sasl_auth_id; char *rootsasl_auth_id; char *sasl_secprops; @@ -326,6 +327,7 @@ { "netgroup_search_filter", CONF_STR, -1, &ldap_conf.netgroup_search_filter }, #ifdef HAVE_LDAP_SASL_INTERACTIVE_BIND_S { "use_sasl", CONF_BOOL, -1, &ldap_conf.use_sasl }, + { "sasl_mech", CONF_STR, -1, &ldap_conf.sasl_mech }, { "sasl_auth_id", CONF_STR, -1, &ldap_conf.sasl_auth_id }, { "rootuse_sasl", CONF_BOOL, -1, &ldap_conf.rootuse_sasl }, { "rootsasl_auth_id", CONF_STR, -1, &ldap_conf.rootsasl_auth_id }, @@ -966,10 +968,8 @@ cp++; *cmnd = cp; DPRINTF1("%s digest %s for %s", - digest_type == SUDO_DIGEST_SHA224 ? "sha224" : - digest_type == SUDO_DIGEST_SHA256 ? "sha256" : - digest_type == SUDO_DIGEST_SHA384 ? "sha384" : - "sha512", digest->digest_str, cp); + digest_type_to_name(digest_type), + digest->digest_str, cp); debug_return_ptr(digest); } } @@ -2183,7 +2183,17 @@ } #ifdef HAVE_LDAP_SASL_INTERACTIVE_BIND_S if (ldap_conf.use_sasl != -1) { + if (ldap_conf.sasl_mech == NULL) { + /* Default mechanism is GSSAPI. */ + ldap_conf.sasl_mech = strdup("GSSAPI"); + if (ldap_conf.sasl_mech == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } + } DPRINTF1("use_sasl %s", ldap_conf.use_sasl ? "yes" : "no"); + DPRINTF1("sasl_mech %s", ldap_conf.sasl_mech); DPRINTF1("sasl_auth_id %s", ldap_conf.sasl_auth_id ? ldap_conf.sasl_auth_id : "(NONE)"); DPRINTF1("rootuse_sasl %d", @@ -2467,6 +2477,20 @@ sudo_lbuf_append(lbuf, negated ? "NOSETENV: " : "SETENV: "); else if (strcmp(val, "mail_all_cmnds") == 0 || strcmp(val, "mail_always") == 0) sudo_lbuf_append(lbuf, negated ? "NOMAIL: " : "MAIL: "); + else if (!negated && strncmp(val, "command_timeout=", 16) == 0) + sudo_lbuf_append(lbuf, "TIMEOUT=%s ", val + 16); +#ifdef HAVE_SELINUX + else if (!negated && strncmp(val, "role=", 5) == 0) + sudo_lbuf_append(lbuf, "ROLE=%s ", val + 5); + else if (!negated && strncmp(val, "type=", 5) == 0) + sudo_lbuf_append(lbuf, "TYPE=%s ", val + 5); +#endif /* HAVE_SELINUX */ +#ifdef HAVE_PRIV_SET + else if (!negated && strncmp(val, "privs=", 6) == 0) + sudo_lbuf_append(lbuf, "PRIVS=%s ", val + 6); + else if (!negated && strncmp(val, "limitprivs=", 11) == 0) + sudo_lbuf_append(lbuf, "LIMITPRIVS=%s ", val + 11); +#endif /* HAVE_PRIV_SET */ } ldap_value_free_len(bv); } @@ -3002,7 +3026,7 @@ static int sudo_ldap_bind_s(LDAP *ld) { - int ret; + int rc, ret; debug_decl(sudo_ldap_bind_s, SUDOERS_DEBUG_LDAP) #ifdef HAVE_LDAP_SASL_INTERACTIVE_BIND_S @@ -3025,27 +3049,28 @@ } if (new_ccname != NULL) { - ret = sudo_set_krb5_ccache_name(new_ccname, &old_ccname); - if (ret == 0) { + rc = sudo_set_krb5_ccache_name(new_ccname, &old_ccname); + if (rc == 0) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "set ccache name %s -> %s", old_ccname ? old_ccname : "(none)", new_ccname); } else { sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, - "sudo_set_krb5_ccache_name() failed: %d", ret); + "sudo_set_krb5_ccache_name() failed: %d", rc); } } - ret = ldap_sasl_interactive_bind_s(ld, ldap_conf.binddn, "GSSAPI", - NULL, NULL, LDAP_SASL_QUIET, sudo_ldap_sasl_interact, auth_id); + ret = ldap_sasl_interactive_bind_s(ld, ldap_conf.binddn, + ldap_conf.sasl_mech, NULL, NULL, LDAP_SASL_QUIET, + sudo_ldap_sasl_interact, auth_id); if (new_ccname != NULL) { - ret = sudo_set_krb5_ccache_name(old_ccname ? old_ccname : "", NULL); - if (ret == 0) { + rc = sudo_set_krb5_ccache_name(old_ccname ? old_ccname : "", NULL); + if (rc == 0) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "restore ccache name %s -> %s", new_ccname, old_ccname ? old_ccname : "(none)"); } else { sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, - "sudo_set_krb5_ccache_name() failed: %d", ret); + "sudo_set_krb5_ccache_name() failed: %d", rc); } /* Remove temporary copy of user's credential cache. */ if (tmp_ccname != NULL) diff -Nru sudo-1.8.19p1/plugins/sudoers/logging.c sudo-1.8.20p2/plugins/sudoers/logging.c --- sudo-1.8.19p1/plugins/sudoers/logging.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/logging.c 2017-01-14 04:30:22.000000000 +0000 @@ -73,8 +73,8 @@ va_list ap; debug_decl(mysyslog, SUDOERS_DEBUG_LOGGING) - va_start(ap, fmt); openlog("sudo", 0, def_syslog); + va_start(ap, fmt); vsyslog(pri, fmt, ap); va_end(ap); closelog(); diff -Nru sudo-1.8.19p1/plugins/sudoers/Makefile.in sudo-1.8.20p2/plugins/sudoers/Makefile.in --- sudo-1.8.19p1/plugins/sudoers/Makefile.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/Makefile.in 2017-05-19 14:42:27.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 1998-2005, 2007-2015 +# Copyright (c) 1996, 1998-2005, 2007-2017 # Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any @@ -145,15 +145,16 @@ PROGS = sudoers.la visudo sudoreplay testsudoers -TEST_PROGS = check_iolog_path check_fill check_wrap check_addr check_digest \ - check_base64 check_hexchar @SUDOERS_TEST_PROGS@ +TEST_PROGS = check_iolog_path check_fill check_wrap check_addr check_base64 \ + check_gentime check_hexchar check_digest @SUDOERS_TEST_PROGS@ AUTH_OBJS = sudo_auth.lo @AUTH_OBJS@ -LIBPARSESUDOERS_OBJS = alias.lo audit.lo base64.lo defaults.lo hexchar.lo \ - gram.lo match.lo match_addr.lo pwutil.lo pwutil_impl.lo \ - rcstr.lo redblack.lo sudoers_debug.lo timestr.lo \ - toke.lo toke_util.lo +LIBPARSESUDOERS_OBJS = alias.lo audit.lo base64.lo defaults.lo digestname.lo \ + @FILEDIGEST@ gentime.lo gmtoff.lo gram.lo hexchar.lo \ + match.lo match_addr.lo pwutil.lo pwutil_impl.lo \ + rcstr.lo redblack.lo sudoers_debug.lo timeout.lo \ + timestr.lo toke.lo toke_util.lo SUDOERS_OBJS = $(AUTH_OBJS) boottime.lo check.lo editor.lo env.lo find_path.lo \ gc.lo goodpath.lo group_plugin.lo interfaces.lo iolog.lo \ @@ -174,10 +175,12 @@ CHECK_BASE64_OBJS = check_base64.o base64.o sudoers_debug.o -CHECK_DIGEST_OBJS = check_digest.o +CHECK_DIGEST_OBJS = check_digest.o @FILEDIGEST@ digestname.o sudoers_debug.o CHECK_FILL_OBJS = check_fill.o hexchar.o toke_util.o sudoers_debug.o +CHECK_GENTIME_OBJS = check_gentime.o gentime.o gmtoff.o sudoers_debug.o + CHECK_HEXCHAR_OBJS = check_hexchar.o hexchar.o sudoers_debug.o CHECK_IOLOG_PATH_OBJS = check_iolog_path.o iolog_path.o locale.o \ @@ -248,6 +251,9 @@ check_fill: $(CHECK_FILL_OBJS) $(LT_LIBS) $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) +check_gentime: $(CHECK_GENTIME_OBJS) $(LT_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_GENTIME_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + check_hexchar: $(CHECK_HEXCHAR_OBJS) $(LT_LIBS) $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_HEXCHAR_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @@ -343,8 +349,9 @@ install-sudoers: install-dirs $(INSTALL) -d $(INSTALL_OWNER) -m 0750 $(DESTDIR)$(sudoersdir)/sudoers.d + $(INSTALL) $(INSTALL_OWNER) -m $(sudoers_mode) sudoers $(DESTDIR)$(sudoersdir)/sudoers.dist test -r $(DESTDIR)$(sudoersdir)/sudoers || \ - $(INSTALL) $(INSTALL_OWNER) -m $(sudoers_mode) sudoers $(DESTDIR)$(sudoersdir)/sudoers + cp -p $(DESTDIR)$(sudoersdir)/sudoers.dist $(DESTDIR)$(sudoersdir)/sudoers uninstall: -$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sudoers.la @@ -354,8 +361,9 @@ $(DESTDIR)$(replaydir)/sudoreplay$(INSTALL_BACKUP) \ $(DESTDIR)$(visudodir)/visudo$(INSTALL_BACKUP) \ $(DESTDIR)$(plugindir)/sudoers.so$(INSTALL_BACKUP) - -cmp $(DESTDIR)$(sudoersdir)/sudoers $(srcdir)/sudoers >/dev/null && \ + -cmp $(DESTDIR)$(sudoersdir)/sudoers $(DESTDIR)$(sudoersdir)/sudoers.dist >/dev/null && \ rm -f $(DESTDIR)$(sudoersdir)/sudoers + -rm -f $(DESTDIR)$(sudoersdir)/sudoers.dist splint: splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I$(devdir) -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c $(srcdir)/auth/*.c @@ -371,14 +379,17 @@ mkdir -p regress/parser; \ ./check_addr $(srcdir)/regress/parser/check_addr.in || rval=`expr $$rval + $$?`; \ ./check_base64 || rval=`expr $$rval + $$?`; \ - ./check_digest > regress/parser/check_digest.out; \ - diff regress/parser/check_digest.out $(srcdir)/regress/parser/check_digest.out.ok || rval=`expr $$rval + $$?`; \ + if test -f check_digest; then \ + ./check_digest > regress/parser/check_digest.out; \ + diff regress/parser/check_digest.out $(srcdir)/regress/parser/check_digest.out.ok || rval=`expr $$rval + $$?`; \ + fi; \ ./check_fill || rval=`expr $$rval + $$?`; \ + ./check_gentime || rval=`expr $$rval + $$?`; \ ./check_hexchar || rval=`expr $$rval + $$?`; \ ./check_iolog_path $(srcdir)/regress/iolog_path/data || rval=`expr $$rval + $$?`; \ - case "$(TEST_PROGS)" in \ - *check_symbols*) ./check_symbols .libs/sudoers.so $(shlib_exp) || rval=`expr $$rval + $$?`;; \ - esac; \ + if test -f check_symbols; then \ + ./check_symbols .libs/sudoers.so $(shlib_exp) || rval=`expr $$rval + $$?`; \ + fi; \ mkdir -p regress/logging; \ ./check_wrap $(srcdir)/regress/logging/check_wrap.in > regress/logging/check_wrap.out; \ diff regress/logging/check_wrap.out $(srcdir)/regress/logging/check_wrap.out.ok || rval=`expr $$rval + $$?`; \ @@ -390,7 +401,12 @@ out="regress/sudoers/$${base}.out"; \ toke="regress/sudoers/$${base}.toke"; \ json="regress/sudoers/$${base}.json"; \ - ASAN_OPTIONS=detect_leaks=0 \ + if test -s $$json.ok; then \ + ASAN_OPTIONS=; \ + else \ + ASAN_OPTIONS=detect_leaks=0; \ + fi; \ + ASAN_OPTIONS=$$ASAN_OPTIONS \ ./testsudoers -dt <$$t >$$out 2>$$toke || true; \ if cmp $$out $(srcdir)/$$out.ok >/dev/null; then \ passed=`expr $$passed + 1`; \ @@ -587,8 +603,9 @@ $(incdir)/sudo_compat.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_base64.c check_digest.o: $(srcdir)/regress/parser/check_digest.c \ - $(incdir)/compat/sha2.h $(incdir)/sudo_compat.h \ - $(top_builddir)/config.h + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_queue.h \ + $(srcdir)/parse.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_digest.c check_fill.o: $(srcdir)/regress/parser/check_fill.c $(devdir)/gram.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ @@ -596,6 +613,12 @@ $(incdir)/sudo_util.h $(srcdir)/parse.h $(srcdir)/toke.h \ $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_fill.c +check_gentime.o: $(srcdir)/regress/parser/check_gentime.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_queue.h \ + $(srcdir)/parse.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_gentime.c check_hexchar.o: $(srcdir)/regress/parser/check_hexchar.c \ $(incdir)/sudo_compat.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_hexchar.c @@ -638,6 +661,12 @@ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/defaults.c +digestname.lo: $(srcdir)/digestname.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(srcdir)/parse.h \ + $(srcdir)/sudoers_debug.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/digestname.c +digestname.o: digestname.lo editor.lo: $(srcdir)/editor.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ @@ -656,6 +685,40 @@ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/env.c +filedigest.lo: $(srcdir)/filedigest.c $(devdir)/def_data.h \ + $(incdir)/compat/sha2.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/filedigest.c +filedigest.o: filedigest.lo +filedigest_gcrypt.lo: $(srcdir)/filedigest_gcrypt.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/filedigest_gcrypt.c +filedigest_openssl.lo: $(srcdir)/filedigest_openssl.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/filedigest_openssl.c find_path.lo: $(srcdir)/find_path.c $(devdir)/def_data.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ @@ -683,6 +746,12 @@ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gc.c +gentime.lo: $(srcdir)/gentime.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(srcdir)/parse.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gentime.c +gentime.o: gentime.lo getdate.o: $(devdir)/getdate.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(devdir)/getdate.c getspwuid.lo: $(srcdir)/getspwuid.c $(devdir)/def_data.h \ @@ -695,6 +764,12 @@ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getspwuid.c +gmtoff.lo: $(srcdir)/gmtoff.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(srcdir)/parse.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gmtoff.c +gmtoff.o: gmtoff.lo goodpath.lo: $(srcdir)/goodpath.c $(devdir)/def_data.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ @@ -821,12 +896,12 @@ logwrap.o: logwrap.lo match.lo: $(srcdir)/match.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/fnmatch.h $(incdir)/compat/glob.h \ - $(incdir)/compat/sha2.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/match.c match_addr.lo: $(srcdir)/match_addr.c $(devdir)/def_data.h \ @@ -887,8 +962,8 @@ $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ - $(srcdir)/interfaces.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(srcdir)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(srcdir)/sudoers_version.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/policy.c @@ -1077,6 +1152,11 @@ $(srcdir)/sudoers_debug.h $(srcdir)/tsgetgrpw.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/testsudoers.c +timeout.lo: $(srcdir)/timeout.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(srcdir)/parse.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/timeout.c timestamp.lo: $(srcdir)/timestamp.c $(devdir)/def_data.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ @@ -1087,7 +1167,9 @@ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/timestamp.c -timestr.lo: $(srcdir)/timestr.c $(incdir)/sudo_compat.h $(top_builddir)/config.h +timestr.lo: $(srcdir)/timestr.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(srcdir)/parse.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/timestr.c toke.lo: $(devdir)/toke.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/sha2.h $(incdir)/compat/stdbool.h \ @@ -1124,10 +1206,11 @@ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/redblack.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(srcdir)/sudoers_version.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/redblack.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(srcdir)/sudoers_version.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/visudo.c visudo_json.o: $(srcdir)/visudo_json.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ diff -Nru sudo-1.8.19p1/plugins/sudoers/match.c sudo-1.8.20p2/plugins/sudoers/match.c --- sudo-1.8.19p1/plugins/sudoers/match.c 2016-12-18 13:52:09.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/match.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2007-2016 + * Copyright (c) 1996, 1998-2005, 2007-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -69,20 +69,20 @@ #else # include "compat/fnmatch.h" #endif /* HAVE_FNMATCH */ -#ifdef HAVE_SHA224UPDATE -# include -#else -# include "compat/sha2.h" + +#if !defined(O_SEARCH) && defined(O_PATH) +# define O_SEARCH O_PATH #endif static struct member_list empty = TAILQ_HEAD_INITIALIZER(empty); -static bool command_matches_dir(const char *sudoers_dir, size_t dlen); +static bool command_matches_dir(const char *sudoers_dir, size_t dlen, const struct sudo_digest *digest); #ifndef SUDOERS_NAME_MATCH -static bool command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args); +static bool command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, const struct sudo_digest *digest); #endif -static bool command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args); +static bool command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args, const struct sudo_digest *digest); static bool command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, const struct sudo_digest *digest); +static bool digest_matches(int fd, const char *file, const struct sudo_digest *sd); /* * Returns true if string 's' contains meta characters. @@ -413,12 +413,12 @@ * use glob(3) and/or fnmatch(3) to do the matching. */ #ifdef SUDOERS_NAME_MATCH - rc = command_matches_fnmatch(sudoers_cmnd, sudoers_args); + rc = command_matches_fnmatch(sudoers_cmnd, sudoers_args, digest); #else if (def_fast_glob) - rc = command_matches_fnmatch(sudoers_cmnd, sudoers_args); + rc = command_matches_fnmatch(sudoers_cmnd, sudoers_args, digest); else - rc = command_matches_glob(sudoers_cmnd, sudoers_args); + rc = command_matches_glob(sudoers_cmnd, sudoers_args, digest); #endif } else { rc = command_matches_normal(sudoers_cmnd, sudoers_args, digest); @@ -432,9 +432,84 @@ debug_return_bool(rc); } +/* + * Stat file by fd is possible, else by path. + * Returns true on success, else false. + */ +static bool +do_stat(int fd, const char *path, struct stat *sb) +{ + debug_decl(do_stat, SUDOERS_DEBUG_MATCH) + + if (fd != -1) + debug_return_bool(fstat(fd, sb) == 0); + debug_return_bool(stat(path, sb) == 0); +} + +/* + * On systems with fexecve(2), set the close-on-exec flag on the file + * descriptor only if the file is not a script. Because scripts need + * to be executed by an interpreter the fd must remain open for the + * interpreter to use. + */ +static void +set_cloexec(int fd) +{ + bool is_script = false; +#ifdef HAVE_FEXECVE + char magic[2]; + + /* Check for #! cookie and set is_script. */ + if (read(fd, magic, 2) == 2) { + if (magic[0] == '#' && magic[1] == '!') + is_script = true; + } + (void) lseek(fd, (off_t)0, SEEK_SET); +#endif /* HAVE_FEXECVE */ + /* + * Shell scripts go through namei twice and so we can't set the close + * on exec flag on the fd for fexecve(2). + */ + if (!is_script) + (void)fcntl(fd, F_SETFD, FD_CLOEXEC); +} + +/* + * Open path if fdexec is enabled or if a digest is present. + * Returns false on error, else true. + */ +static bool +open_cmnd(const char *path, const struct sudo_digest *digest, int *fdp) +{ + int fd = -1; + debug_decl(open_cmnd, SUDOERS_DEBUG_MATCH) + + /* Only open the file for fdexec or for digest matching. */ + if (def_fdexec != always && digest == NULL) + debug_return_bool(true); + + fd = open(path, O_RDONLY|O_NONBLOCK); +# ifdef O_SEARCH + if (fd == -1 && errno == EACCES && digest == NULL) { + /* Try again with O_SEARCH if no digest is specified. */ + const int saved_errno = errno; + if ((fd = open(path, O_SEARCH)) == -1) + errno = saved_errno; + } +# endif + if (fd == -1) + debug_return_bool(false); + + set_cloexec(fd); + *fdp = fd; + debug_return_bool(true); +} + static bool -command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args) +command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args, + const struct sudo_digest *digest) { + struct stat sb; /* XXX - unused */ debug_decl(command_matches_fnmatch, SUDOERS_DEBUG_MATCH) /* @@ -447,19 +522,46 @@ if (fnmatch(sudoers_cmnd, user_cmnd, FNM_PATHNAME) != 0) debug_return_bool(false); if (command_args_match(sudoers_cmnd, sudoers_args)) { + if (cmnd_fd != -1) { + close(cmnd_fd); + cmnd_fd = -1; + } + /* Open the file for fdexec or for digest matching. */ + if (!open_cmnd(user_cmnd, digest, &cmnd_fd)) + goto bad; + if (!do_stat(cmnd_fd, user_cmnd, &sb)) + goto bad; + /* Check digest of user_cmnd since sudoers_cmnd is a pattern. */ + if (digest != NULL) { + if (!digest_matches(cmnd_fd, user_cmnd, digest)) + goto bad; + if (def_fdexec == never) { + close(cmnd_fd); + cmnd_fd = -1; + } + } /* No need to set safe_cmnd since user_cmnd matches sudoers_cmnd */ debug_return_bool(true); +bad: + if (cmnd_fd != -1) { + close(cmnd_fd); + cmnd_fd = -1; + } + debug_return_bool(false); } debug_return_bool(false); } #ifndef SUDOERS_NAME_MATCH static bool -command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args) +command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, + const struct sudo_digest *digest) { struct stat sudoers_stat; - size_t dlen; + bool bad_digest = false; char **ap, *base, *cp; + int fd = -1; + size_t dlen; glob_t gl; debug_decl(command_matches_glob, SUDOERS_DEBUG_MATCH) @@ -490,11 +592,25 @@ /* If user_cmnd is fully-qualified, check for an exact match. */ if (user_cmnd[0] == '/') { for (ap = gl.gl_pathv; (cp = *ap) != NULL; ap++) { - if (strcmp(cp, user_cmnd) != 0 || stat(cp, &sudoers_stat) == -1) + if (fd != -1) { + close(fd); + fd = -1; + } + if (strcmp(cp, user_cmnd) != 0) + continue; + /* Open the file for fdexec or for digest matching. */ + if (!open_cmnd(cp, digest, &fd)) + continue; + if (!do_stat(fd, cp, &sudoers_stat)) continue; if (user_stat == NULL || (user_stat->st_dev == sudoers_stat.st_dev && user_stat->st_ino == sudoers_stat.st_ino)) { + /* There could be multiple matches, check digest early. */ + if (digest != NULL && !digest_matches(fd, cp, digest)) { + bad_digest = true; + continue; + } free(safe_cmnd); if ((safe_cmnd = strdup(cp)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, @@ -509,44 +625,69 @@ } } /* No exact match, compare basename, st_dev and st_ino. */ - for (ap = gl.gl_pathv; (cp = *ap) != NULL; ap++) { - /* If it ends in '/' it is a directory spec. */ - dlen = strlen(cp); - if (cp[dlen - 1] == '/') { - if (command_matches_dir(cp, dlen)) - debug_return_bool(true); - continue; - } + if (!bad_digest) { + for (ap = gl.gl_pathv; (cp = *ap) != NULL; ap++) { + if (fd != -1) { + close(fd); + fd = -1; + } - /* Only proceed if user_base and basename(cp) match */ - if ((base = strrchr(cp, '/')) != NULL) - base++; - else - base = cp; - if (strcmp(user_base, base) != 0 || - stat(cp, &sudoers_stat) == -1) - continue; - if (user_stat == NULL || - (user_stat->st_dev == sudoers_stat.st_dev && - user_stat->st_ino == sudoers_stat.st_ino)) { - free(safe_cmnd); - if ((safe_cmnd = strdup(cp)) == NULL) { - sudo_warnx(U_("%s: %s"), __func__, - U_("unable to allocate memory")); - cp = NULL; /* fail closed */ + /* If it ends in '/' it is a directory spec. */ + dlen = strlen(cp); + if (cp[dlen - 1] == '/') { + if (command_matches_dir(cp, dlen, digest)) + debug_return_bool(true); + continue; + } + + /* Only proceed if user_base and basename(cp) match */ + if ((base = strrchr(cp, '/')) != NULL) + base++; + else + base = cp; + if (strcmp(user_base, base) != 0) + continue; + + /* Open the file for fdexec or for digest matching. */ + if (!open_cmnd(cp, digest, &fd)) + continue; + if (!do_stat(fd, cp, &sudoers_stat)) + continue; + if (user_stat == NULL || + (user_stat->st_dev == sudoers_stat.st_dev && + user_stat->st_ino == sudoers_stat.st_ino)) { + if (digest != NULL && !digest_matches(fd, cp, digest)) + continue; + free(safe_cmnd); + if ((safe_cmnd = strdup(cp)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + cp = NULL; /* fail closed */ + } + goto done; } - goto done; } } done: globfree(&gl); - if (cp == NULL) - debug_return_bool(false); - - if (command_args_match(sudoers_cmnd, sudoers_args)) { - /* safe_cmnd was set above. */ - debug_return_bool(true); + if (cp != NULL) { + if (command_args_match(sudoers_cmnd, sudoers_args)) { + /* safe_cmnd was set above. */ + if (cmnd_fd != -1) { + close(cmnd_fd); + cmnd_fd = -1; + } + if (fd != -1) { + if (def_fdexec == never) + close(fd); + else + cmnd_fd = fd; + } + debug_return_bool(true); + } } + if (fd != -1) + close(fd); debug_return_bool(false); } #endif /* SUDOERS_NAME_MATCH */ @@ -562,10 +703,11 @@ /* If it ends in '/' it is a directory spec. */ if (sudoers_cmnd[dlen - 1] == '/') - debug_return_bool(command_matches_dir(sudoers_cmnd, dlen)); + debug_return_bool(command_matches_dir(sudoers_cmnd, dlen, digest)); if (strcmp(user_cmnd, sudoers_cmnd) == 0) { if (command_args_match(sudoers_cmnd, sudoers_args)) { + /* XXX - check digest */ free(safe_cmnd); if ((safe_cmnd = strdup(sudoers_cmnd)) != NULL) debug_return_bool(true); @@ -576,150 +718,62 @@ } #else /* !SUDOERS_NAME_MATCH */ -static struct digest_function { - const char *digest_name; - const unsigned int digest_len; - void (*init)(SHA2_CTX *); -#ifdef SHA2_VOID_PTR - void (*update)(SHA2_CTX *, const void *, size_t); - void (*final)(void *, SHA2_CTX *); -#else - void (*update)(SHA2_CTX *, const unsigned char *, size_t); - void (*final)(unsigned char *, SHA2_CTX *); -#endif -} digest_functions[] = { - { - "SHA224", - SHA224_DIGEST_LENGTH, - SHA224Init, - SHA224Update, - SHA224Final - }, { - "SHA256", - SHA256_DIGEST_LENGTH, - SHA256Init, - SHA256Update, - SHA256Final - }, { - "SHA384", - SHA384_DIGEST_LENGTH, - SHA384Init, - SHA384Update, - SHA384Final - }, { - "SHA512", - SHA512_DIGEST_LENGTH, - SHA512Init, - SHA512Update, - SHA512Final - }, { - NULL - } -}; - static bool -digest_matches(const char *file, const struct sudo_digest *sd, int *fd) +digest_matches(int fd, const char *file, const struct sudo_digest *sd) { - unsigned char file_digest[SHA512_DIGEST_LENGTH]; - unsigned char sudoers_digest[SHA512_DIGEST_LENGTH]; - unsigned char buf[32 * 1024]; - struct digest_function *func = NULL; -#ifdef HAVE_FEXECVE - bool first = true; - bool is_script = false; -#endif /* HAVE_FEXECVE */ - size_t nread; - SHA2_CTX ctx; - FILE *fp; - unsigned int i; + unsigned char *file_digest = NULL; + unsigned char *sudoers_digest = NULL; + bool matched = false; + size_t digest_len; debug_decl(digest_matches, SUDOERS_DEBUG_MATCH) - for (i = 0; digest_functions[i].digest_name != NULL; i++) { - if (sd->digest_type == i) { - func = &digest_functions[i]; - break; - } + file_digest = sudo_filedigest(fd, file, sd->digest_type, &digest_len); + if (file_digest == NULL) { + /* Warning (if any) printed by sudo_filedigest() */ + goto done; } - if (func == NULL) { - sudo_warnx(U_("unsupported digest type %d for %s"), sd->digest_type, file); - debug_return_bool(false); + + /* Convert the command digest from ascii to binary. */ + if ((sudoers_digest = malloc(digest_len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; } - if (strlen(sd->digest_str) == func->digest_len * 2) { - /* Convert the command digest from ascii hex to binary. */ - for (i = 0; i < func->digest_len; i++) { + if (strlen(sd->digest_str) == digest_len * 2) { + /* Convert ascii hex to binary. */ + unsigned int i; + for (i = 0; i < digest_len; i++) { const int h = hexchar(&sd->digest_str[i + i]); if (h == -1) goto bad_format; sudoers_digest[i] = (unsigned char)h; } } else { - size_t len = base64_decode(sd->digest_str, sudoers_digest, - sizeof(sudoers_digest)); - if (len != func->digest_len) { + /* Convert base64 to binary. */ + size_t len = base64_decode(sd->digest_str, sudoers_digest, digest_len); + if (len != digest_len) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "incorrect length for digest, expected %u, got %zu", - func->digest_len, len); + "incorrect length for digest, expected %zu, got %zu", + digest_len, len); goto bad_format; } } - if ((fp = fopen(file, "r")) == NULL) { - sudo_debug_printf(SUDO_DEBUG_INFO, "unable to open %s: %s", - file, strerror(errno)); - debug_return_bool(false); - } - - func->init(&ctx); - while ((nread = fread(buf, 1, sizeof(buf), fp)) != 0) { -#ifdef HAVE_FEXECVE - /* Check for #! cookie and set is_script. */ - if (first) { - first = false; - if (nread >= 2 && buf[0] == '#' && buf[1] == '!') - is_script = true; - } -#endif /* HAVE_FEXECVE */ - func->update(&ctx, buf, nread); - } - if (ferror(fp)) { - sudo_warnx(U_("%s: read error"), file); - fclose(fp); - debug_return_bool(false); - } - func->final(file_digest, &ctx); - - if (memcmp(file_digest, sudoers_digest, func->digest_len) != 0) { - fclose(fp); + if (memcmp(file_digest, sudoers_digest, digest_len) == 0) { + matched = true; + } else { sudo_debug_printf(SUDO_DEBUG_DIAG|SUDO_DEBUG_LINENO, "%s digest mismatch for %s, expecting %s", - func->digest_name, file, sd->digest_str); - debug_return_bool(false); + digest_type_to_name(sd->digest_type), file, sd->digest_str); } + goto done; -#ifdef HAVE_FEXECVE - /* - * On systems with fexecve(2) we can use that to execute the - * matching command even when the directory is writable. - */ - if ((*fd = dup(fileno(fp))) == -1) { - sudo_debug_printf(SUDO_DEBUG_INFO, "unable to dup %s: %s", - file, strerror(errno)); - fclose(fp); - debug_return_bool(false); - } - /* - * Shell scripts go through namei twice and so we can't set the close - * on exec flag on the fd for fexecve(2). - */ - if (!is_script) - (void)fcntl(*fd, F_SETFD, FD_CLOEXEC); -#endif /* HAVE_FEXECVE */ - fclose(fp); - debug_return_bool(true); bad_format: sudo_warnx(U_("digest for %s (%s) is not in %s form"), file, - sd->digest_str, func->digest_name); - debug_return_bool(false); + sd->digest_str, digest_type_to_name(sd->digest_type)); +done: + free(sudoers_digest); + free(file_digest); + debug_return_bool(matched); } static bool @@ -728,22 +782,28 @@ struct stat sudoers_stat; const char *base; size_t dlen; + int fd = -1; debug_decl(command_matches_normal, SUDOERS_DEBUG_MATCH) /* If it ends in '/' it is a directory spec. */ dlen = strlen(sudoers_cmnd); if (sudoers_cmnd[dlen - 1] == '/') - debug_return_bool(command_matches_dir(sudoers_cmnd, dlen)); + debug_return_bool(command_matches_dir(sudoers_cmnd, dlen, digest)); /* Only proceed if user_base and basename(sudoers_cmnd) match */ if ((base = strrchr(sudoers_cmnd, '/')) == NULL) base = sudoers_cmnd; else base++; - if (strcmp(user_base, base) != 0 || - stat(sudoers_cmnd, &sudoers_stat) == -1) + if (strcmp(user_base, base) != 0) debug_return_bool(false); + /* Open the file for fdexec or for digest matching. */ + if (!open_cmnd(sudoers_cmnd, digest, &fd)) + goto bad; + if (!do_stat(fd, sudoers_cmnd, &sudoers_stat)) + goto bad; + /* * Return true if inode/device matches AND * a) there are no args in sudoers OR @@ -754,23 +814,33 @@ if (user_stat != NULL && (user_stat->st_dev != sudoers_stat.st_dev || user_stat->st_ino != sudoers_stat.st_ino)) - debug_return_bool(false); + goto bad; if (!command_args_match(sudoers_cmnd, sudoers_args)) - debug_return_bool(false); - if (cmnd_fd != -1) { - close(cmnd_fd); - cmnd_fd = -1; - } - if (digest != NULL && !digest_matches(sudoers_cmnd, digest, &cmnd_fd)) { + goto bad; + if (digest != NULL && !digest_matches(fd, sudoers_cmnd, digest)) { /* XXX - log functions not available but we should log very loudly */ - debug_return_bool(false); + goto bad; } free(safe_cmnd); if ((safe_cmnd = strdup(sudoers_cmnd)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_bool(false); + goto bad; + } + if (cmnd_fd != -1) { + close(cmnd_fd); + cmnd_fd = -1; + } + if (fd != -1) { + if (def_fdexec == never) + close(fd); + else + cmnd_fd = fd; } debug_return_bool(true); +bad: + if (fd != -1) + close(fd); + debug_return_bool(false); } #endif /* SUDOERS_NAME_MATCH */ @@ -780,9 +850,11 @@ * Note that sudoers_dir include the trailing '/' */ static bool -command_matches_dir(const char *sudoers_dir, size_t dlen) +command_matches_dir(const char *sudoers_dir, size_t dlen, + const struct sudo_digest *digest) { debug_decl(command_matches_dir, SUDOERS_DEBUG_MATCH) + /* XXX - check digest */ debug_return_bool(strncmp(user_cmnd, sudoers_dir, dlen) == 0); } #else /* !SUDOERS_NAME_MATCH */ @@ -790,11 +862,13 @@ * Return true if user_cmnd names one of the inodes in dir, else false. */ static bool -command_matches_dir(const char *sudoers_dir, size_t dlen) +command_matches_dir(const char *sudoers_dir, size_t dlen, + const struct sudo_digest *digest) { struct stat sudoers_stat; struct dirent *dent; char buf[PATH_MAX]; + int fd = -1; DIR *dirp; debug_decl(command_matches_dir, SUDOERS_DEBUG_MATCH) @@ -810,18 +884,31 @@ debug_return_bool(false); } while ((dent = readdir(dirp)) != NULL) { + if (fd != -1) { + close(fd); + fd = -1; + } + /* ignore paths > PATH_MAX (XXX - log) */ buf[dlen] = '\0'; if (strlcat(buf, dent->d_name, sizeof(buf)) >= sizeof(buf)) continue; /* only stat if basenames are the same */ - if (strcmp(user_base, dent->d_name) != 0 || - stat(buf, &sudoers_stat) == -1) + if (strcmp(user_base, dent->d_name) != 0) + continue; + + /* Open the file for fdexec or for digest matching. */ + if (!open_cmnd(buf, digest, &fd)) continue; + if (!do_stat(fd, buf, &sudoers_stat)) + continue; + if (user_stat == NULL || (user_stat->st_dev == sudoers_stat.st_dev && user_stat->st_ino == sudoers_stat.st_ino)) { + if (digest != NULL && !digest_matches(fd, buf, digest)) + continue; free(safe_cmnd); if ((safe_cmnd = strdup(buf)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, @@ -831,9 +918,24 @@ break; } } - closedir(dirp); - debug_return_bool(dent != NULL); + + if (dent != NULL) { + if (cmnd_fd != -1) { + close(cmnd_fd); + cmnd_fd = -1; + } + if (fd != -1) { + if (def_fdexec == never) + close(fd); + else + cmnd_fd = fd; + } + debug_return_bool(true); + } + if (fd != -1) + close(fd); + debug_return_bool(false); } #endif /* SUDOERS_NAME_MATCH */ diff -Nru sudo-1.8.19p1/plugins/sudoers/mkdefaults sudo-1.8.20p2/plugins/sudoers/mkdefaults --- sudo-1.8.19p1/plugins/sudoers/mkdefaults 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/mkdefaults 2017-05-10 15:38:43.000000000 +0000 @@ -147,6 +147,7 @@ elsif (/^T_LOGPRI/) { $v = "ival"; } elsif (/^T_TUPLE/) { $v = "tuple"; } elsif (/^T_FLOAT/) { $v = "fval"; } + elsif (/^T_TIMEOUT/) { $v = "ival"; } else { die "$0: unknown defaults type: $_\n"; } } printf HEADER "#define %-23s (sudo_defs_table[$defname].sd_un.${v})\n", diff -Nru sudo-1.8.19p1/plugins/sudoers/mkdir_parents.c sudo-1.8.20p2/plugins/sudoers/mkdir_parents.c --- sudo-1.8.19p1/plugins/sudoers/mkdir_parents.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/mkdir_parents.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2016 Todd C. Miller + * Copyright (c) 2009-2017 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 @@ -35,60 +35,49 @@ /* * Create any parent directories needed by path (but not path itself). + * Note that path is modified but is restored before it returns. */ bool -sudo_mkdir_parents(char *path, uid_t uid, gid_t *gidp, mode_t mode, bool quiet) +sudo_mkdir_parents(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet) { struct stat sb; - gid_t parent_gid = 0; char *slash = path; - bool ret = true; debug_decl(sudo_mkdir_parents, SUDOERS_DEBUG_UTIL) - /* If no gid specified, inherit from parent dir. */ - if (*gidp != (gid_t)-1) - parent_gid = *gidp; - else if (stat("/", &sb) == 0) - parent_gid = sb.st_gid; - /* Create parent directories as needed. */ while ((slash = strchr(slash + 1, '/')) != NULL) { *slash = '\0'; sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "mkdir %s, mode 0%o, uid %d, gid %d", path, (unsigned int)mode, - (int)uid, (int)parent_gid); + (int)uid, (int)gid); if (mkdir(path, mode) == 0) { - ignore_result(chown(path, uid, parent_gid)); + if (uid != (uid_t)-1 && gid != (gid_t)-1) + ignore_result(chown(path, uid, gid)); } else { if (errno != EEXIST) { if (!quiet) sudo_warn(U_("unable to mkdir %s"), path); - ret = false; - break; + goto bad; } /* Already exists, make sure it is a directory. */ if (stat(path, &sb) != 0) { if (!quiet) sudo_warn(U_("unable to stat %s"), path); - ret = false; - break; + goto bad; } if (!S_ISDIR(sb.st_mode)) { if (!quiet) sudo_warnx(U_("%s exists but is not a directory (0%o)"), path, (unsigned int) sb.st_mode); - ret = false; - break; + goto bad; } - /* Inherit gid of parent dir for ownership. */ - if (*gidp == (gid_t)-1) - parent_gid = sb.st_gid; } *slash = '/'; } - /* Return parent gid if none was specified by caller. */ - if (ret && *gidp == (gid_t)-1) - *gidp = parent_gid; - debug_return_bool(ret); + debug_return_bool(true); +bad: + /* We must restore the path before we return. */ + *slash = '/'; + debug_return_bool(false); } diff -Nru sudo-1.8.19p1/plugins/sudoers/parse.c sudo-1.8.20p2/plugins/sudoers/parse.c --- sudo-1.8.19p1/plugins/sudoers/parse.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/parse.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2005, 2007-2016 Todd C. Miller + * Copyright (c) 2004-2005, 2007-2017 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 @@ -29,8 +29,9 @@ #endif /* HAVE_STRINGS_H */ #include #include -#include #include +#include +#include #include "sudoers.h" #include "parse.h" @@ -145,12 +146,13 @@ int sudo_file_lookup(struct sudo_nss *nss, int validated, int pwflag) { - int match, host_match, runas_match, cmnd_match; + int match, host_match, runas_match, cmnd_match, timeout; struct cmndspec *cs; struct cmndtag *tags = NULL; struct privilege *priv; struct userspec *us; struct member *matching_user; + time_t now; debug_decl(sudo_file_lookup, SUDOERS_DEBUG_NSS) if (nss->handle == NULL) @@ -207,6 +209,7 @@ if (!set_perms(PERM_RUNAS)) debug_return_int(validated); + time(&now); match = UNSPEC; TAILQ_FOREACH_REVERSE(us, &userspecs, userspec_list, entries) { if (userlist_matches(sudo_user.pw, &us->users) != ALLOW) @@ -219,6 +222,14 @@ else continue; TAILQ_FOREACH_REVERSE(cs, &priv->cmndlist, cmndspec_list, entries) { + if (cs->notbefore != UNSPEC) { + if (now < cs->notbefore) + continue; + } + if (cs->notafter != UNSPEC) { + if (now > cs->notafter) + continue; + } matching_user = NULL; runas_match = runaslist_matches(cs->runasuserlist, cs->runasgrouplist, &matching_user, NULL); @@ -227,6 +238,7 @@ if (cmnd_match != UNSPEC) { match = cmnd_match; tags = &cs->tags; + timeout = cs->timeout; #ifdef HAVE_SELINUX /* Set role and type if not specified on command line. */ if (user_role == NULL) { @@ -301,6 +313,8 @@ if (match == ALLOW) { SET(validated, VALIDATE_SUCCESS); CLR(validated, VALIDATE_FAILURE); + if (timeout > 0) + def_command_timeout = timeout; if (tags != NULL) { if (tags->nopasswd != UNSPEC) def_authenticate = !tags->nopasswd; @@ -370,6 +384,27 @@ if (cs->type) sudo_lbuf_append(lbuf, "TYPE=%s ", cs->type); #endif /* HAVE_SELINUX */ + if (cs->timeout > 0) { + char numbuf[(((sizeof(int) * 8) + 2) / 3) + 2]; + snprintf(numbuf, sizeof(numbuf), "%d", cs->timeout); + sudo_lbuf_append(lbuf, "TIMEOUT=%s ", numbuf); + } + if (cs->notbefore != UNSPEC) { + char buf[sizeof("CCYYMMDDHHMMSSZ")]; + struct tm *tm = gmtime(&cs->notbefore); + snprintf(buf, sizeof(buf), "%04d%02d%02d%02d%02d%02dZ", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + sudo_lbuf_append(lbuf, "NOTBEFORE=%s ", buf); + } + if (cs->notafter != UNSPEC) { + char buf[sizeof("CCYYMMDDHHMMSSZ")]; + struct tm *tm = gmtime(&cs->notafter); + snprintf(buf, sizeof(buf), "%04d%02d%02d%02d%02d%02dZ", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + sudo_lbuf_append(lbuf, "NOTAFTER=%s ", buf); + } if (TAG_CHANGED(setenv)) { tags->setenv = cs->tags.setenv; sudo_lbuf_append(lbuf, tags->setenv ? "SETENV: " : "NOSETENV: "); @@ -481,6 +516,8 @@ if (cs->type && (!prev_cs->type || strcmp(cs->type, prev_cs->type) != 0)) return true; #endif /* HAVE_SELINUX */ + if (cs->timeout != prev_cs->timeout) + return true; return false; } @@ -553,6 +590,27 @@ if (cs->type) sudo_lbuf_append(lbuf, " Type: %s\n", cs->type); #endif /* HAVE_SELINUX */ + if (cs->timeout > 0) { + char numbuf[(((sizeof(int) * 8) + 2) / 3) + 2]; + snprintf(numbuf, sizeof(numbuf), "%d", cs->timeout); + sudo_lbuf_append(lbuf, " Timeout: %s\n", numbuf); + } + if (cs->notbefore != UNSPEC) { + char buf[sizeof("CCYYMMDDHHMMSSZ")]; + struct tm *tm = gmtime(&cs->notbefore); + snprintf(buf, sizeof(buf), "%04d%02d%02d%02d%02d%02dZ", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + sudo_lbuf_append(lbuf, " NotBefore: %s\n", buf); + } + if (cs->notafter != UNSPEC) { + char buf[sizeof("CCYYMMDDHHMMSSZ")]; + struct tm *tm = gmtime(&cs->notafter); + snprintf(buf, sizeof(buf), "%04d%02d%02d%02d%02d%02dZ", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + sudo_lbuf_append(lbuf, " NotAfter: %s\n", buf); + } sudo_lbuf_append(lbuf, _(" Commands:\n")); } sudo_lbuf_append(lbuf, "\t"); diff -Nru sudo-1.8.19p1/plugins/sudoers/parse.h sudo-1.8.20p2/plugins/sudoers/parse.h --- sudo-1.8.19p1/plugins/sudoers/parse.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/parse.h 2017-05-10 15:38:43.000000000 +0000 @@ -110,22 +110,18 @@ }; /* - * SELinux-specific container struct. - * Currently just contains a role and type. + * Per-command option container struct. */ -struct selinux_info { - char *role; - char *type; -}; - -/* - * Solaris privileges container struct - * Currently just contains permitted and limit privileges. - * It could have PFEXEC and PRIV_AWARE flags added in the future. - */ -struct solaris_privs_info { - char *privs; - char *limitprivs; +struct command_options { + time_t notbefore; /* time restriction */ + time_t notafter; /* time restriction */ + int timeout; /* command timeout */ +#ifdef HAVE_SELINUX + char *role, *type; /* SELinux role and type */ +#endif +#ifdef HAVE_PRIV_SET + char *privs, *limitprivs; /* Solaris privilege sets */ +#endif }; /* @@ -174,6 +170,7 @@ /* * Structure describing a linked list of Cmnd_Specs. + * XXX - include struct command_options instad of its contents inline */ struct cmndspec { TAILQ_ENTRY(cmndspec) entries; @@ -181,6 +178,9 @@ struct member_list *runasgrouplist; /* list of runas groups */ struct member *cmnd; /* command to allow/deny */ struct cmndtag tags; /* tag specificaion */ + time_t notbefore; /* time restriction */ + time_t notafter; /* time restriction */ + int timeout; /* command timeout */ #ifdef HAVE_SELINUX char *role, *type; /* SELinux role and type */ #endif @@ -257,6 +257,8 @@ bool addr_matches(char *n); /* match.c */ +struct group; +struct passwd; bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const struct sudo_digest *digest); bool group_matches(const char *sudoers_group, const struct group *gr); bool hostname_matches(const char *shost, const char *lhost, const char *pattern); @@ -279,4 +281,19 @@ /* base64.c */ size_t base64_decode(const char *str, unsigned char *dst, size_t dsize); +/* timeout.c */ +int parse_timeout(const char *timestr); + +/* gmtoff.c */ +long get_gmtoff(time_t *clock); + +/* gentime.c */ +time_t parse_gentime(const char *expstr); + +/* filedigest.c */ +unsigned char *sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_len); + +/* digestname.c */ +const char *digest_type_to_name(int digest_type); + #endif /* SUDOERS_PARSE_H */ Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/ca.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/ca.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/ca.po sudo-1.8.20p2/plugins/sudoers/po/ca.po --- sudo-1.8.19p1/plugins/sudoers/po/ca.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/ca.po 2017-05-10 15:38:43.000000000 +0000 @@ -8,17 +8,17 @@ # tty - el terminal, això prové de l'acrònim en anglès per a teletip (tty) i ara s'usa per a un terminal obert on es pot entrar informació msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.16b1\n" +"Project-Id-Version: sudoers 1.8.19b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-02-19 15:48-0700\n" -"PO-Revision-Date: 2016-04-06 15:10+0200\n" +"POT-Creation-Date: 2016-12-03 19:24-0700\n" +"PO-Revision-Date: 2016-12-29 17:28+0100\n" "Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" "Language: ca\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: confstr.sh:1 @@ -45,140 +45,156 @@ msgid "Sorry, try again." msgstr "Ho sentim, proveu un altre cop." -#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 -#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 -#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 -#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 -#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 -#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 -#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 -#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 -#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 -#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 -#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 -#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 -#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 -#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 -#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 -#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 -#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 -#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 -#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 -#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 -#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 -#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 -#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 -#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 -#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 -#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 -#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 -#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 -#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 -#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 -#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 -#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 -#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 -#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 -#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 -#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 -#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 -#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 -#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 -#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 -#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 -#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 -#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 -#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 -#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 -#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 -#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 +#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 +#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 +#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 +#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 +#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 +#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 +#: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 +#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 +#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 +#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 +#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 +#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 +#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 +#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 +#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 +#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 +#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 +#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 +#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 +#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 +#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 +#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 +#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 +#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 +#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 -#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 -#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 -#: toke.l:1082 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 msgid "unable to allocate memory" msgstr "no es pot assignar memòria" -#: gram.y:471 +#: gram.y:464 msgid "a digest requires a path name" msgstr "au un resum li cal un nom de camí" -#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 -#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 -#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 -#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 -#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 -#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 -#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 -#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 -#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 -#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 -#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 -#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 -#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 -#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 -#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 -#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 -#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 +#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 +#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 +#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 +#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 +#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 +#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 +#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 #: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 -#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 -#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 -#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 -#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 -#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 -#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 -#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 -#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 -#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 -#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 +#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 +#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 +#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 +#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 +#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 +#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 +#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 #: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 #: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 -#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 -#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 -#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 -#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 -#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 -#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 -#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 -#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 -#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 -#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 -#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 -#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 -#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 -#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 -#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 -#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 -#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 -#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/alias.c:132 +#: plugins/sudoers/alias.c:135 #, c-format -msgid "Alias `%s' already defined" -msgstr "L'àlies %s ja està definit" +msgid "Alias \"%s\" already defined" +msgstr "L'àlies «%s» ja està definit" #: plugins/sudoers/auth/bsdauth.c:68 #, c-format @@ -264,37 +280,37 @@ msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: No s'ha pogut verificar TGT! Possible atac!: %s" -#: plugins/sudoers/auth/pam.c:92 +#: plugins/sudoers/auth/pam.c:108 msgid "unable to initialize PAM" msgstr "No s'ha pogut inicialitzar PAM" -#: plugins/sudoers/auth/pam.c:164 +#: plugins/sudoers/auth/pam.c:194 msgid "account validation failure, is your account locked?" msgstr "fallada de validació de compte, està bloquejat el vostre compte?" -#: plugins/sudoers/auth/pam.c:168 +#: plugins/sudoers/auth/pam.c:198 msgid "Account or password is expired, reset your password and try again" msgstr "Ha expirat el compte o la contrasenya, restabliu la vostra contrasenya i proveu un altre cop" -#: plugins/sudoers/auth/pam.c:176 +#: plugins/sudoers/auth/pam.c:206 #, c-format msgid "unable to change expired password: %s" msgstr "no s'ha pogut canviar la contrasenya expirada: %s" -#: plugins/sudoers/auth/pam.c:181 +#: plugins/sudoers/auth/pam.c:211 msgid "Password expired, contact your system administrator" msgstr "Ha expirat la contrasenya, contacteu el vostre administrador de sistema" -#: plugins/sudoers/auth/pam.c:185 +#: plugins/sudoers/auth/pam.c:215 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Ha expirat el compte o la configuració PAM no té una secció \"compte\" per a sudo, contacteu el vostre administrador de sistema" -#: plugins/sudoers/auth/pam.c:199 +#: plugins/sudoers/auth/pam.c:229 #, c-format msgid "PAM authentication error: %s" msgstr "Error d'autenticació PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 #, c-format msgid "you do not exist in the %s database" msgstr "no existiu a la base de dades %s" @@ -323,7 +339,7 @@ msgid "SecurID communication failed" msgstr "Ha fallat la comunicació SecurID" -#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:213 msgid "unknown SecurID error" msgstr "error desconegut de SecurID" @@ -355,7 +371,7 @@ msgid "Unable to initialize authentication methods." msgstr "No s'han pogut inicialitzar els mètodes d'autenticació." -#: plugins/sudoers/auth/sudo_auth.c:442 +#: plugins/sudoers/auth/sudo_auth.c:441 msgid "Authentication methods:" msgstr "Mètodes d'autenticació:" @@ -388,14 +404,14 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 +#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 #, c-format msgid "unknown uid: %u" msgstr "uid desconegut: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 -#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 -#: plugins/sudoers/testsudoers.c:361 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 +#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 +#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 #, c-format msgid "unknown user: %s" msgstr "usuari desconegut: %s" @@ -815,48 +831,109 @@ msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Fes concordar els grups de xarxa en base al conjunt sencer: usuari, amfitrió i domini" -#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 -#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 +#: plugins/sudoers/def_data.c:407 +msgid "Allow commands to be run even if sudo cannot write to the audit log" +msgstr "Permet que s'executin les ordres tot i que sudo no pot escriure al registre d'auditoria" + +#: plugins/sudoers/def_data.c:411 +msgid "Allow commands to be run even if sudo cannot write to the I/O log" +msgstr "Permet que s'executin les ordres tot i que sudo no pot escriure al registre d'entrada/sortida" + +#: plugins/sudoers/def_data.c:415 +msgid "Allow commands to be run even if sudo cannot write to the log file" +msgstr "Permet que s'executin les ordres tot i que sudo no pot escriure al fitxer de registre" + +#: plugins/sudoers/def_data.c:419 +msgid "Resolve groups in sudoers and match on the group ID, not the name" +msgstr "Resol els grups a sudoers i fes concordar amb l'identificador de grup, no el nom" + +#: plugins/sudoers/def_data.c:423 +msgid "Log entries larger than this value will be split into multiple syslog messages" +msgstr "Les entrades de registre més grans que aquest valor es dividiran en múltiples missatges de syslog" + +#: plugins/sudoers/def_data.c:427 #, c-format -msgid "unknown defaults entry `%s'" -msgstr "entrada `%s' desconeguda de paràmetres predeterminat" +msgid "User that will own the I/O log files: %s" +msgstr "L'usuari que serà el propietari dels fitxers d'entrada/sortida: %s" -#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 -#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/def_data.c:431 +#, c-format +msgid "Group that will own the I/O log files: %s" +msgstr "El grup que serà el propietari dels fitxers de registre d'entrada/sortida: %s" + +#: plugins/sudoers/def_data.c:435 +#, c-format +msgid "File mode to use for the I/O log files: 0%o" +msgstr "Mode de fitxer a usar per als fitxers de registre d'entrada/sortida: 0%o" + +#: plugins/sudoers/defaults.c:211 +#, c-format +msgid "%s:%d unknown defaults entry \"%s\"" +msgstr "%s:%d entrada «%s» desconeguda de paràmetres predeterminats" + +#: plugins/sudoers/defaults.c:214 +#, c-format +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: entrada «%s» desconeguda de paràmetres predeterminats" + +#: plugins/sudoers/defaults.c:237 #, c-format -msgid "value `%s' is invalid for option `%s'" -msgstr "el valor `%s' no és vàlid per a l'opció `%s'" +msgid "%s:%d no value specified for \"%s\"" +msgstr "%s:%d no s'ha especificat un valor per a «%s»" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 -#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 -#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 -#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:240 #, c-format -msgid "no value specified for `%s'" -msgstr "no s'ha especificat un valor per a `%s'" +msgid "%s: no value specified for \"%s\"" +msgstr "%s: no s'ha especificat un valor per a «%s»" -#: plugins/sudoers/defaults.c:233 +#: plugins/sudoers/defaults.c:259 #, c-format -msgid "values for `%s' must start with a '/'" -msgstr "els valors per a `%s' han de començar amb un '/'" +msgid "%s:%d values for \"%s\" must start with a '/'" +msgstr "%s:%d els valors per a «%s» han de començar amb un «/»" -#: plugins/sudoers/defaults.c:301 +#: plugins/sudoers/defaults.c:262 #, c-format -msgid "option `%s' does not take a value" -msgstr "l'opció `%s' no pren un valor" +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: els valors per a «%s» han de començar amb un «/»" + +#: plugins/sudoers/defaults.c:287 +#, c-format +msgid "%s:%d option \"%s\" does not take a value" +msgstr "%s:%d l'opció «%s» no pren un valor" + +#: plugins/sudoers/defaults.c:290 +#, c-format +msgid "%s: option \"%s\" does not take a value" +msgstr "%s: l'opció «%s» no pren un valor" + +#: plugins/sudoers/defaults.c:309 +#, c-format +msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d tipus de paràmetres predeterminats 0x%x per a l'opció «%s»" + +#: plugins/sudoers/defaults.c:312 +#, c-format +msgid "%s: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s: tipus 0x%x no vàlid de paràmetres predeterminats per a l'opció «%s»" + +#: plugins/sudoers/defaults.c:322 +#, c-format +msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d el valor «%s» no és vàlid per a l'opció «%s»" + +#: plugins/sudoers/defaults.c:325 +#, c-format +msgid "%s: value \"%s\" is invalid for option \"%s\"" +msgstr "%s: el valor «%s» no és vàlid per a l'opció «%s»" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 -#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 -#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 -#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 -#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 -#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 +#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 +#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 +#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "error intern, desbordament de %s" @@ -865,11 +942,11 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corrupte, discordança de longitud" -#: plugins/sudoers/env.c:1083 +#: plugins/sudoers/env.c:1082 msgid "unable to rebuild the environment" msgstr "no s'ha pogut reconstruir l'entorn" -#: plugins/sudoers/env.c:1157 +#: plugins/sudoers/env.c:1156 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "ho sentim, no teniu permís d'establir les següents variables d'entorn: %s" @@ -884,7 +961,7 @@ msgid "%s must only be writable by owner" msgstr "%s ha de ser modificable sols pel seu propietari" -#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:398 #, c-format msgid "unable to load %s: %s" msgstr "no s'ha pogut carregar %s: %s" @@ -899,95 +976,114 @@ msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: connector incompatible de group versió principal %d, s'esperava %d" -#: plugins/sudoers/interfaces.c:117 +#: plugins/sudoers/interfaces.c:79 plugins/sudoers/interfaces.c:96 +#, c-format +msgid "unable to parse IP address \"%s\"" +msgstr "no s'ha pogut analitzar l'adreça IP «%s»" + +#: plugins/sudoers/interfaces.c:84 plugins/sudoers/interfaces.c:101 +#, c-format +msgid "unable to parse netmask \"%s\"" +msgstr "no s'ha pogut analitzar la màscara de xarxa «%s»" + +#: plugins/sudoers/interfaces.c:129 msgid "Local IP address and netmask pairs:\n" msgstr "Adreça local IP i parelles netmask:\n" -#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 -#: plugins/sudoers/timestamp.c:169 +#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existeix però no és un directori (0%o)" -#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 -#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 -#: plugins/sudoers/timestamp.c:184 +#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 #, c-format msgid "unable to mkdir %s" msgstr "no s'ha pogut mkdir %s" -#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 -#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 -#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 -#: plugins/sudoers/visudo_json.c:1025 +#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 +#: plugins/sudoers/testsudoers.c:389 +#, c-format +msgid "unknown group: %s" +msgstr "grup desconegut: %s" + +#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 +#: plugins/sudoers/visudo_json.c:1024 #, c-format msgid "unable to open %s" msgstr "no s'ha pogut obrir %s" -#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 -#: plugins/sudoers/sudoreplay.c:1084 +#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "no s'ha pogut llegir %s" -#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 -#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 +#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 #, c-format msgid "unable to write to %s" msgstr "no s'ha pogut escriure a %s" -#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 +#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 #, c-format msgid "unable to create %s" msgstr "no s'ha pogut crear %s" -#: plugins/sudoers/iolog.c:723 +#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#, c-format +msgid "unable to write to I/O log file: %s" +msgstr "no s'ha pogut escriure al fitxer de registre d'entrada/sortida: %s" + +#: plugins/sudoers/iolog.c:927 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: error intern, l'índex %d de fitxers no està obert" -#: plugins/sudoers/ldap.c:428 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: el port és massa gran" -#: plugins/sudoers/ldap.c:488 +#: plugins/sudoers/ldap.c:489 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipus d'uri LDAP no suportat: %s" -#: plugins/sudoers/ldap.c:515 +#: plugins/sudoers/ldap.c:516 msgid "unable to mix ldap and ldaps URIs" msgstr "no s'han pogut barrejar el ldap i els ldaps URIs " -#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 +#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 msgid "starttls not supported when using ldaps" msgstr "starttls no suportat quan s'està usant ldaps" -#: plugins/sudoers/ldap.c:626 +#: plugins/sudoers/ldap.c:627 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "no s'ha pogut inicialitzar el certificat SSL i la clau db: %s" -#: plugins/sudoers/ldap.c:629 +#: plugins/sudoers/ldap.c:630 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "heu d'establir TLS_CERT a %s per usar SSL" -#: plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1239 msgid "unable to get GMT time" msgstr "no s'ha pogut obtenir l'hora GMT" -#: plugins/sudoers/ldap.c:1158 +#: plugins/sudoers/ldap.c:1245 msgid "unable to format timestamp" msgstr "no s'ha pogut donar format a la marca horària" -#: plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1956 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2394 +#: plugins/sudoers/ldap.c:2504 #, c-format msgid "" "\n" @@ -996,7 +1092,7 @@ "\n" "Rol LDAP: %s\n" -#: plugins/sudoers/ldap.c:2396 +#: plugins/sudoers/ldap.c:2506 #, c-format msgid "" "\n" @@ -1005,27 +1101,27 @@ "\n" "Rol LDAP: DESCONEGUT\n" -#: plugins/sudoers/ldap.c:2443 +#: plugins/sudoers/ldap.c:2562 #, c-format msgid " Order: %s\n" msgstr " Ordre: %s\n" -#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 -#: plugins/sudoers/sssd.c:1429 +#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 +#: plugins/sudoers/sssd.c:1626 #, c-format msgid " Commands:\n" msgstr " Ordres:\n" -#: plugins/sudoers/ldap.c:3015 +#: plugins/sudoers/ldap.c:3130 #, c-format msgid "unable to initialize LDAP: %s" msgstr "no s'ha pogut inicialitzar LDAP: %s" -#: plugins/sudoers/ldap.c:3051 +#: plugins/sudoers/ldap.c:3166 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "s'ha especificat start_tls però les biblioteques LDAP no donen suport a ldap_start_tls_s() o ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3305 +#: plugins/sudoers/ldap.c:3415 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atribut sudoOrder no vàlid: %s" @@ -1048,127 +1144,138 @@ msgid "%8s : (command continued) %s" msgstr "%8s : (ordre continuada) %s" -#: plugins/sudoers/logging.c:159 +#: plugins/sudoers/logging.c:163 #, c-format -msgid "unable to open log file: %s: %s" -msgstr "no s'ha pogut obrir el fitxer de registre: %s: %s" +msgid "unable to open log file: %s" +msgstr "no s'ha pogut obrir el fitxer de registre: %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:171 #, c-format -msgid "unable to lock log file: %s: %s" -msgstr "no s'ha pogut bloquejar el fitxer de registre: %s: %s" +msgid "unable to lock log file: %s" +msgstr "no s'ha pogut bloquejar el fitxer de registre: %s" -#: plugins/sudoers/logging.c:211 +#: plugins/sudoers/logging.c:204 +#, c-format +msgid "unable to write log file: %s" +msgstr "no s'ha pogut escriure el fitxer de registre: %s" + +#: plugins/sudoers/logging.c:233 msgid "No user or host" msgstr "No hi ha usuari o amfitrió" -#: plugins/sudoers/logging.c:213 +#: plugins/sudoers/logging.c:235 msgid "validation failure" msgstr "ha fallat la validació" -#: plugins/sudoers/logging.c:220 +#: plugins/sudoers/logging.c:242 msgid "user NOT in sudoers" msgstr "l'usuari NO ESTÀ als sudoers" -#: plugins/sudoers/logging.c:222 +#: plugins/sudoers/logging.c:244 msgid "user NOT authorized on host" msgstr "l'usuari NO està autoritzat a l'amfitrió" -#: plugins/sudoers/logging.c:224 +#: plugins/sudoers/logging.c:246 msgid "command not allowed" msgstr "ordre no permesa" -#: plugins/sudoers/logging.c:259 +#: plugins/sudoers/logging.c:281 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s no està al fitxer sudoers. S'informarà d'aquest incident.\n" -#: plugins/sudoers/logging.c:262 +#: plugins/sudoers/logging.c:284 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s no té permís per executar sudo a %s. S'informarà d'aquest incident.\n" -#: plugins/sudoers/logging.c:266 +#: plugins/sudoers/logging.c:288 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Ho sentim, l'usuari %s no pot executar sudo a %s.\n" -#: plugins/sudoers/logging.c:269 +#: plugins/sudoers/logging.c:291 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Ho sentim, l'usuari %s no pot executar '%s%s%s' com a %s%s%s a %s.\n" -#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 -#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 -#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 -#: plugins/sudoers/sudoers.c:1224 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 +#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/sudoers.c:1249 #, c-format msgid "%s: command not found" msgstr "%s: no s'ha trobar l'ordre" -#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 #, c-format msgid "" -"ignoring `%s' found in '.'\n" -"Use `sudo ./%s' if this is the `%s' you wish to run." +"ignoring \"%s\" found in '.'\n" +"Use \"sudo ./%s\" if this is the \"%s\" you wish to run." msgstr "" -"s'ignorarà `%s' trobat a '.'\n" -"Useu `sudo ./%s' si aquest és el `%s' que voleu executar." +"s'ignorarà «%s» trobat a «.»\n" +"Useu «sudo ./%s» si aquest és el «%s» que voleu executar." -#: plugins/sudoers/logging.c:325 +#: plugins/sudoers/logging.c:347 msgid "authentication failure" msgstr "ha fallat l'autenticació" -#: plugins/sudoers/logging.c:351 +#: plugins/sudoers/logging.c:373 msgid "a password is required" msgstr "es requereix una contrasenya" -#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 +#: plugins/sudoers/logging.c:444 plugins/sudoers/logging.c:510 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u intent incorrecte de contrasenya" msgstr[1] "%u intents incorrectes de contrasenya" -#: plugins/sudoers/logging.c:572 +#: plugins/sudoers/logging.c:597 msgid "unable to fork" msgstr "no es pot bifurcar" -#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 +#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:657 #, c-format msgid "unable to fork: %m" msgstr "no est pot bifurcar: %m" -#: plugins/sudoers/logging.c:630 +#: plugins/sudoers/logging.c:647 #, c-format msgid "unable to open pipe: %m" msgstr "no es pot obrir la canonada: %m" -#: plugins/sudoers/logging.c:655 +#: plugins/sudoers/logging.c:672 #, c-format msgid "unable to dup stdin: %m" msgstr "no es pot duplicar l'entrada estàndard: %m" -#: plugins/sudoers/logging.c:693 +#: plugins/sudoers/logging.c:710 #, c-format msgid "unable to execute %s: %m" msgstr "no es pot executar %s: %m" -#: plugins/sudoers/match.c:616 +#: plugins/sudoers/match.c:644 #, c-format msgid "unsupported digest type %d for %s" msgstr "tipus de resum no suportat %d per a %s" -#: plugins/sudoers/match.c:657 +#: plugins/sudoers/match.c:685 #, c-format msgid "%s: read error" msgstr "%s: error de lectura" -#: plugins/sudoers/match.c:692 +#: plugins/sudoers/match.c:720 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "digest per a %s (%s) no està en forma %s" +#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#, c-format +msgid "unable to stat %s" +msgstr "no s'ha pogut accedir %s" + #: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" @@ -1179,7 +1286,7 @@ msgid "parse error in %s" msgstr "error d'anàlisi a la línia %s" -#: plugins/sudoers/parse.c:502 +#: plugins/sudoers/parse.c:503 #, c-format msgid "" "\n" @@ -1188,41 +1295,41 @@ "\n" "Entrada de sudoers:\n" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:504 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:517 +#: plugins/sudoers/parse.c:518 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:526 +#: plugins/sudoers/parse.c:527 #, c-format msgid " Options: " msgstr " Opcions: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 msgid "unable to parse network address list" msgstr "no s'ha pogut analitzar la llista d'adreces de xarxa" -#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 +#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 #, c-format msgid "unable to execute %s" msgstr "no s'ha pogut executar %s" -#: plugins/sudoers/policy.c:792 +#: plugins/sudoers/policy.c:823 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versió del connector de política de sudoers %s\n" -#: plugins/sudoers/policy.c:794 +#: plugins/sudoers/policy.c:825 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versió de gramàtica del fitxer sudoers %d\n" -#: plugins/sudoers/policy.c:798 +#: plugins/sudoers/policy.c:829 #, c-format msgid "" "\n" @@ -1231,43 +1338,43 @@ "\n" "Camí del sudoers: %s\n" -#: plugins/sudoers/policy.c:801 +#: plugins/sudoers/policy.c:832 #, c-format msgid "nsswitch path: %s\n" msgstr "camí del nsswitch: %s\n" -#: plugins/sudoers/policy.c:803 +#: plugins/sudoers/policy.c:834 #, c-format msgid "ldap.conf path: %s\n" msgstr "camí de ldap.conf: %s\n" -#: plugins/sudoers/policy.c:804 +#: plugins/sudoers/policy.c:835 #, c-format msgid "ldap.secret path: %s\n" msgstr "camí del ldap.secret: %s\n" -#: plugins/sudoers/policy.c:837 +#: plugins/sudoers/policy.c:868 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "no s'ha pogut registrar el lligam de tipus %d (versió %d.%d)" -#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#: plugins/sudoers/pwutil.c:162 plugins/sudoers/pwutil.c:180 #, c-format msgid "unable to cache uid %u, out of memory" msgstr "no s'ha pogut posar al cau l'uid %u, s'ha exhaurit la memòria" -#: plugins/sudoers/pwutil.c:170 +#: plugins/sudoers/pwutil.c:174 #, c-format msgid "unable to cache uid %u, already exists" msgstr "no s'ha pogut posar l'uid %u al cau, ja existeix" -#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 -#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#: plugins/sudoers/pwutil.c:234 plugins/sudoers/pwutil.c:251 +#: plugins/sudoers/pwutil.c:313 plugins/sudoers/pwutil.c:358 #, c-format msgid "unable to cache user %s, out of memory" msgstr "no s'ha pogut posar l'usuari %s, s'ha exhaurit la memòria" -#: plugins/sudoers/pwutil.c:234 +#: plugins/sudoers/pwutil.c:246 #, c-format msgid "unable to cache user %s, already exists" msgstr "no s'ha pogut posar l'usuari %s al cau, ja existeix" @@ -1282,32 +1389,39 @@ msgid "unable to cache gid %u, already exists" msgstr "no s'ha pogut posar el gid %u al cau, ja existeix" -#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 -#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#: plugins/sudoers/pwutil.c:540 plugins/sudoers/pwutil.c:557 +#: plugins/sudoers/pwutil.c:604 plugins/sudoers/pwutil.c:646 #, c-format msgid "unable to cache group %s, out of memory" msgstr "no s'ha pogut posar el grup %s al cau, s'ha exhaurit" -#: plugins/sudoers/pwutil.c:544 +#: plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache group %s, already exists" msgstr "no s'ha pogut posar el grup %s al cau, ja existeix" -#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 +#: plugins/sudoers/pwutil.c:772 plugins/sudoers/pwutil.c:824 +#: plugins/sudoers/pwutil.c:874 plugins/sudoers/pwutil.c:926 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "no s'ha pogut la llista de grups al cau per a %s, ja existeix" -#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#: plugins/sudoers/pwutil.c:778 plugins/sudoers/pwutil.c:829 +#: plugins/sudoers/pwutil.c:880 plugins/sudoers/pwutil.c:931 #, c-format msgid "unable to cache group list for %s, out of memory" msgstr "no s'ha pogut la llista de grups al cau per a %s, s'ha exhaurit la memòria" -#: plugins/sudoers/pwutil.c:777 +#: plugins/sudoers/pwutil.c:818 #, c-format msgid "unable to parse groups for %s" msgstr "no s'han pogut analitzar els grups per a %s" +#: plugins/sudoers/pwutil.c:920 +#, c-format +msgid "unable to parse gids for %s" +msgstr "no s'han pogut analitzar els identificadors de grups per a %s" + #: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 #: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 #: plugins/sudoers/set_perms.c:1430 @@ -1322,27 +1436,27 @@ msgid "perm stack underflow" msgstr "subdesbordament de la pila de permisos" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 #: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "no s'ha pogut canvir el gid de l'usuari primari" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 #: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "no s'ha pogut canviar el gid runas" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 #: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "no s'ha pogut configurar el vector de grup runas" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 #: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "no s'ha pogut canviar l'uid runas" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 #: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "no s'ha pogut canvir el gid del sudoers" @@ -1371,17 +1485,35 @@ msgid "audit_failure message too long" msgstr "missatge audit_failure massa llarg" -#: plugins/sudoers/sssd.c:333 +#: plugins/sudoers/sssd.c:400 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "no s'ha pogut inicialitzar la font del SSS. Està el SSSD instal·lat al vostre sistema?" -#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 -#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 -#: plugins/sudoers/sssd.c:377 +#: plugins/sudoers/sssd.c:408 plugins/sudoers/sssd.c:417 +#: plugins/sudoers/sssd.c:426 plugins/sudoers/sssd.c:435 +#: plugins/sudoers/sssd.c:444 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "no s'ha pogut trobar el símbol \"%s\" a %s" +#: plugins/sudoers/sssd.c:1541 +#, c-format +msgid "" +"\n" +"SSSD Role: %s\n" +msgstr "" +"\n" +"Rol SSDD: %s\n" + +#: plugins/sudoers/sssd.c:1546 +#, c-format +msgid "" +"\n" +"SSSD Role: UNKNOWN\n" +msgstr "" +"\n" +"Rol SSSD: DESCONEGUT\n" + #: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" @@ -1402,240 +1534,229 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "L'usuari %s no té permisos per executar sudo a %s.\n" -#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 +#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 +#: plugins/sudoers/visudo.c:955 msgid "unable to initialize sudoers default values" msgstr "no s'han pogut inicialitzar el valors predeterminats dels sudoers" -#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 -#: plugins/sudoers/sudoers.c:833 +#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 msgid "problem with defaults entries" msgstr "hi ha un problema amb les entrades predeterminades" -#: plugins/sudoers/sudoers.c:205 +#: plugins/sudoers/sudoers.c:203 msgid "no valid sudoers sources found, quitting" msgstr "no s'han trobat fonts vàlides de sudoers, se sortirà" -#: plugins/sudoers/sudoers.c:275 +#: plugins/sudoers/sudoers.c:242 msgid "sudoers specifies that root is not allowed to sudo" msgstr "el fitxer sudoers especifica que l'usuari primar no pot executar sudo" -#: plugins/sudoers/sudoers.c:332 +#: plugins/sudoers/sudoers.c:299 msgid "you are not permitted to use the -C option" msgstr "no teniu permisos per usar l'opció -C" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:387 #, c-format msgid "timestamp owner (%s): No such user" msgstr "propietari de la marca horària (%s): No existeix aquest usuari" -#: plugins/sudoers/sudoers.c:410 +#: plugins/sudoers/sudoers.c:401 msgid "no tty" msgstr "no hi ha una terminal" -#: plugins/sudoers/sudoers.c:411 +#: plugins/sudoers/sudoers.c:402 msgid "sorry, you must have a tty to run sudo" msgstr "ho sentim, heu de tenir una terminal per executar sudo" -#: plugins/sudoers/sudoers.c:466 +#: plugins/sudoers/sudoers.c:463 msgid "command in current directory" msgstr "ordre al directori actual" -#: plugins/sudoers/sudoers.c:486 +#: plugins/sudoers/sudoers.c:483 msgid "sorry, you are not allowed to preserve the environment" msgstr "ho sentim, no teniu permisos per preserver l'entorn" -#: plugins/sudoers/sudoers.c:778 +#: plugins/sudoers/sudoers.c:804 msgid "command too long" msgstr "ordre massa llarga" -#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 -#: plugins/sudoers/visudo.c:667 -#, c-format -msgid "unable to stat %s" -msgstr "no s'ha pogut accedir %s" - -#: plugins/sudoers/sudoers.c:890 +#: plugins/sudoers/sudoers.c:916 #, c-format msgid "%s is not a regular file" msgstr "%s no és un fitxer regular" -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 +#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s és propietat de l'uid %u, hauria de ser %u" -#: plugins/sudoers/sudoers.c:898 toke.l:954 +#: plugins/sudoers/sudoers.c:924 toke.l:957 #, c-format msgid "%s is world writable" msgstr "%s te permís universal d'escriptura" -#: plugins/sudoers/sudoers.c:902 toke.l:959 +#: plugins/sudoers/sudoers.c:928 toke.l:960 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s és propietat del gid %u, hauria de ser %u" -#: plugins/sudoers/sudoers.c:933 +#: plugins/sudoers/sudoers.c:961 #, c-format -msgid "only root can use `-c %s'" -msgstr "sols l'usuari primari pot usar `-c %s'" +msgid "only root can use \"-c %s\"" +msgstr "sols l'usuari primari pot usar «-c %s»" -#: plugins/sudoers/sudoers.c:952 +#: plugins/sudoers/sudoers.c:980 #, c-format msgid "unknown login class: %s" msgstr "classe desconeguda d'inici de sessió: %s" -#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 +#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 #, c-format msgid "unable to resolve host %s" msgstr "no s'ha pogut resoldre l'amfitrió %s" -#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 -#, c-format -msgid "unknown group: %s" -msgstr "grup desconegut: %s" - -#: plugins/sudoers/sudoreplay.c:232 +#: plugins/sudoers/sudoreplay.c:236 #, c-format msgid "invalid filter option: %s" msgstr "opció no vàlida de filtre: %s" -#: plugins/sudoers/sudoreplay.c:245 +#: plugins/sudoers/sudoreplay.c:249 #, c-format msgid "invalid max wait: %s" msgstr "espera màxima no vàlida: %s" -#: plugins/sudoers/sudoreplay.c:251 +#: plugins/sudoers/sudoreplay.c:255 #, c-format msgid "invalid speed factor: %s" msgstr "factor no vàlid de velocitat: %s" -#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 #, c-format msgid "%s version %s\n" msgstr "%s versió %s\n" -#: plugins/sudoers/sudoreplay.c:286 +#: plugins/sudoers/sudoreplay.c:290 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/sincronització: %s" -#: plugins/sudoers/sudoreplay.c:292 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/sincronització: %s" -#: plugins/sudoers/sudoreplay.c:308 +#: plugins/sudoers/sudoreplay.c:312 #, c-format msgid "Replaying sudo session: %s\n" msgstr "S'està tornant a reproduir la sessió sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:314 +#: plugins/sudoers/sudoreplay.c:318 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Advertiment: el vostre terminal és massa petit per reproduir apropiadament el registre.\n" -#: plugins/sudoers/sudoreplay.c:315 +#: plugins/sudoers/sudoreplay.c:319 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "La geometria del registre és %d x %d, la geometria del vostre terminal és %d x %d." -#: plugins/sudoers/sudoreplay.c:368 +#: plugins/sudoers/sudoreplay.c:410 msgid "unable to set tty to raw mode" msgstr "no s'ha pogut configurar el terminal a mode de dades en brut" -#: plugins/sudoers/sudoreplay.c:401 +#: plugins/sudoers/sudoreplay.c:439 #, c-format msgid "invalid timing file line: %s" msgstr "línia no vàlida de fitxer de sincronització: %s" -#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 +#: plugins/sudoers/sudoreplay.c:659 plugins/sudoers/sudoreplay.c:684 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expressió ambigua \"%s\"" -#: plugins/sudoers/sudoreplay.c:658 +#: plugins/sudoers/sudoreplay.c:706 msgid "unmatched ')' in expression" msgstr "')' sense concordança a l'expressió" -#: plugins/sudoers/sudoreplay.c:662 +#: plugins/sudoers/sudoreplay.c:710 #, c-format msgid "unknown search term \"%s\"" msgstr "terme desconegut de cerca \"%s\"" -#: plugins/sudoers/sudoreplay.c:677 +#: plugins/sudoers/sudoreplay.c:725 #, c-format msgid "%s requires an argument" msgstr "%s requereix un argument" -#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 +#: plugins/sudoers/sudoreplay.c:728 plugins/sudoers/sudoreplay.c:1108 #, c-format msgid "invalid regular expression: %s" msgstr "expressió regular no vàlida: %s" -#: plugins/sudoers/sudoreplay.c:684 +#: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" msgstr "no s'ha pogut analitzar la data \"%s\"" -#: plugins/sudoers/sudoreplay.c:693 +#: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" msgstr "'(' sense concordança a l'expressió" -#: plugins/sudoers/sudoreplay.c:695 +#: plugins/sudoers/sudoreplay.c:743 msgid "illegal trailing \"or\"" msgstr "\"or\" final il·legal" -#: plugins/sudoers/sudoreplay.c:697 +#: plugins/sudoers/sudoreplay.c:745 msgid "illegal trailing \"!\"" msgstr "\"!\" final il·legal" -#: plugins/sudoers/sudoreplay.c:746 +#: plugins/sudoers/sudoreplay.c:794 #, c-format msgid "unknown search type %d" msgstr "tipus desconegut de cerca %d" -#: plugins/sudoers/sudoreplay.c:784 +#: plugins/sudoers/sudoreplay.c:832 #, c-format msgid "%s: invalid log file" msgstr "%s: fitxer no vàlid de registre" -#: plugins/sudoers/sudoreplay.c:802 +#: plugins/sudoers/sudoreplay.c:850 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: no hi ha el camp de marca horària " -#: plugins/sudoers/sudoreplay.c:809 +#: plugins/sudoers/sudoreplay.c:857 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marca horària %s: %s" -#: plugins/sudoers/sudoreplay.c:816 +#: plugins/sudoers/sudoreplay.c:864 #, c-format msgid "%s: user field is missing" msgstr "%s: no hi ha el camp d'usuari runas" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:873 #, c-format msgid "%s: runas user field is missing" msgstr "%s: no hi ha el camp del grup runas" -#: plugins/sudoers/sudoreplay.c:834 +#: plugins/sudoers/sudoreplay.c:882 #, c-format msgid "%s: runas group field is missing" msgstr "%s: no es troba el camp del grup runas" -#: plugins/sudoers/sudoreplay.c:1197 +#: plugins/sudoers/sudoreplay.c:1245 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "ús: %s [-h] [-d dir] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1200 +#: plugins/sudoers/sudoreplay.c:1248 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "usage: %s [-h] [-d dir] -l [cerca l'expressió]\n" -#: plugins/sudoers/sudoreplay.c:1209 +#: plugins/sudoers/sudoreplay.c:1257 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1644,7 +1765,7 @@ "%s - reprodueix els registres de la sessió sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1211 +#: plugins/sudoers/sudoreplay.c:1259 msgid "" "\n" "Options:\n" @@ -1667,11 +1788,11 @@ " -s, --speed=num accelera o alenteix la sortida\n" " -V, --version mostra la versió d'informació i surt" -#: plugins/sudoers/testsudoers.c:324 +#: plugins/sudoers/testsudoers.c:328 msgid "\thost unmatched" msgstr "\tamfitrió sense concordança" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:331 msgid "" "\n" "Command allowed" @@ -1679,7 +1800,7 @@ "\n" "Ordre permesa" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command denied" @@ -1687,7 +1808,7 @@ "\n" "Ordre denegada" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command unmatched" @@ -1695,129 +1816,129 @@ "\n" "Ordre sense concordança" -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/timestamp.c:217 #, c-format msgid "%s is group writable" msgstr "%s és modificable pel grup" -#: plugins/sudoers/timestamp.c:309 +#: plugins/sudoers/timestamp.c:293 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "no s'ha pogut truncar el fitxer de marca horària a %lld bytes" -#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 -#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 +#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 msgid "unable to read the clock" msgstr "no s'ha pogut llegir el rellotge" -#: plugins/sudoers/timestamp.c:756 +#: plugins/sudoers/timestamp.c:752 msgid "ignoring time stamp from the future" msgstr "s'ignorarà la marca horària del futur" -#: plugins/sudoers/timestamp.c:768 +#: plugins/sudoers/timestamp.c:764 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "la marca horària està massa lluny en el futur: %20.20s" -#: plugins/sudoers/timestamp.c:863 +#: plugins/sudoers/timestamp.c:859 #, c-format msgid "unable to lock time stamp file %s" msgstr "no s'ha pogut bloquejar el fitxer de marca horària %s" -#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 +#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 #, c-format msgid "lecture status path too long: %s/%s" msgstr "el camí de l'estat de la llissó és massa llarg: %s/%s" -#: plugins/sudoers/visudo.c:182 +#: plugins/sudoers/visudo.c:187 #, c-format msgid "%s grammar version %d\n" msgstr "%s versió de la gramàtica %d\n" -#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 #, c-format msgid "press return to edit %s: " msgstr "prem la tecla d'introducció per editar %s: " -#: plugins/sudoers/visudo.c:320 +#: plugins/sudoers/visudo.c:331 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "l'editor especificat (%s) no existeix" -#: plugins/sudoers/visudo.c:338 +#: plugins/sudoers/visudo.c:349 #, c-format msgid "no editor found (editor path = %s)" msgstr "no s'ha trobat un editor (el camí de l'editor = %s)" -#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 +#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 msgid "write error" msgstr "error d'escriptura" -#: plugins/sudoers/visudo.c:501 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "no s'ha pogut accedir al fitxer temporal (%s), no s'ha modificat %s" -#: plugins/sudoers/visudo.c:508 +#: plugins/sudoers/visudo.c:520 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "fitxer temporal amb longitud nul·la (%s), no s'ha modificat %s" -#: plugins/sudoers/visudo.c:514 +#: plugins/sudoers/visudo.c:526 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "l'editor (%s) ha fallat, no s'ha modificat %s" -#: plugins/sudoers/visudo.c:536 +#: plugins/sudoers/visudo.c:548 #, c-format msgid "%s unchanged" msgstr "no s'ha modificat %s" -#: plugins/sudoers/visudo.c:562 +#: plugins/sudoers/visudo.c:607 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "no s'ha pogut reobrir el fitxer temporal (%s), no s'ha modificat %s" -#: plugins/sudoers/visudo.c:573 +#: plugins/sudoers/visudo.c:619 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "no s'ha pogut analitzar el fitxer temporal (%s), error desconegut" -#: plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:656 #, c-format msgid "internal error, unable to find %s in list!" msgstr "error intern, no s'ha pogut trobar %s a la llista!" -#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 +#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "no s'ha pogut establir (uid, gid) de %s a (%u, %u)" -#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 +#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "no s'ha pogut canviar el mode de %s a 0%o" -#: plugins/sudoers/visudo.c:700 +#: plugins/sudoers/visudo.c:748 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s i %s no estan al mateix sistema de fitxers, s'usarà mv per reanomenar" -#: plugins/sudoers/visudo.c:714 +#: plugins/sudoers/visudo.c:762 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "l'ordre ha fallat: '%s %s %s', no s'ha modificat %s" -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:772 #, c-format msgid "error renaming %s, %s unchanged" msgstr "error quan s'estava reanomenant %s, no s'ha modificat %s" -#: plugins/sudoers/visudo.c:786 +#: plugins/sudoers/visudo.c:834 msgid "What now? " msgstr "Què fem ara? " -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:848 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1829,72 +1950,62 @@ " (x) surt sense desar els canvis al fitxer sudoers\n" " (Q) surt i desa el canvis el fitxer sudoers (PERILL!)\n" -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:894 #, c-format msgid "unable to run %s" msgstr "no s'ha pogut executar %s" -#: plugins/sudoers/visudo.c:878 +#: plugins/sudoers/visudo.c:924 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: propietari incorrecte (uid, gid) hauria de ser (%uk, %u)\n" -#: plugins/sudoers/visudo.c:885 +#: plugins/sudoers/visudo.c:931 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permisos dolents, hauria de ser mode 0%o\n" -#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 +#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 #, c-format msgid "failed to parse %s file, unknown error" msgstr "no s'ha pogut analitzar el fitxer %s, error desconegut" -#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 +#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 #, c-format msgid "parse error in %s near line %d\n" msgstr "error d'anàlisi a %s a prop de la línia %d\n" -#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 #, c-format msgid "parse error in %s\n" msgstr "error d'anàlisi a %s\n" -#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 +#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 #, c-format msgid "%s: parsed OK\n" msgstr "%s: s'analitzat correctament\n" -#: plugins/sudoers/visudo.c:991 +#: plugins/sudoers/visudo.c:1041 #, c-format msgid "%s busy, try again later" msgstr "%s està ocupat, proveu un altre cop més tard" -#: plugins/sudoers/visudo.c:1087 -#, c-format -msgid "Error: cycle in %s `%s'" -msgstr "Error: cicle a %s `%s'" - -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1137 #, c-format -msgid "Warning: cycle in %s `%s'" -msgstr "Advertiment: cicle a %s `%s'" +msgid "%s:%d cycle in %s \"%s\"" +msgstr "%s:%d cicle a %s «%s»" -#: plugins/sudoers/visudo.c:1092 +#: plugins/sudoers/visudo.c:1140 #, c-format -msgid "Error: %s `%s' referenced but not defined" -msgstr "Error: s'ha referenciat però no s'ha definit %s `%s'" +msgid "%s:%d %s \"%s\" referenced but not defined" +msgstr "%s:%d %s «%s» s'ha referenciat però no s'ha definit " -#: plugins/sudoers/visudo.c:1093 +#: plugins/sudoers/visudo.c:1292 #, c-format -msgid "Warning: %s `%s' referenced but not defined" -msgstr "Advertiment: s'ha referenciat però no s'ha definit %s `%s'" +msgid "%s:%d unused %s \"%s\"" +msgstr "%s:%d sense usar %s «%s»" -#: plugins/sudoers/visudo.c:1236 -#, c-format -msgid "Warning: unused %s `%s'" -msgstr "Advertiment: %s `%s' sense usar" - -#: plugins/sudoers/visudo.c:1349 +#: plugins/sudoers/visudo.c:1403 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1903,7 +2014,7 @@ "%s - edita amb seguretat el fitxer sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1351 +#: plugins/sudoers/visudo.c:1405 msgid "" "\n" "Options:\n" @@ -1925,15 +2036,29 @@ " -V, --version mostra la informació de la versió i surt\n" " -x, --export=output_file escriu el fitxer sudoers en format JSON a output_file" -#: plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#, c-format +msgid "unknown defaults entry \"%s\"" +msgstr "entrada «%s» desconeguda de paràmetres predeterminats" + +#: plugins/sudoers/visudo_json.c:1017 #, c-format msgid "%s: input and output files must be different" msgstr "%s: els fitxers d'entrada i de sortida han de ser diferents" -#: toke.l:918 +#: toke.l:926 msgid "too many levels of includes" msgstr "massa nivells d'inclusions" +#~ msgid "Warning: cycle in %s `%s'" +#~ msgstr "Advertiment: cicle a %s `%s'" + +#~ msgid "Warning: %s `%s' referenced but not defined" +#~ msgstr "Advertiment: s'ha referenciat però no s'ha definit %s `%s'" + +#~ msgid "Warning: unused %s `%s'" +#~ msgstr "Advertiment: %s `%s' sense usar" + #~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" #~ msgstr "sudo_ldap_conf_add_ports: s'ha exhaurit l'espai quan s'estava expandint hostbuf" @@ -1954,6 +2079,3 @@ #~ msgid "fill_args: buffer overflow" #~ msgstr "fill_args: desbordament de la memòria intermèdia" - -#~ msgid "%s: unused %s_Alias %s" -#~ msgstr "%s: no s'ha usat %s_Alias %s" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/cs.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/cs.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/cs.po sudo-1.8.20p2/plugins/sudoers/po/cs.po --- sudo-1.8.19p1/plugins/sudoers/po/cs.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/cs.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,17 +1,17 @@ # Portable object template file for the sudoers plugin # This file is put in the public domain. # Todd C. Miller , 2011-2013 -# Petr Pisar , 2013, 2014, 2015, 2016. +# Petr Pisar , 2013, 2014, 2015, 2016, 2017. # # (AIX) registry → (AIXový) registr # timestamp → časové údaje # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 19:54+01:00\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 17:15+02:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -45,148 +45,172 @@ msgid "Sorry, try again." msgstr "Je nám líto, zkuste to znovu." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "nelze alokovat paměť" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "kontrolní součet vyžaduje název cesty" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "neplatná hodnota notbefore (začátek platnosti)" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "neplatná hodnota notafter (konec platnosti)" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "hodnota časového limitu je příliš velká" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "neplatná hodnota časového limitu" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -310,7 +334,7 @@ msgid "PAM authentication error: %s" msgstr "Chyba autentizace PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "v databázi %s neexistujete" @@ -404,536 +428,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "neznámé UID: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "neznámý uživatel: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Obor systémového protokolu, je-li syslog použit pro protokolování: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Priorita systémového protokolu, která se použije při úspěšné autentizaci uživatele: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Priorita systémového protokolu, která se použije při neúspěšné autentizaci: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Dotaz na jednorázový kód bude na vlastním řádku" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Ignoruje „.“ v PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Vždy, když se použije sudo, odešle e-mail" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Odešle e-mail, když autentizace uživatele selže" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Odešle e-mail, pokud uživatel není v sudoers" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Odešle e-mail, když uživatel není v sudoers uveden pro tento stroj" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Odešle e-mail, když uživatel nemá dovoleno spustit příkaz" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Odešle e-mail, když uživatel zkusí spustit příkaz" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Pro každou kombinaci uživatele a TTY použije samostatný časovač" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Před prvním použitím sudo proškolí uživatele" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Soubor obsahující školení k sudo: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Standardně vyžaduje, aby se uživatelé autentizovali" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Root může spustit sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Do (nesyslogového) protokolu zaznamenává název stroje" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Do (nesyslogového) protokolu zaznamenává rok" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Je-li sudo zavoláno bez argumentů, spustí shell" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Nastaví HOME na cílového uživatele, když se pouští shell s -s" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Vždy nastaví HOME na domovský adresář cílového uživatele" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Dovolí sběr některých údajů za účelem užitečných chybových zpráv" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vyžaduje v souboru sudoers plně kvalifikované názvy strojů" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Urazí uživatele, pokud zadá chybné heslo" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Dovolí uživateli spustit sudo, pouze když má TTY" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo bude dodržovat proměnou prostředí EDITOR" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Ptá se heslo roota, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Ptá se na heslo runas_default uživatele, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Ptá se na heslo cílového uživatele, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Použije výchozí nastavení v přihlašovací třídě cílového uživatele, existuje-li" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Nastaví proměnné prostředí LOGNAME a USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Nastaví pouze efektivní UID na cílového uživatele, nikoliv reálné UID" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Neinicializuje vektor skupin na vektor cílového uživatele" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Délka zlomu řádků v protokolu (0 pro nezalamování): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Limit na časové údaje autentizace: %.1f min" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Limit na výzvu k heslu: %.1f min" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Počet pokusů na zadání hesla: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask nebo 0777 pro hodnotu uživatele: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Cesta k souboru s protokolem: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Cesta k poštovnímu programu: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Přepínače pro poštovní program: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Adresa, kam zasílat poštu: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Adrese, ze které zasílat poštu: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Řádek s předmětem pro poštovní zprávy: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Zpráva při chybném hesle: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Cesta k adresáři se stavy lekcí: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Cesta k adresáři s časovými údaji autentizace: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Vlastník adresáře s časovými údaji autentizace: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Uživatelé v této skupině jsou vyjmuti z požadavků na heslo na PATH: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Výchozí výzva pro heslo: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Je-li nastaveno, passprompt přebije systémovou výzvu ve všech případech." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Výchozí uživatel, pro kterým spouštět příkazy: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Hodnota, kterou přebít PATH uživatele: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Cesta k editoru pro potřeby visudo: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kdy vyžadovat heslo pro pseudopříkaz „list“: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kdy vyžadovat heslo pro pseudopříkaz „verify“: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Přednačíst prázdné spouštěcí funkce obsažené v knihovně sudo_noexec" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Pokud je adresář LDAP dostupný, ignorovat místní soubor sudoers" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Souborové deskriptory >= %d budou před spuštěním příkazu uzavřeny" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Je-li nastaveno, uživatelé mohou přebít hodnotu „closefrom“ přepínačem -C" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Dovolit uživatelům nastavit libovolné proměnné prostředí" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Vrátit prostředí do výchozí množiny proměnných" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Proměnné prostředí kontrolované na logičnost:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Proměnné prostředí, které se mají odstranit:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Proměnné prostředí, které se mají zachovat:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Selinuxový role, která se použije v novém bezpečnostním kontextu: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Selinuxový typ, který se použije v novém bezpečnostním kontextu: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Cesta k souboru s prostředím určeném pro sudo: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Cesta k souboru s omezeným prostředím určeném pro sudo: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Národní prostředí, které se použije pro rozbor sudoers: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Dovolit sudu ptát se na heslo, i kdyby bylo čitelné" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Indikovat vstup uživatele při dotazu na heslo" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Použit rychlejší expanzi globů, která je méně přesná, ale nepřistupuje k souborovému systému" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Umask zadaná v sudoers přebije uživatelovu, i když je volnější" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Zaznamenávat vstup uživatele pro spouštěný příkaz" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Zaznamenávat výstup spouštěného příkazu" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Komprimovat protokoly o vstupu/výstupu pomocí zlib" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Vždy spouštět příkazy v pseudoTTY" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Modul pro podporu neunixových skupin: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Adresář, kam ukládat protokoly o vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Soubor, do kterého ukládat protokol o vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Při alokaci PTY přidat záznam do souboru utmp/utmpx" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Do utmp zapisovat runas uživatele, nikoliv uživatele volajícího" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Množina povolujících práv" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Množina omezujících práv" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Spouštět příkazy v PTY na pozadí" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Použít tuto službu PAM" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Název služby PAM, který se použije pro přihlašovací shelly" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Pokusit se získat pověření PAM pro cílového uživatele" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Vytvořit pro spouštěný příkaz novou relaci PAM" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maximální pořadové číslo protokolu o vstupu/výstupu: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Zapnout v sudoers podporu netgroup" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Kontrolovat nadřazené adresáře na možnost zápisu při úpravě souborů pomocí sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Následovat symbolické odkazy při úpravě souborů pomocí sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Dotazovat se modulu pro skupiny na neznámé systémové skupiny" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Porovnávat netgroups na celou n-tici: uživatel, stroj a doména" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Dovolit spuštění příkazu, i když sudo nemůže zapsat do auditního protokolu" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Dovolit spuštění příkazu, i když sudo nemůže zapsat do I/O protokolu" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Dovolit spuštění příkazu, i když sudo nemůže zapsat do souboru s protokolem" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Překládat skupiny v sudoers a hledat shodu na ID skupiny, ne na jméně" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Položky protokolu větší než tato hodnota budou rozděleny do více zprávu syslogu." +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Položky protokolu větší než tato hodnota budou rozděleny do více zpráv syslogu: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Uživatel, který bude vlastnit soubory s I/O protokolem: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Skupina, která bude vlastnit soubory s I/O protokolem: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Přístupová práva k souboru s I/O protokolem: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Spustit příkazy podle deskriptoru souboru namísto podle cesty: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignorovat neznámé položky Defaults v sudoers namísto vypisování varování" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Čas v sekundách, po kterém bude příkaz ukončen: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Povolit uživateli zadat časový limit na příkazovém řádku" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Zapisovat log na disk ihned namísto po větších částech" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d neznámá položka defaults „%s“" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: neznámá položka defaults „%s“" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d u „%s“ nebyla zadána žádná hodnota" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: u „%s“ nebyla zadána žádná hodnota" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d hodnoty u „%s“ musí začínat na „/“" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: hodnoty u „%s“ musí začínat na „/“" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d volba „%s“ nebere hodnotu" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: volba „%s“ nebere hodnotu" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d neplatný typ Defaults 0x%x u volby „%s“" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: neplatný typ Defaults 0x%x u volby „%s“" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d hodnota „%s“ je pro volbu „%s“ neplatná" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: hodnota „%s“ je pro volbu „%s“ neplatná" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "vnitřní chyba, přetečení %s" @@ -942,15 +994,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: poškozené pole envp, délka nesouhlasí" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "prostředí nelze znovu sestavit" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "je nám líto, ale nemáte dovoleno nastavovat následující proměnné prostředí: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "nepodporovaný druh kontrolního součtu %d pro %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: chyba při čtení" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -990,82 +1054,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Pár místní IP adresy a masky sítě:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existuje, ale nejedná se o adresář (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "nelze vytvořit adresář %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "nelze změnit práva %s na 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "neznámá skupina: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "nelze otevřít %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "%s nelze číst" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "do %s nelze zapsat" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "%s nelze vytvořit" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "nelze zapsat do souboru s I/O protokolem: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: vnitřní chyba, soubor číslo %d není otevřen" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port je příliš velký" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nepodporovaný typ ldapového URI: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "nelze míchat URI ldap a ldaps" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "při použití ldaps není starttls podporováno" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "nelze inicializovat certifikát SSL a databázi klíčů: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "pro SSL musíte v %s nastavit TLS_CERT" @@ -1083,7 +1153,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1092,7 +1162,7 @@ "\n" "Role LDAP: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1101,27 +1171,27 @@ "\n" "Role LDAP: NEZNÁMÁ\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Pořadí: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Příkazy:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP nelze inicializovat: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls uvedeno, ale knihovna LDAP nepodporuje ldap_start_tls_s_np() ani ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "neplatný atribut sudoOrder: %s" @@ -1199,15 +1269,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Je nám líto, uživatel %s nemá dovoleno spouštět „%s%s%s“ jako %s%s%s na %s.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: příkaz nenalezen" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1256,38 +1326,28 @@ msgid "unable to execute %s: %m" msgstr "nelze spustit %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "nepodporovaný druh kontrolního součtu %d pro %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: chyba při čtení" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "součet pro %s (%s) nemá tvar %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "nelze zjistit údaje o %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "chyba rozboru v %s kolem řádku %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "chyba rozboru v %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1296,41 +1356,41 @@ "\n" "Položka v sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Volby: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "nelze rozebrat seznam síťových adres" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "nelze vykonat %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Verze modulu s politikami sudoers je %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Verze gramatiky souboru sudoers je %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1339,22 +1399,22 @@ "\n" "Cesta sudoers: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "cesta k nsswitch: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "cesta k ldap.conf: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "cesta k ldap.secret: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "nelze zaregistrovat háček typu %d (verze %d.%d)" @@ -1423,48 +1483,48 @@ msgid "unable to parse gids for %s" msgstr "nelze rozebrat čísla GID pro %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "přetečení zásobníku oprávnění" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "podtečení zásobníku oprávnění" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "nelze přepnout GID na root" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "nelze přepnout na běhové GID" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "nelze nastavit vektor běhových skupin" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "nelze přepnout na běhové UID" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "nelze přepnout na GID sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "příliš mnoho procesů" @@ -1497,7 +1557,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "nelze nalézt symbol „%s“ v %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1506,7 +1566,7 @@ "\n" "Role SSSD: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1535,84 +1595,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Uživatel %s nemá dovoleno spustit sudo na %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "nelze inicializovat výchozí hodnoty sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "problém s položkami defaults" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "nenalezen žádné platné zdroje sudoers, končí se" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers udává, že root nemá dovoleno použít sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "nemáte dovoleno použít přepínač -C" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "vlastník časového údaje (%s): Takový uživatel neexistuje" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "žádné TTY" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "je nám líto, ale pro spuštění sudo musíte mít TTY" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "příkaz v aktuálním adresáři" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "je nám líto, ale nastavit časový limit nemáte dovoleno" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" -msgstr "je nám líto, ale nemáte dovoleno zachovat prostředí" +msgstr "je nám líto, ale zachovat prostředí nemáte dovoleno" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "příkaz je příliš dlouhý" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s není běžný soubor" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s je vlastněn UID %u, měl by být vlastněn %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s je zapisovatelný pro všechny" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s je vlastněn GID %u, mělo by být %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "pouze root může použít „-c %s“" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "neznáma přihlašovací třída: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "nelze přeložit název stroje %s" @@ -1632,7 +1696,7 @@ msgid "invalid speed factor: %s" msgstr "neplatný násobek rychlosti: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s verze %s\n" @@ -1789,11 +1853,11 @@ " -s, --speed=číslo zrychlí nebo zpomalí výstup\n" " -V, --version zobrazí údaje o verzi a skončí" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tstroj se neshoduje" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1801,7 +1865,7 @@ "\n" "Příkaz povolen" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1809,7 +1873,7 @@ "\n" "Příkaz odepřen" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1817,131 +1881,126 @@ "\n" "Příkaz se neshoduje" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s je zapisovatelný pro skupinu" # TODO: pluralize -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "nelze zkrátit soubor s časovými údaji na %lld bajtů" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "nelze přečíst hodiny" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "časový údaj z budoucnosti se ignoruje" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "časový údaj ukazuje příliš do budoucna: %20.20s" # TODO: pluralize -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "soubor s časovými údaji %s nelze zamknout" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "cesta ke stavům lekce je příliš dlouhý: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "verze gramatiky %s je %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "pro úpravu %s stiskněte enter: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "zadaný editor (%s) neexistuje" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "žádný editor nenalezen (cesta k editoru = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "chyba zápisu" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "nelze získat údaje o dočasném souboru (%s), %s nezměněno" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "dočasný soubor o nulové velikosti (%s), %s nezměněno" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) selhal, %s nezměněno" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s nezměněno" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "nelze znovu otevřít dočasný soubor (%s), %s nezměněno." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "nebylo možné rozebrat dočasný soubor (%s), neznámá chyba" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "vnitřní chyba, v seznamu nelze nalézt %s!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "nelze nastavit (UID, GID) %s na (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "nelze změnit práva %s na 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s a %s se nenachází na jednom souborovém systému, pro přejmenování se použije mv" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "příkaz selhal: „'%s %s %s“, %s nezměněno" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "chyba při přejmenování %s, %s nezměněno" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Co teď? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1953,62 +2012,72 @@ " (x) skončit bez uložení změn do souboru sudoers\n" " (Q) skončit a uložit změny do souboru sudoers (NEBEZPEČNÉ!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "nelze spustit %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: chybný vlastník (UID, GID), měl by být (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: chybná práva, měla by být 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "rozbor souboru %s se nezdařil, neznámá chyba" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "chyba při rozboru %s kolem řádku %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "chyba při rozboru %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: rozbor úspěšný\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s je zaneprázdněn, zkuste to později" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Chyba: %s:%d: smyčka v %s „%s“" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Pozor: %s:%d: smyčka v %s „%s“" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d: smyčka v %s „%s“" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Chyba: %s:%d: %s „%s“ použit, ale nedefinován" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d: %s „%s“ použit, ale nedefinován" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Pozor: %s:%d: %s „%s“ použit, ale nedefinován" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d nepoužitý %s „%s“" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Pozor> %s:%d nepoužitý %s „%s“" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2017,7 +2086,7 @@ "%s – bezpečně upraví soubor sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2041,17 +2110,17 @@ " -x, --export=výstupní_soubor\n" " exportuje sudoers ve formátu JSON do výstupního_souboru" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "neznámá položka defaults „%s“" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: vstupní a výstupní soubory se musí lišit" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "příliš mnoho úrovní zanoření" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/da.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/da.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/da.po sudo-1.8.20p2/plugins/sudoers/po/da.po --- sudo-1.8.19p1/plugins/sudoers/po/da.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/da.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ # Danish translation of sudoers. # This file is put in the public domain. -# Joe Hansen , 2011, 2012, 2013, 2014, 2015, 2016. +# Joe Hansen , 2011, 2012, 2013, 2014, 2015, 2016, 2017. # # audit -> overvågning # dummy -> attrap @@ -16,10 +16,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b1\n" +"Project-Id-Version: sudoers 1.8.19b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-12-04 23:17+0100\n" +"POT-Creation-Date: 2016-12-03 19:24-0700\n" +"PO-Revision-Date: 2017-01-31 23:17+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" @@ -63,11 +63,78 @@ #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:617 -#: plugins/sudoers/defaults.c:872 plugins/sudoers/defaults.c:1021 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 +#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 #: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 +#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 +#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 +#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 +#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 +#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 +#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 +#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 +#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 +#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 +#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 +#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 +#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 +#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 +#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 +#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 +#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +msgid "unable to allocate memory" +msgstr "kan ikke tildele hukommelse" + +#: gram.y:464 +msgid "a digest requires a path name" +msgstr "et sammendrag kræver et stinavn" + +#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 +#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 #: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 #: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 #: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 @@ -80,121 +147,54 @@ #: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 #: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 #: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3547 plugins/sudoers/ldap.c:3563 +#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 #: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:184 -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:467 -#: plugins/sudoers/logging.c:679 plugins/sudoers/logging.c:937 -#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:535 -#: plugins/sudoers/match.c:572 plugins/sudoers/match.c:770 -#: plugins/sudoers/match.c:828 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:405 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 +#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 +#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 +#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 +#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 +#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 +#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 #: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 -#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 -#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 -#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sssd.c:1234 plugins/sudoers/sssd.c:1248 -#: plugins/sudoers/sssd.c:1264 plugins/sudoers/sudoers.c:261 -#: plugins/sudoers/sudoers.c:271 plugins/sudoers/sudoers.c:279 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:658 -#: plugins/sudoers/sudoers.c:773 plugins/sudoers/sudoers.c:817 -#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:216 plugins/sudoers/testsudoers.c:233 -#: plugins/sudoers/timestamp.c:374 plugins/sudoers/timestamp.c:410 -#: plugins/sudoers/timestamp.c:826 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:309 -#: plugins/sudoers/visudo.c:315 plugins/sudoers/visudo.c:446 -#: plugins/sudoers/visudo.c:624 plugins/sudoers/visudo.c:964 -#: plugins/sudoers/visudo.c:1030 plugins/sudoers/visudo.c:1074 -#: plugins/sudoers/visudo.c:1171 plugins/sudoers/visudo_json.c:1035 toke.l:832 -#: toke.l:932 toke.l:1090 -msgid "unable to allocate memory" -msgstr "kan ikke tildele hukommelse" - -#: gram.y:464 -msgid "a digest requires a path name" -msgstr "et sammendrag kræver et stinavn" - -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 -#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:617 plugins/sudoers/defaults.c:872 -#: plugins/sudoers/defaults.c:1021 plugins/sudoers/editor.c:64 -#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3546 -#: plugins/sudoers/ldap.c:3562 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 -#: plugins/sudoers/logging.c:184 plugins/sudoers/logging.c:446 -#: plugins/sudoers/logging.c:467 plugins/sudoers/logging.c:937 -#: plugins/sudoers/match.c:500 plugins/sudoers/match.c:534 -#: plugins/sudoers/match.c:572 plugins/sudoers/match.c:770 -#: plugins/sudoers/match.c:827 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:97 -#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 -#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 -#: plugins/sudoers/policy.c:278 plugins/sudoers/policy.c:287 -#: plugins/sudoers/policy.c:326 plugins/sudoers/policy.c:336 -#: plugins/sudoers/policy.c:345 plugins/sudoers/policy.c:354 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/set_perms.c:356 -#: plugins/sudoers/set_perms.c:695 plugins/sudoers/set_perms.c:1054 -#: plugins/sudoers/set_perms.c:1350 plugins/sudoers/set_perms.c:1514 -#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 -#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 -#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 -#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1248 -#: plugins/sudoers/sssd.c:1264 plugins/sudoers/sudoers.c:261 -#: plugins/sudoers/sudoers.c:271 plugins/sudoers/sudoers.c:279 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:658 -#: plugins/sudoers/sudoers.c:773 plugins/sudoers/sudoers.c:817 -#: plugins/sudoers/sudoers_debug.c:106 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:216 plugins/sudoers/testsudoers.c:233 -#: plugins/sudoers/timestamp.c:374 plugins/sudoers/timestamp.c:410 -#: plugins/sudoers/timestamp.c:826 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:309 -#: plugins/sudoers/visudo.c:315 plugins/sudoers/visudo.c:446 -#: plugins/sudoers/visudo.c:624 plugins/sudoers/visudo.c:964 -#: plugins/sudoers/visudo.c:1030 plugins/sudoers/visudo.c:1074 -#: plugins/sudoers/visudo.c:1171 plugins/sudoers/visudo_json.c:1035 toke.l:832 -#: toke.l:932 toke.l:1090 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -412,13 +412,13 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:694 plugins/sudoers/sudoers.c:736 +#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 #, c-format msgid "unknown uid: %u" msgstr "ukendt uid: %u" #: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1125 +#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 #: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 #, c-format msgid "unknown user: %s" @@ -842,15 +842,15 @@ #: plugins/sudoers/def_data.c:407 msgid "Allow commands to be run even if sudo cannot write to the audit log" -msgstr "Tillader at kommandoer køres selv om sudo ikke kan skrive til revisionsloggen" +msgstr "Tillader at kommandoer køres, selv om sudo ikke kan skrive til revisionsloggen" #: plugins/sudoers/def_data.c:411 msgid "Allow commands to be run even if sudo cannot write to the I/O log" -msgstr "Tillader at kommandoer køres selv om sudo ikke kan skrive til I/O-loggen" +msgstr "Tillader at kommandoer køres, selv om sudo ikke kan skrive til I/O-loggen" #: plugins/sudoers/def_data.c:415 msgid "Allow commands to be run even if sudo cannot write to the log file" -msgstr "Tillader at kommandoer køres selv om sudo ikke kan skrive til logfilen" +msgstr "Tillader at kommandoer køres, selv om sudo ikke kan skrive til logfilen" #: plugins/sudoers/def_data.c:419 msgid "Resolve groups in sudoers and match on the group ID, not the name" @@ -873,75 +873,75 @@ #: plugins/sudoers/def_data.c:435 #, c-format msgid "File mode to use for the I/O log files: 0%o" -msgstr "Filtilstand at bruge for I/O-logfilerne: 0%o" +msgstr "Filtilstand der skal bruges for I/O-logfilerne: 0%o" -#: plugins/sudoers/defaults.c:210 +#: plugins/sudoers/defaults.c:211 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d ukendt standardpunkt »%s«" +msgstr "%s:%d ukendt indgang »%s« for standarder" -#: plugins/sudoers/defaults.c:213 +#: plugins/sudoers/defaults.c:214 #, c-format msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: ukendt standardpunkt »%s«" +msgstr "%s: ukendt indgang »%s« for standarder" -#: plugins/sudoers/defaults.c:236 +#: plugins/sudoers/defaults.c:237 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d ingen værdi angivet for »%s«" -#: plugins/sudoers/defaults.c:239 +#: plugins/sudoers/defaults.c:240 #, c-format msgid "%s: no value specified for \"%s\"" -msgstr "%s: ingen værdi angivet for »%s«" +msgstr "%s: ingen værdi angivet for »%s«" -#: plugins/sudoers/defaults.c:258 +#: plugins/sudoers/defaults.c:259 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d værdier for »%s« skal begynde med en »/«" -#: plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:262 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: værdier for »%s« skal begynde med en »/«" -#: plugins/sudoers/defaults.c:286 +#: plugins/sudoers/defaults.c:287 #, c-format msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d indstilling »%s« kan ikke modtage en værdi" +msgstr "%s:%d indstillingen »%s« kan ikke modtage en værdi" -#: plugins/sudoers/defaults.c:289 +#: plugins/sudoers/defaults.c:290 #, c-format msgid "%s: option \"%s\" does not take a value" -msgstr "%s: indstilling »%s« kan ikke modtage en værdi" +msgstr "%s: indstillingen »%s« kan ikke modtage en værdi" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:309 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d ugyldig standardtype 0x%x for tilvalget »%s«" -#: plugins/sudoers/defaults.c:311 +#: plugins/sudoers/defaults.c:312 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: ugyldig standardtype 0x%x for tilvalget »%s«" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:322 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d værdi »%s« er ugyldig for tilvalget »%s«" +msgstr "%s:%d værdien »%s« er ugyldig for tilvalget »%s«" -#: plugins/sudoers/defaults.c:324 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: værdi »%s« er ugyldig for tilvalget »%s«" +msgstr "%s: værdien »%s« er ugyldig for tilvalget »%s«" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 #: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 #: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 -#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:942 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 #: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 #: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" @@ -985,7 +985,17 @@ msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: inkompatibel gruppeudvidelsesmodul for hovedversion %d, forventede %d" -#: plugins/sudoers/interfaces.c:117 +#: plugins/sudoers/interfaces.c:79 plugins/sudoers/interfaces.c:96 +#, c-format +msgid "unable to parse IP address \"%s\"" +msgstr "kan ikke fortolke IP-adressen »%s«" + +#: plugins/sudoers/interfaces.c:84 plugins/sudoers/interfaces.c:101 +#, c-format +msgid "unable to parse netmask \"%s\"" +msgstr "kan ikke fortolke netmasken »%s«" + +#: plugins/sudoers/interfaces.c:129 msgid "Local IP address and netmask pairs:\n" msgstr "Lokal IP-adresse og netmaskepar:\n" @@ -1000,28 +1010,28 @@ msgid "unable to mkdir %s" msgstr "kan ikke mkdir %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1156 +#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 #: plugins/sudoers/testsudoers.c:389 #, c-format msgid "unknown group: %s" msgstr "ukendt gruppe: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:895 -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:813 -#: plugins/sudoers/sudoreplay.c:1017 plugins/sudoers/timestamp.c:383 +#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 #: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 #: plugins/sudoers/visudo_json.c:1024 #, c-format msgid "unable to open %s" msgstr "kan ikke åbne %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:899 -#: plugins/sudoers/sudoreplay.c:1128 +#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "kan ikke læse %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:594 +#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 #: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 #, c-format msgid "unable to write to %s" @@ -1133,123 +1143,123 @@ msgid "unable to send audit message" msgstr "kan ikke sende overvågningsbesked" -#: plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:130 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s: (kommando fortsat) %s" -#: plugins/sudoers/logging.c:159 +#: plugins/sudoers/logging.c:163 #, c-format msgid "unable to open log file: %s" msgstr "kan ikke åbne logfilen: %s" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:171 #, c-format msgid "unable to lock log file: %s" msgstr "kan ikke låse logfilen: %s" -#: plugins/sudoers/logging.c:200 +#: plugins/sudoers/logging.c:204 #, c-format msgid "unable to write log file: %s" msgstr "kan ikke skrive til logfilen: %s" -#: plugins/sudoers/logging.c:229 +#: plugins/sudoers/logging.c:233 msgid "No user or host" msgstr "Ingen bruger eller vært" -#: plugins/sudoers/logging.c:231 +#: plugins/sudoers/logging.c:235 msgid "validation failure" msgstr "valideringsfejl" -#: plugins/sudoers/logging.c:238 +#: plugins/sudoers/logging.c:242 msgid "user NOT in sudoers" msgstr "bruger IKKE i sudoers" -#: plugins/sudoers/logging.c:240 +#: plugins/sudoers/logging.c:244 msgid "user NOT authorized on host" msgstr "bruger IKKE autoriseret på vært" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:246 msgid "command not allowed" msgstr "kommando ikke tilladt" -#: plugins/sudoers/logging.c:277 +#: plugins/sudoers/logging.c:281 #, 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:280 +#: plugins/sudoers/logging.c:284 #, 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:284 +#: plugins/sudoers/logging.c:288 #, 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:287 +#: plugins/sudoers/logging.c:291 #, 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:324 plugins/sudoers/sudoers.c:466 -#: plugins/sudoers/sudoers.c:468 plugins/sudoers/sudoers.c:470 -#: plugins/sudoers/sudoers.c:472 plugins/sudoers/sudoers.c:1245 -#: plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 +#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/sudoers.c:1249 #, c-format msgid "%s: command not found" msgstr "%s: Kommando ikke fundet" -#: plugins/sudoers/logging.c:326 plugins/sudoers/sudoers.c:462 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 #, 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." +"Brug »sudo ./%s«, hvis dette er den »%s«, du ønsker at køre." -#: plugins/sudoers/logging.c:343 +#: plugins/sudoers/logging.c:347 msgid "authentication failure" msgstr "godkendelsesfejl" -#: plugins/sudoers/logging.c:369 +#: plugins/sudoers/logging.c:373 msgid "a password is required" msgstr "der kræves en adgangskode" -#: plugins/sudoers/logging.c:440 plugins/sudoers/logging.c:506 +#: plugins/sudoers/logging.c:444 plugins/sudoers/logging.c:510 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u ukorrekt adgangskodeforsøg" msgstr[1] "%u ukorrekte adgangskodeforsøg" -#: plugins/sudoers/logging.c:593 +#: plugins/sudoers/logging.c:597 msgid "unable to fork" msgstr "kan ikke forgrene" -#: plugins/sudoers/logging.c:601 plugins/sudoers/logging.c:653 +#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:657 #, c-format msgid "unable to fork: %m" msgstr "kan ikke forgrene: %m" -#: plugins/sudoers/logging.c:643 +#: plugins/sudoers/logging.c:647 #, c-format msgid "unable to open pipe: %m" msgstr "kan ikke åbne datakanal: %m" -#: plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:672 #, c-format msgid "unable to dup stdin: %m" msgstr "kan ikke dup stdin: %m" -#: plugins/sudoers/logging.c:706 +#: plugins/sudoers/logging.c:710 #, c-format msgid "unable to execute %s: %m" msgstr "kan ikke køre %s: %m" @@ -1269,7 +1279,7 @@ msgid "digest for %s (%s) is not in %s form" msgstr "sammendrag for %s (%s) er ikke i %s-form" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:910 +#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 #: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 #, c-format msgid "unable to stat %s" @@ -1542,7 +1552,7 @@ msgid "unable to initialize sudoers default values" msgstr "kan ikke initialisere sudoers' standardværdier" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:857 +#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 msgid "problem with defaults entries" msgstr "problem med standardpunkter" @@ -1558,207 +1568,207 @@ msgid "you are not permitted to use the -C option" msgstr "du har ikke tilladelse til at bruge tilvalget -C" -#: plugins/sudoers/sudoers.c:385 +#: plugins/sudoers/sudoers.c:387 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tidsstempelejer (%s): Ingen sådan bruger" -#: plugins/sudoers/sudoers.c:399 +#: plugins/sudoers/sudoers.c:401 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:400 +#: plugins/sudoers/sudoers.c:402 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:461 +#: plugins/sudoers/sudoers.c:463 msgid "command in current directory" msgstr "kommando i aktuel mappe" -#: plugins/sudoers/sudoers.c:481 +#: plugins/sudoers/sudoers.c:483 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:802 +#: plugins/sudoers/sudoers.c:804 msgid "command too long" msgstr "kommando er for lang" -#: plugins/sudoers/sudoers.c:914 +#: plugins/sudoers/sudoers.c:916 #, c-format msgid "%s is not a regular file" msgstr "%s er ikke en regulær fil" -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 #, 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:922 toke.l:957 +#: plugins/sudoers/sudoers.c:924 toke.l:957 #, c-format msgid "%s is world writable" msgstr "%s er skrivbar for alle" -#: plugins/sudoers/sudoers.c:926 toke.l:960 +#: plugins/sudoers/sudoers.c:928 toke.l:960 #, 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:959 +#: plugins/sudoers/sudoers.c:961 #, c-format msgid "only root can use \"-c %s\"" msgstr "kun administrator (root) kan bruge »-c %s«" -#: plugins/sudoers/sudoers.c:978 +#: plugins/sudoers/sudoers.c:980 #, c-format msgid "unknown login class: %s" msgstr "ukendt logindklasse: %s" -#: plugins/sudoers/sudoers.c:1061 plugins/sudoers/sudoers.c:1089 +#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 #, c-format msgid "unable to resolve host %s" msgstr "kan ikke slå vært %s op" -#: plugins/sudoers/sudoreplay.c:232 +#: plugins/sudoers/sudoreplay.c:236 #, c-format msgid "invalid filter option: %s" msgstr "ugyldigt filtertilvalg: %s" -#: plugins/sudoers/sudoreplay.c:245 +#: plugins/sudoers/sudoreplay.c:249 #, c-format msgid "invalid max wait: %s" msgstr "ugyldig maks ventetid: %s" -#: plugins/sudoers/sudoreplay.c:251 +#: plugins/sudoers/sudoreplay.c:255 #, c-format msgid "invalid speed factor: %s" msgstr "ugyldig hastighedsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: plugins/sudoers/sudoreplay.c:286 +#: plugins/sudoers/sudoreplay.c:290 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:292 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:308 +#: plugins/sudoers/sudoreplay.c:312 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Genafspiller sudosession: %s\n" -#: plugins/sudoers/sudoreplay.c:314 +#: plugins/sudoers/sudoreplay.c:318 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Advarsel: Din terminal er for lille til korrekt at afspille loggen.\n" -#: plugins/sudoers/sudoreplay.c:315 +#: plugins/sudoers/sudoreplay.c:319 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Loggeometri er %d x %d, din terminals geometri er %d x %d." -#: plugins/sudoers/sudoreplay.c:406 +#: plugins/sudoers/sudoreplay.c:410 msgid "unable to set tty to raw mode" msgstr "kan ikke angive tty til rå (raw) tilstand" -#: plugins/sudoers/sudoreplay.c:435 +#: plugins/sudoers/sudoreplay.c:439 #, c-format msgid "invalid timing file line: %s" msgstr "ugyldig timingfillinje: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:659 plugins/sudoers/sudoreplay.c:684 #, c-format msgid "ambiguous expression \"%s\"" msgstr "tvetydigt udtryk »%s«" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:706 msgid "unmatched ')' in expression" msgstr "manglende »)« i udtryk" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:710 #, c-format msgid "unknown search term \"%s\"" msgstr "ukendt søgeterm »%s«" -#: plugins/sudoers/sudoreplay.c:721 +#: plugins/sudoers/sudoreplay.c:725 #, c-format msgid "%s requires an argument" msgstr "%s kræver et argument" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1104 +#: plugins/sudoers/sudoreplay.c:728 plugins/sudoers/sudoreplay.c:1108 #, c-format msgid "invalid regular expression: %s" msgstr "ugyldigt regulært udtryk: %s" -#: plugins/sudoers/sudoreplay.c:728 +#: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" msgstr "kunne ikke fortolke dato »%s«" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" msgstr "mangler »(« i udtryk" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:743 msgid "illegal trailing \"or\"" msgstr "ugyldig kæde »or« (eller)" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:745 msgid "illegal trailing \"!\"" msgstr "ugyldig kæde »!«" -#: plugins/sudoers/sudoreplay.c:790 +#: plugins/sudoers/sudoreplay.c:794 #, c-format msgid "unknown search type %d" msgstr "ukendt søgeterm %d" -#: plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:832 #, c-format msgid "%s: invalid log file" msgstr "%s: Ugyldig logfil" -#: plugins/sudoers/sudoreplay.c:846 +#: plugins/sudoers/sudoreplay.c:850 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: Tidsstempelfelt mangler" -#: plugins/sudoers/sudoreplay.c:853 +#: plugins/sudoers/sudoreplay.c:857 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: Tidsstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:860 +#: plugins/sudoers/sudoreplay.c:864 #, c-format msgid "%s: user field is missing" msgstr "%s: Brugerfelt mangler" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:873 #, c-format msgid "%s: runas user field is missing" msgstr "%s: runas-brugerfelt mangler" -#: plugins/sudoers/sudoreplay.c:878 +#: plugins/sudoers/sudoreplay.c:882 #, c-format msgid "%s: runas group field is missing" msgstr "%s: runas-gruppefelt mangler" -#: plugins/sudoers/sudoreplay.c:1241 +#: plugins/sudoers/sudoreplay.c:1245 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "brug: %s [-h] [-d mappe] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1248 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "brug: %s [-h] [-d mappe] -l [søgeudtryk]\n" -#: plugins/sudoers/sudoreplay.c:1253 +#: plugins/sudoers/sudoreplay.c:1257 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1767,7 +1777,7 @@ "%s - genafspil sudosessionslogge\n" "\n" -#: plugins/sudoers/sudoreplay.c:1255 +#: plugins/sudoers/sudoreplay.c:1259 msgid "" "\n" "Options:\n" @@ -1827,26 +1837,26 @@ msgid "unable to truncate time stamp file to %lld bytes" msgstr "kan ikke afkorte tidsstempelfil til %lld byte" -#: plugins/sudoers/timestamp.c:730 plugins/sudoers/timestamp.c:797 +#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 #: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 msgid "unable to read the clock" msgstr "kan ikke læse uret" -#: plugins/sudoers/timestamp.c:744 +#: plugins/sudoers/timestamp.c:752 msgid "ignoring time stamp from the future" msgstr "ignorerer tidsstempel fra fremtiden" -#: plugins/sudoers/timestamp.c:756 +#: plugins/sudoers/timestamp.c:764 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tidsstempel for langt ude i fremtiden: %20.20s" -#: plugins/sudoers/timestamp.c:851 +#: plugins/sudoers/timestamp.c:859 #, c-format msgid "unable to lock time stamp file %s" msgstr "kan ikke låse tidsstempelfilen %s" -#: plugins/sudoers/timestamp.c:895 plugins/sudoers/timestamp.c:915 +#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 #, c-format msgid "lecture status path too long: %s/%s" msgstr "undervisningsstatussti er for lang: %s/%s" @@ -2001,10 +2011,11 @@ msgid "%s:%d %s \"%s\" referenced but not defined" msgstr "%s:%d %s »%s« refereret men ikke defineret" +# (ental) #: plugins/sudoers/visudo.c:1292 #, c-format msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d ubrugte %s »%s«" +msgstr "%s:%d ubrugt %s »%s«" #: plugins/sudoers/visudo.c:1403 #, c-format @@ -2040,7 +2051,7 @@ #: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 #, c-format msgid "unknown defaults entry \"%s\"" -msgstr "ukendt standardpunkt »%s«" +msgstr "ukendt indgang »%s« for standarder" #: plugins/sudoers/visudo_json.c:1017 #, c-format Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/de.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/de.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/de.po sudo-1.8.20p2/plugins/sudoers/po/de.po --- sudo-1.8.19p1/plugins/sudoers/po/de.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/de.po 2017-05-10 15:38:43.000000000 +0000 @@ -3,13 +3,13 @@ # Todd C. Miller , 2011-2013 # Hendrik Knackstedt , 2013 # Mario Blättermann , 2015. -# Jochen Hein , 2001-2016. +# Jochen Hein , 2001-2017. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 17:49+0100\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 17:43+0200\n" "Last-Translator: Jochen Hein \n" "Language-Team: German \n" "Language: German\n" @@ -43,148 +43,172 @@ msgid "Sorry, try again." msgstr "Das hat nicht funktioniert, bitte nochmal probieren." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "Es kann kein Speicher mehr alloziert werden" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "Eine Prüfsumme erfordert einen Pfadnamen" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "ungültiger Wert für »notbefore«" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "ungültiger Wert für »notafter«" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "Wert für Timeout ist zu groß" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "ungültiger Wert für Timeout" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -309,7 +333,7 @@ msgid "PAM authentication error: %s" msgstr "Fehler bei der PAM-Authentifizierung: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "Der Benutzer existiert in der %s-Datenbank nicht" @@ -403,536 +427,565 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "Unbekannte Benutzer-ID: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "Unbekannter Benutzer: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Syslog Facility, wenn syslog für Protokollierung verwendet wird: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Syslog-Priorität, wenn sich der Benutzer erfolgreich authentifiziert: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Syslog-Priorität, wenn sich der Benutzer nicht erfolgreich authentifiziert: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Die OTP-Eingabeaufforderung (One-Time-Passwords) in eine eigene Zeile schreiben" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "».« in $PATH ignorieren" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Immer eine Mail senden, wenn sudo gestartet wird" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Eine Mail senden, wenn die Authentifizierung des Benutzers fehlschlägt" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Eine Mail senden, wenn der Benutzer nicht in der sudoers-Datei steht" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Eine Mail senden, wenn der Benutzer nicht in der sudoers-Datei für diesen Rechner steht" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Eine Mail senden, wenn der Benutzer nicht berechtigt ist, einen Befehl auszuführen" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Eine Mail senden, wenn der Benutzer versucht, einen Befehl auszuführen" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Getrennte Zeitstempel für jede Benutzer/tty-Kombination verwenden" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Den Benutzer beim ersten Aufruf von sudo belehren" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Datei mit der sudo-Belehrung: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Standardmäßig muss sich der Benutzer authentifizieren" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Root darf sudo verwenden" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Den Hostnamen in der (nicht-syslog-)Protokolldatei speichern" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Das Jahr in der (nicht-syslog-)Protokolldatei speichern" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Eine Shell starten, wenn sudo ohne Parameter aufgerufen wird" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Die Umgebungsvariable $HOME beim Starten einer Shell mit »-s« setzen" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Immer die Variable $HOME auf das Home-Verzeichnis des Ziel-Benutzers setzen" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Informationssammlung für nützliche Fehlermeldungen erlauben" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vollständige Hostnamen in der sudoers-Datei erfordern" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "»Beschimpfung« bei Eingabe eines falschen Passwortes" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Der Benutzer darf sudo nur aufrufen, wenn ein tty vorhanden ist" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo beachtet die Umgebungsvariable »EDITOR«" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Nach dem root-Passwort fragen, nicht nach dem Passwort des Benutzers" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Nach dem Passwort des Benutzers »runas_default« fragen, nicht nach dem Passwort des aufrufenden Benutzers" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Nach dem Passwort des Ziel-Benutzers fragen, nicht nach dem Passwort des aufrufenden Benutzers" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Standards auf die Anmeldeklasse des Zielbenutzers anwenden, falls diese vorhanden ist" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Die Umgebungsvariablen »LOGNAME« und »USER« setzen" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Nur die effektive UID auf den Ziel-Benutzer setzen, nicht die reale UID" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Die sekundären Gruppen nicht auf die Gruppen des Ziel-Benutzers setzen" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Zeilenlänge der Protokolldatei für Zeilenumbruch (0 für keinen Zeilenumbruch): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Zeitlimit für den Authentifizierungszeitstempel: %.1f Minuten" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Zeitlimit bei der Eingabe des Passwortes: %.1f Minuten" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Anzahl Versuche zur Eingabe des Passwortes: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Zu verwendende Umask oder 0777, um die Umask des Benutzers zu verwenden: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Pfad zur Protokolldatei: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Pfad zum Mail-Programm: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Parameter für das Mail-Programm: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Mail-Adresse des Empfängers: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Mail-Adresse des Absenders: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Betreffzeile für Mails: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Meldung bei Eingabe eines falschen Passwortes: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Verzeichnis für den Belehrungsstatus: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Pfad zum Authentifizierungszeitstempel-Verzeichnis: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Besitzer des Authentifizierungszeitstempelverzeichnisses: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Benutzer in dieser Gruppe sind von Passwort- und PATH-Anforderungen ausgenommen: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Standard-Eingabeaufforderung für das Passwort: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Überschreibt in allen Fällen bei der Passwortabfrage die Systemabfrage, falls gesetzt." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardbenutzer, unter dem die Befehle ausgeführt werden: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Wert, mit dem der Inhalt von $PATH des Benutzers überschrieben werden soll: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Pfad zum Editor, den visudo verwenden soll: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Wann soll ein Passwort für den Pseudobefehl »list« erforderlich sein: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Wann soll ein Passwort für den Pseudobefehl »verify« erforderlich sein: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Die Dummy-exec-Funktion aus der Bibliothek sudo_noexec vorladen" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Wenn das LDAP-Verzeichnis erreichbar ist, wird die lokale sudoers-Datei ignoriert?" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Datei-Deskriptoren >= %d werden geschlossen, bevor ein Befehl ausgeführt wird" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Benutzer können den Wert für »closeform« mit der der Option -C überschreiben, wenn diese Option gesetzt ist." -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Benutzern das Setzen beliebiger Umgebungsvariablen erlauben" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Die Umgebung auf einen Standardsatz an Variablen zurücksetzen" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Folgende Umgebungsvariablen prüfen:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Folgende Umgebungsvariablen löschen:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Folgende Umgebungsvariablen bewahren:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Im neuen Security-Kontext von SELinux wird diese Rolle verwendet: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Im neuen Security-Kontext von SELinux wird dieser Typ verwendet: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Pfad zur sudo-spezifischen »environment«-Datei: %s" -#: plugins/sudoers/def_data.c:299 +# XXX +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Pfad zur eingeschränkten sudo »environment«-Datei: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Beim Auswerten der sudoers-Datei wird diese Locale verwendet: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "sudo erlauben, nach einem Passwort zu fragen, auch wenn das Passwort sichtbar wird" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Sichtbare Rückmeldung bei der Passworteingabeaufforderung, wenn der Benutzer etwas eingibt" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Schnelleren Musterabgleich verwenden, der zwar ungenauer ist, aber nicht auf das Dateisystem zugreift" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Die umask in sudoers überschreibt die umask des Benutzers, selbst wenn diese mehr Berechtigungen zulässt" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Benutzereingaben für den ausgeführten Befehl protokollieren" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Die Ausgabe des ausgeführten Befehls protokollieren" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Ein-/Ausgabe-Protokolle mittels zlib protokollieren" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Befehle immer in einem Pseudo-TTY ausführen" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin für Unterstützung von Nicht-Unix-Gruppen: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Verzeichnis zur Speicherung der Ein-/Ausgabe-Protokolle: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Datei zur Speicherung der Ein-/Ausgabe-Protokolle: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Einen Eintrag in die utmp/utmpx-Datei einfügen, wenn ein Pseudo-TTY erzeugt wird" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Für den Eintrag in der utmp-Datei den runas-Benutzer verwenden, nicht den aufrufenden Benutzer" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Menge der erlaubten Priviliegien" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Menge der eingeschränkten Privilegien" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Befehle mit einem Pseudo-TTY im Hintergrund starten" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Den PAM-Service-Namen verwenden" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Den PAM-Service-Namen für Anmelde-Shells verwenden" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Versuchen, die PAM-Anmeldedaten für den Ziel-Benutzer zu bekommen" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Eine neue PAM-Sitzung erzeugen, um den Befehl auszuführen" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maximale Sequenznummer des Ein-/Ausgabe-Protokolls: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Unterstützung für netgroups in sudoers aktivieren" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Prüfe die übergeordneten Verzeichnisse auf Schreibbarkeit beim Editieren von Dateien mit »sudoedit«" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Folge symbolischen Links beim Editieren von Dateien mit sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Frage das Group-Plugin nach unbekannten System-Gruppen" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Prüfe die Netgroup-Zuordnung aufgrund des gesamten Tupels: Benutzer, Host und Domain" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Erlaubt das Ausführen von Kommandos, auch wenn kein Audit-Log geschrieben werden kann" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Erlaubt das Ausführen von Kommandos, auch wenn kein I/O-Log geschrieben werden kann" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Erlaubt das Ausführen von Kommandos, auch wenn kein Log geschrieben werden kann" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Beim Auflösen von Gruppen in der sudoers nach der Guppen-ID suchen, nicht nach dem Gruppenname" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Log-Einträge größer als dieser Wert werden auf mehrere Syslog Einträge verteilt" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Log-Einträge größer als dieser Wert werden auf mehrere Syslog Einträge verteilt: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Eigentümer der I/O Logdateien: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Gruppe der I/O Logdateien: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Dateimode der I/O Logdatei: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Führe Kommandos mit Hilfe eines Dateideskriptors anstelle des Pfades aus: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignoriere unbekannte Default-Einträge in der Datei »sudoers« anstatt eine Warnung auszugeben" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Laufzeit in Sekunde, nach der das Kommando abgebrochen wird: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Erlaube dem Benutzer per Kommandozeile einen Timeout anzugeben" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Schreibe Log-Daten direkt ohne zu puffern" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d Kein Wert für »%s« angegeben" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: Kein Wert für »%s« angegeben" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d Werte für »%s« müssen mit einem »/« beginnen" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: Werte für »%s« müssen mit einem »/« beginnen" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d Die Option »%s« wird ohne Wert verwendet" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: Die Option »%s« wird ohne Wert verwendet" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d Ungültiger »Defaults« Typ 0x%x für Option »%s«" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: Ungültiger »Defaults« Typ 0x%x für Option »%s«" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d Der Wert »%s« ist für die Option »%s« ungültig" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: Der Wert »%s« ist für die Option »%s« ungültig" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "Interner Fehler, %s-Überlauf" @@ -941,15 +994,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp ist beschädigt, die Längen passen nicht" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "Das Environment kann nicht neu erstellt werden" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "Leider dürfen die folgenden Umgebungsvariablen nicht gesetzt werden: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "Prüfsummentyp %d wird für %s nicht unterstützt" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: Fehler beim Lesen" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -989,82 +1054,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Lokale IP-Adresse und Netzmaske:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existiert, aber ist kein Verzeichnis (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "Das Verzeichnis »%s« kann nicht erstellt werden" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "Ändern des Modus von %s auf 0%o gescheitert" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "Unbekannte Gruppe: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "Die Datei »%s« kann nicht geöffnet werden" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "Die Datei »%s« kann nicht gelesen werden" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "In die Datei »%s« kann nicht geschrieben werden" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "Die Datei »%s« kann nicht erstellt werden" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "In die I/O Logdatei kann nicht geschrieben werden: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: Interner Fehler, Dateiindex %d nicht geöffnet!" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: Port ist zu groß" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "LDAP-Adresstyp wird nicht unterstützt: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap- und ldaps-Adressen können nicht zusammen verwendet werden" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "starttls wird für ldaps nicht unterstützt" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "Die Zertifikat- und Schlüsseldatenbank für SSL kann nicht initialisiert werden: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "In der Datei »%s« muss »TLS_CERT« angegeben sein, um SSL zu nutzen" @@ -1082,7 +1153,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1091,7 +1162,7 @@ "\n" "LDAP-Rolle: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1100,27 +1171,27 @@ "\n" "LDAP-Rolle: UNBEKANNT\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Reihenfolge: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Befehle:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP kann nicht initialisiert werden: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls ist angegeben, aber die LDAP-Bibliotheken unterstützen ldap_start_tls_s() und ldap_start_tls_s_np() nicht" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "Ungültiges »sudoOrder« Attribut: %s" @@ -1198,15 +1269,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Leider darf der Benutzer %s »%s%s%s« als %s%s%s auf %s nicht ausführen.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: Befehl nicht gefunden" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1254,38 +1325,28 @@ msgid "unable to execute %s: %m" msgstr "%s kann nicht ausgeführt werden: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "Prüfsummentyp %d wird für %s nicht unterstützt" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: Fehler beim Lesen" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "Prüfsumme für %s (%s) ist nicht in der Form %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "stat konnte nicht auf %s angewendet werden" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "Syntax-Fehler in %s bei der Zeile %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "Syntax-Fehler in %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1294,41 +1355,41 @@ "\n" "Sudoers-Eintrag:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Optionen: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "Die Netzwerkadressliste kann nicht eingelesen werden" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "%s kann nicht ausgeführt werden" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers-Policy-Plugin Version %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-Datei-Grammatik-Version %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1337,22 +1398,22 @@ "\n" "Sudoers-Pfad: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch-Pfad: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf-Pfad: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret-Pfad: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "Der Hook vom Typ %d kann nicht registriert werden (Version %d.%d)" @@ -1421,48 +1482,48 @@ msgid "unable to parse gids for %s" msgstr "Die Gruppen für %s können nicht geparst werden" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "Stack-Überlauf der Zugriffsrechte" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "Stack-Bereichsunterschreitung der Zugriffsrechte" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "Wechsel zur root-GID ist nicht möglich" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "Wechsel zur runas-UID ist nicht möglich" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "Die runas-Gruppen können nicht gesetzt werden" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "Wechsel zur runas-GID ist nicht möglich" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "Wechsel zur sudoers-GID ist nicht möglich" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "Zu viele Prozesse" @@ -1495,7 +1556,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "Das Symbol »%s« kann in %s nicht gefunden werden" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1504,7 +1565,7 @@ "\n" "SSSD-Rolle: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1533,84 +1594,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Der Benutzer %s darf sudo auf dem Rechner %s nicht ausführen.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "Standardwerte für sudoers können nicht initialisiert werden" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "Problem mit den Standard-Einträgen" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "Keine gültige sudoers-Quelle gefunden, Programmende" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers gibt an, dass root sudo nicht verwenden darf" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "Sie dürfen die Option -C nicht verwenden" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "Zeitstempelbesitzer (%s): Benutzer existiert nicht" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "Kein tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "Sie müssen ein TTY haben, um sudo zu verwenden" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "Befehl ist im aktuellen Verzeichnis" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "Sie dürfen keinen Timeout angeben" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "Sie dürfen das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "Der Befehl ist zu lang" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s gehört UID %u, sollte UID %u gehören" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s ist für alle beschreibbar (world writable)" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s gehört GID %u, sollte allerdings %u gehören" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "Nur root kann »-c %s« verwenden" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "Unbekannte Anmeldeklasse: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "Hostname %s kann nicht aufgelöst werden" @@ -1630,7 +1695,7 @@ msgid "invalid speed factor: %s" msgstr "Ungültiger Geschwindigkeitsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s Version %s\n" @@ -1792,11 +1857,11 @@ " -V, --version zeigt Versionsinformationen an und beendet\n" " das Programm" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tHost stimmt nicht überein" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1804,7 +1869,7 @@ "\n" "Befehl erlaubt" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1812,7 +1877,7 @@ "\n" "Befehl verweigert" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1820,129 +1885,124 @@ "\n" "Befehl nicht erkannt" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s ist für die Gruppe beschreibbar" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "Die Zeitstempeldatei kann nicht auf %lld Bytes abgeschnitten werden" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "Die Uhrzeit kann nicht ausgelesen werden" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "Zeitstempel aus der Zukunft wird ignoriert" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "Zeitstempel ist zu weit in der Zukunft: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "Die Zeitstempeldatei »%s« kann nicht gesperrt werden" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "Pfad zur Belehrung ist zu lang: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s-Grammatik Version %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "Drücken Sie die Eingabetaste, um %s zu bearbeiten: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "Der angegebene Editor (%s) ist nicht vorhanden" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "Kein Editor gefunden (Pfad zum Editor = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "Schreibfehler" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "Anwenden von stat auf die temporäre Datei (%s) gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "Leere temporäre Datei (%s), %s ist unverändert" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "Editor-Aufruf (%s) ist gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s unverändert" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "Erneutes Öffnen der temporären Datei (%s) gescheitert, %s ist unverändert." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "Analyse der temporären Datei (%s) gescheitert, unbekannter Fehler" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "Interner Fehler, %s in der Liste nicht gefunden!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "Festlegen von (uid, gid) von %s auf (%u, %u) gescheitert" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "Ändern des Modus von %s auf 0%o gescheitert" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s und %s befinden sich nicht im gleichen Dateisystem, werden mit mv umbenannt" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "Befehl gescheitert: »%s %s %s«, %s unverändert" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "Fehler beim Umbenennen von %s, %s unverändert" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Was jetzt? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1954,62 +2014,72 @@ " Beenden, ohne die Änderungen an der sudoers-Datei zu speichern (mit x)\n" " Beenden und Änderungen an der sudoers-Datei speichern (mit Q, VORSICHT!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: Falsche Besitzer-(uid, gid), sollte (%u, %u) sein\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: Falsche Zugriffsrechte, sollte Modus 0%o sein\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "Analyse der Datei %s gescheitert, unbekannter Fehler" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "Analysefehler in %s nahe Zeile %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "Analysefehler in %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: Analyse OK\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s ist in Verwendung, versuchen Sie es später erneut" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Fehler: %s:%d Zyklus in %s »%s«" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Warnung: %s:%d Zyklus in %s »%s«" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d Zyklus in %s »%s«" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Fehler: %s:%d %s »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d %s »%s« wird verwendet, ist aber nicht definiert" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Warnung: %s:%d %s »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d nicht verwendet: %s »%s«" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Warnung: %s:%d nicht verwendet: %s »%s«" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2018,7 +2088,7 @@ "%s – Die sudoers-Datei sicher bearbeiten\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2040,16 +2110,16 @@ " -V, --version Versionsinformation anzeigen und beenden\n" " -x, --export=ausgabedatei sudoers im JSON-Format exportieren" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: Eingabe- und Ausgabedatei müssen unterschiedlich sein" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "Zu viele geschachtelte include-Einträge" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/eo.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/eo.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/eo.po sudo-1.8.20p2/plugins/sudoers/po/eo.po --- sudo-1.8.19p1/plugins/sudoers/po/eo.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/eo.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,22 +1,22 @@ # Esperanto translations for sudo package. # This file is put in the public domain. -# Felipe Castro , 2013, 2014, 2015, 2016. +# Felipe Castro , 2013, 2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.16b1\n" +"Project-Id-Version: sudoers 1.8.19b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-02-19 15:48-0700\n" -"PO-Revision-Date: 2016-03-04 09:32-0300\n" +"POT-Creation-Date: 2016-12-03 19:24-0700\n" +"PO-Revision-Date: 2017-01-25 13:16-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.5.4\n" #: confstr.sh:1 msgid "syntax error" @@ -42,140 +42,156 @@ msgid "Sorry, try again." msgstr "Malĝuste. Reprovu." -#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 -#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 -#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 -#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 -#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 -#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 -#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 -#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 -#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 -#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 -#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 -#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 -#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 -#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 -#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 -#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 -#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 -#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 -#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 -#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 -#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 -#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 -#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 -#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 -#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 -#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 -#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 -#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 -#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 -#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 -#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 -#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 -#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 -#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 -#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 -#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 -#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 -#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 -#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 -#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 -#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 -#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 -#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 -#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 -#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 -#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 -#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 +#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 +#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 +#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 +#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 +#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 +#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 +#: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 +#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 +#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 +#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 +#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 +#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 +#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 +#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 +#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 +#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 +#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 +#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 +#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 +#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 +#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 +#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 +#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 +#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 +#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 -#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 -#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 -#: toke.l:1082 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 msgid "unable to allocate memory" msgstr "ne eblas rezervi memoron" -#: gram.y:471 +#: gram.y:464 msgid "a digest requires a path name" msgstr "resumo postulas vojnomon" -#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 -#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 -#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 -#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 -#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 -#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 -#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 -#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 -#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 -#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 -#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 -#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 -#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 -#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 -#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 -#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 -#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 +#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 +#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 +#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 +#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 +#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 +#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 +#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 #: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 -#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 -#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 -#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 -#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 -#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 -#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 -#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 -#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 -#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 -#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 +#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 +#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 +#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 +#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 +#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 +#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 +#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 #: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 #: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 -#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 -#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 -#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 -#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 -#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 -#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 -#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 -#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 -#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 -#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 -#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 -#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 -#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 -#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 -#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 -#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 -#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 -#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/alias.c:132 +#: plugins/sudoers/alias.c:135 #, c-format -msgid "Alias `%s' already defined" -msgstr "Kromnomo '%s' jam ekzistas" +msgid "Alias \"%s\" already defined" +msgstr "Kromnomo \"%s\" jam ekzistas" #: plugins/sudoers/auth/bsdauth.c:68 #, c-format @@ -261,37 +277,37 @@ msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Ne eblas kontroli TGT! Ebla atako!: %s" -#: plugins/sudoers/auth/pam.c:92 +#: plugins/sudoers/auth/pam.c:108 msgid "unable to initialize PAM" msgstr "ne eblas ekigi PAM" -#: plugins/sudoers/auth/pam.c:164 +#: plugins/sudoers/auth/pam.c:194 msgid "account validation failure, is your account locked?" msgstr "malsukceso ĉe konta validigo, ĉu via konto estas ŝlosita?" -#: plugins/sudoers/auth/pam.c:168 +#: plugins/sudoers/auth/pam.c:198 msgid "Account or password is expired, reset your password and try again" msgstr "Konto aŭ pasvorto eksvalidiĝis, restarigu vian pasvorton kaj reprovu" -#: plugins/sudoers/auth/pam.c:176 +#: plugins/sudoers/auth/pam.c:206 #, c-format msgid "unable to change expired password: %s" msgstr "ne eblas ŝanĝi eksvalidan pasvorton: %s" -#: plugins/sudoers/auth/pam.c:181 +#: plugins/sudoers/auth/pam.c:211 msgid "Password expired, contact your system administrator" msgstr "Pasvorto eksvalidiĝis, kontaktu vian sistemestron" -#: plugins/sudoers/auth/pam.c:185 +#: plugins/sudoers/auth/pam.c:215 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Konto eksvalidiĝis aŭ PAM-agordon malhavas sekcion \"account\" por sudo, kontaktu vian sistemestron" -#: plugins/sudoers/auth/pam.c:199 +#: plugins/sudoers/auth/pam.c:229 #, c-format msgid "PAM authentication error: %s" msgstr "eraro de aŭtentikiga servilo: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 #, c-format msgid "you do not exist in the %s database" msgstr "vi ne ekzistas en la datumbazo %s" @@ -320,7 +336,7 @@ msgid "SecurID communication failed" msgstr "Komunikiĝo kun SecurID malsukcesis" -#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:213 msgid "unknown SecurID error" msgstr "nekonata SecurID-eraro" @@ -352,7 +368,7 @@ msgid "Unable to initialize authentication methods." msgstr "ne eblas komenci BSD-aŭtentikigajn metodojn." -#: plugins/sudoers/auth/sudo_auth.c:442 +#: plugins/sudoers/auth/sudo_auth.c:441 msgid "Authentication methods:" msgstr "Aŭtentikigaj metodoj:" @@ -385,14 +401,14 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 +#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 #, c-format msgid "unknown uid: %u" msgstr "nekonata uid: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 -#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 -#: plugins/sudoers/testsudoers.c:361 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 +#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 +#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 #, c-format msgid "unknown user: %s" msgstr "nekonata uzanto: %s" @@ -812,61 +828,122 @@ msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Kongrui retgrupoj surbaze de entuta n-opo: uzanto, gastiganto kaj domajno" -#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 -#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 +#: plugins/sudoers/def_data.c:407 +msgid "Allow commands to be run even if sudo cannot write to the audit log" +msgstr "Permesi ke komandoj estu plenumataj eĉ se sudo ne povas skribi al la ekzamena protokolo" + +#: plugins/sudoers/def_data.c:411 +msgid "Allow commands to be run even if sudo cannot write to the I/O log" +msgstr "Permesi ke komandoj estu plenumataj eĉ se sudo ne povas skribi al la eneliga protokolo" + +#: plugins/sudoers/def_data.c:415 +msgid "Allow commands to be run even if sudo cannot write to the log file" +msgstr "Permesi ke komandoj estu plenumataj eĉ se sudo ne povas skribi al la protokola dosiero" + +#: plugins/sudoers/def_data.c:419 +msgid "Resolve groups in sudoers and match on the group ID, not the name" +msgstr "Solvi grupojn en sudoers kaj kongrui al la grupa ID, ne la nomo" + +#: plugins/sudoers/def_data.c:423 +msgid "Log entries larger than this value will be split into multiple syslog messages" +msgstr "Protokolaj enigoj pli grandaj ol tiu ĉi valoro estos dividitaj al multoblaj mesaĝoj syslog" + +#: plugins/sudoers/def_data.c:427 #, c-format -msgid "unknown defaults entry `%s'" -msgstr "nekonata ero '%s' en defaults" +msgid "User that will own the I/O log files: %s" +msgstr "Uzanto kiu posedos la eneligajn protokol-dosierojn: %s" -#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 -#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/def_data.c:431 +#, c-format +msgid "Group that will own the I/O log files: %s" +msgstr "Grupo kiu posedos la eneligajn protokol-dosierojn: %s" + +#: plugins/sudoers/def_data.c:435 +#, c-format +msgid "File mode to use for the I/O log files: 0%o" +msgstr "Dosier-reĝimo uzota por la eneligaj protokol-dosieroj: 0%o" + +#: plugins/sudoers/defaults.c:211 +#, c-format +msgid "%s:%d unknown defaults entry \"%s\"" +msgstr "%s:%d nekonata ero \"%s\" en defaults" + +#: plugins/sudoers/defaults.c:214 +#, c-format +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: nekonata ero \"%s\" en defaults" + +#: plugins/sudoers/defaults.c:237 #, c-format -msgid "value `%s' is invalid for option `%s'" -msgstr "valoro '%s' estas nevalida por parametro '%s'" +msgid "%s:%d no value specified for \"%s\"" +msgstr "%s:%d neniu valoro indikita por \"%s\"" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 -#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 -#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 -#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:240 #, c-format -msgid "no value specified for `%s'" -msgstr "neniu valoro specifita por '%s'" +msgid "%s: no value specified for \"%s\"" +msgstr "%s: neniu valoro indikita por \"%s\"" -#: plugins/sudoers/defaults.c:233 +#: plugins/sudoers/defaults.c:259 #, c-format -msgid "values for `%s' must start with a '/'" -msgstr "Valoroj por '%s' devas komenciĝi per '/'" +msgid "%s:%d values for \"%s\" must start with a '/'" +msgstr "%s:%d valoroj por \"%s\" devas komenciĝi per '/'" -#: plugins/sudoers/defaults.c:301 +#: plugins/sudoers/defaults.c:262 #, c-format -msgid "option `%s' does not take a value" -msgstr "parametro '%s' ne povas havi valoron" +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: valoroj por \"%s\" devas komenciĝi per '/'" + +#: plugins/sudoers/defaults.c:287 +#, c-format +msgid "%s:%d option \"%s\" does not take a value" +msgstr "%s:%d parametro \"%s\" ne povas havi valoron" + +#: plugins/sudoers/defaults.c:290 +#, c-format +msgid "%s: option \"%s\" does not take a value" +msgstr "%s: parametro \"%s\" ne povas havi valoron" + +#: plugins/sudoers/defaults.c:309 +#, c-format +msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d nevalida Defaults-tipo 0x%x por parametro \"%s\"" + +#: plugins/sudoers/defaults.c:312 +#, c-format +msgid "%s: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s: nevalida Defaults-tipo 0x%x por parametro \"%s\"" + +#: plugins/sudoers/defaults.c:322 +#, c-format +msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d valoro \"%s\" estas nevalida por parametro \"%s\"" + +#: plugins/sudoers/defaults.c:325 +#, c-format +msgid "%s: value \"%s\" is invalid for option \"%s\"" +msgstr "%s: valoro \"%s\" estas nevalida por parametro \"%s\"" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 -#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 -#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 -#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 -#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 -#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 +#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 +#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 +#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" -msgstr "interna eraro, superfluo en %s" +msgstr "interna eraro, troo en %s" #: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: medio tro granda" -#: plugins/sudoers/env.c:1083 +#: plugins/sudoers/env.c:1082 msgid "unable to rebuild the environment" msgstr "ne eblas rekonstrui la medion" -#: plugins/sudoers/env.c:1157 +#: plugins/sudoers/env.c:1156 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "bedaŭre vi ne estas permesata valorizi la jenajn medivariablojn: %s" @@ -881,7 +958,7 @@ msgid "%s must only be writable by owner" msgstr "%s devas esti skribebla nur de estro" -#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:398 #, c-format msgid "unable to load %s: %s" msgstr "ne eblas ŝarĝi je %s: %s" @@ -896,95 +973,114 @@ msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: nekongrua grupa kromprogramo: ĉefa eldono %d, atendita %d" -#: plugins/sudoers/interfaces.c:117 +#: plugins/sudoers/interfaces.c:79 plugins/sudoers/interfaces.c:96 +#, c-format +msgid "unable to parse IP address \"%s\"" +msgstr "ne eblas trakti IP-adreson \"%s\"" + +#: plugins/sudoers/interfaces.c:84 plugins/sudoers/interfaces.c:101 +#, c-format +msgid "unable to parse netmask \"%s\"" +msgstr "ne eblas trakti retmaskon \"%s\"" + +#: plugins/sudoers/interfaces.c:129 msgid "Local IP address and netmask pairs:\n" msgstr "Loka IP-adresa kaj retmaska paroj:\n" -#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 -#: plugins/sudoers/timestamp.c:169 +#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s ekzistas sed ne dosierujo (0%o)" -#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 -#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 -#: plugins/sudoers/timestamp.c:184 +#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 #, c-format msgid "unable to mkdir %s" msgstr "ne eblas mkdir-i: %s" -#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 -#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 -#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 -#: plugins/sudoers/visudo_json.c:1025 +#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 +#: plugins/sudoers/testsudoers.c:389 +#, c-format +msgid "unknown group: %s" +msgstr "nekonata grupo: %s" + +#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 +#: plugins/sudoers/visudo_json.c:1024 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi: %s" -#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 -#: plugins/sudoers/sudoreplay.c:1084 +#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "ne eblas legi %s" -#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 -#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 +#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" -#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 +#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 #, c-format msgid "unable to create %s" msgstr "ne eblas krei: %s" -#: plugins/sudoers/iolog.c:723 +#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#, c-format +msgid "unable to write to I/O log file: %s" +msgstr "ne eblas skribi al eneliga protokoldosiero: %s" + +#: plugins/sudoers/iolog.c:927 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: interna eraro, dosiera indekso %d ne estas malferma" -#: plugins/sudoers/ldap.c:428 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: pordo tro granda" -#: plugins/sudoers/ldap.c:488 +#: plugins/sudoers/ldap.c:489 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nekonata retadresa tipo de LDAP: %s" -#: plugins/sudoers/ldap.c:515 +#: plugins/sudoers/ldap.c:516 msgid "unable to mix ldap and ldaps URIs" msgstr "ne eblas miksi sekurajn kaj nesekurajn retadresojn de LDAP" -#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 +#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 msgid "starttls not supported when using ldaps" msgstr "starttls ne estas regata dum uzo de ldaps" -#: plugins/sudoers/ldap.c:626 +#: plugins/sudoers/ldap.c:627 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "ne eblas ekigi SSL-asertilon kaj ŝlosilan datumbazon: %s" -#: plugins/sudoers/ldap.c:629 +#: plugins/sudoers/ldap.c:630 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "TLS_CERT devas havi valoron en %s antaŭ ol SSL uzeblos" -#: plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1239 msgid "unable to get GMT time" msgstr "ne eblas atingi GMT-tempon" -#: plugins/sudoers/ldap.c:1158 +#: plugins/sudoers/ldap.c:1245 msgid "unable to format timestamp" msgstr "ne eblas aranĝi tempo-indikilon" -#: plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1956 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2394 +#: plugins/sudoers/ldap.c:2504 #, c-format msgid "" "\n" @@ -993,7 +1089,7 @@ "\n" "LDAP-rolo: %s\n" -#: plugins/sudoers/ldap.c:2396 +#: plugins/sudoers/ldap.c:2506 #, c-format msgid "" "\n" @@ -1002,30 +1098,30 @@ "\n" "LDAP-rolo: NEKONATA\n" -#: plugins/sudoers/ldap.c:2443 +#: plugins/sudoers/ldap.c:2562 #, c-format msgid " Order: %s\n" msgstr " Ordo: %s\n" -#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 -#: plugins/sudoers/sssd.c:1429 +#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 +#: plugins/sudoers/sssd.c:1626 #, c-format msgid " Commands:\n" msgstr " Komandoj:\n" -#: plugins/sudoers/ldap.c:3015 +#: plugins/sudoers/ldap.c:3130 #, c-format msgid "unable to initialize LDAP: %s" msgstr "ne eblas ekigi LDAP-on: %s" -#: plugins/sudoers/ldap.c:3051 +#: plugins/sudoers/ldap.c:3166 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls specifita sed LDAP-bibliotekoj ne havas la funkciojn ldap_start_tls_s() kaj ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3305 +#: plugins/sudoers/ldap.c:3415 #, c-format msgid "invalid sudoOrder attribute: %s" -msgstr "nevalida atributo de sudoOrdo: %s" +msgstr "nevalida atributo de sudoOrder: %s" #: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" @@ -1043,129 +1139,140 @@ #: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" -msgstr "%8s: (komando ne trovita) %s" +msgstr "%8s : (komando daŭrigis) %s" -#: plugins/sudoers/logging.c:159 +#: plugins/sudoers/logging.c:163 #, c-format -msgid "unable to open log file: %s: %s" -msgstr "ne eblas malfermi protokolon: %s: %s" +msgid "unable to open log file: %s" +msgstr "ne eblas malfermi protokolon: %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:171 #, c-format -msgid "unable to lock log file: %s: %s" -msgstr "ne eblas ŝlosi protokolon: %s: %s" +msgid "unable to lock log file: %s" +msgstr "ne eblas ŝlosi protokolon: %s" -#: plugins/sudoers/logging.c:211 +#: plugins/sudoers/logging.c:204 +#, c-format +msgid "unable to write log file: %s" +msgstr "ne eblas skribi al protokolo: %s" + +#: plugins/sudoers/logging.c:233 msgid "No user or host" msgstr "Neniu uzanto aŭ gastiganto" -#: plugins/sudoers/logging.c:213 +#: plugins/sudoers/logging.c:235 msgid "validation failure" msgstr "validiga malsukceso" -#: plugins/sudoers/logging.c:220 +#: plugins/sudoers/logging.c:242 msgid "user NOT in sudoers" msgstr "uzanto NE estas en sudoers" -#: plugins/sudoers/logging.c:222 +#: plugins/sudoers/logging.c:244 msgid "user NOT authorized on host" msgstr "uzanto NE permesata en gastiganto" -#: plugins/sudoers/logging.c:224 +#: plugins/sudoers/logging.c:246 msgid "command not allowed" msgstr "komando ne permesata" -#: plugins/sudoers/logging.c:259 +#: plugins/sudoers/logging.c:281 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s ne estas en la dosiero sudoers. Ĉi tiu estos raportita.\n" -#: plugins/sudoers/logging.c:262 +#: plugins/sudoers/logging.c:284 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s ne estas permesata plenumigi sudo-on en %s. Ĉi tio estos raportita.\n" -#: plugins/sudoers/logging.c:266 +#: plugins/sudoers/logging.c:288 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Bedaŭre uzanto %s ne rajtas plenumigi sudo-on en %s.\n" -#: plugins/sudoers/logging.c:269 +#: plugins/sudoers/logging.c:291 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Bedaŭre uzanto %s ne rajtas plenumigi '%s%s%s'-on kiel %s%s%s en %s.\n" -#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 -#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 -#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 -#: plugins/sudoers/sudoers.c:1224 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 +#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/sudoers.c:1249 #, c-format msgid "%s: command not found" msgstr "%s: komando ne trovita" -#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 #, c-format msgid "" -"ignoring `%s' found in '.'\n" -"Use `sudo ./%s' if this is the `%s' you wish to run." +"ignoring \"%s\" found in '.'\n" +"Use \"sudo ./%s\" if this is the \"%s\" you wish to run." msgstr "" -"Ignoranta '%s'-on trovita en '.'\n" -"Uzu 'sudo ./%s'-on se tio estas la '%s', kiun vi volas plenumigi." +"ni malatentas \"%s\" trovita en '.'\n" +"Uzu \"sudo ./%s\" se tio estas la \"%s\", kiun vi volas plenumigi." -#: plugins/sudoers/logging.c:325 +#: plugins/sudoers/logging.c:347 msgid "authentication failure" msgstr "aŭtentiga malsukceso" -#: plugins/sudoers/logging.c:351 +#: plugins/sudoers/logging.c:373 msgid "a password is required" msgstr "pasvorto estas bezonata" -#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 +#: plugins/sudoers/logging.c:444 plugins/sudoers/logging.c:510 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u malĝusta pasvorta provo" msgstr[1] "%u malĝustaj pasvortaj provoj" -#: plugins/sudoers/logging.c:572 +#: plugins/sudoers/logging.c:597 msgid "unable to fork" msgstr "ne eblas forki" -#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 +#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:657 #, c-format msgid "unable to fork: %m" msgstr "ne eblas forki: %m" -#: plugins/sudoers/logging.c:630 +#: plugins/sudoers/logging.c:647 #, c-format msgid "unable to open pipe: %m" msgstr "ne eblas malfermi tubon: %m" -#: plugins/sudoers/logging.c:655 +#: plugins/sudoers/logging.c:672 #, c-format msgid "unable to dup stdin: %m" msgstr "ne eblas kopii enigon: %m" -#: plugins/sudoers/logging.c:693 +#: plugins/sudoers/logging.c:710 #, c-format msgid "unable to execute %s: %m" msgstr "ne eblas plenumigi %s-on: %m" -#: plugins/sudoers/match.c:616 +#: plugins/sudoers/match.c:644 #, c-format msgid "unsupported digest type %d for %s" msgstr "nekonata resuma tipo %d por %s" -#: plugins/sudoers/match.c:657 +#: plugins/sudoers/match.c:685 #, c-format msgid "%s: read error" msgstr "%s: lega eraro" -#: plugins/sudoers/match.c:692 +#: plugins/sudoers/match.c:720 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "resumo por %s (%s) ne estas laŭ la formo %s" +#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#, c-format +msgid "unable to stat %s" +msgstr "ne eblas stat-i: %s" + #: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" @@ -1176,7 +1283,7 @@ msgid "parse error in %s" msgstr "analiza eraro en %s" -#: plugins/sudoers/parse.c:502 +#: plugins/sudoers/parse.c:503 #, c-format msgid "" "\n" @@ -1185,41 +1292,41 @@ "\n" "Ero en sudoers:\n" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:504 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:517 +#: plugins/sudoers/parse.c:518 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:526 +#: plugins/sudoers/parse.c:527 #, c-format msgid " Options: " msgstr " Elektoj: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 msgid "unable to parse network address list" msgstr "ne eblas trakti reto-adresan liston" -#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 +#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/policy.c:792 +#: plugins/sudoers/policy.c:823 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Eldono %s de la konduta kromprogramo\n" -#: plugins/sudoers/policy.c:794 +#: plugins/sudoers/policy.c:825 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Eldono %d de la gramatikilo de sudoers\n" -#: plugins/sudoers/policy.c:798 +#: plugins/sudoers/policy.c:829 #, c-format msgid "" "\n" @@ -1228,43 +1335,43 @@ "\n" "Vojo de sudoers: %s\n" -#: plugins/sudoers/policy.c:801 +#: plugins/sudoers/policy.c:832 #, c-format msgid "nsswitch path: %s\n" msgstr "vojo de nsswitch: %s\n" -#: plugins/sudoers/policy.c:803 +#: plugins/sudoers/policy.c:834 #, c-format msgid "ldap.conf path: %s\n" msgstr "vojo de ldap.conf: %s\n" -#: plugins/sudoers/policy.c:804 +#: plugins/sudoers/policy.c:835 #, c-format msgid "ldap.secret path: %s\n" msgstr "vojo de ldap.secret: %s\n" -#: plugins/sudoers/policy.c:837 +#: plugins/sudoers/policy.c:868 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "ne eblas registri hokon el tipo %d (versio %d.%d)" -#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#: plugins/sudoers/pwutil.c:162 plugins/sudoers/pwutil.c:180 #, c-format msgid "unable to cache uid %u, out of memory" msgstr "ne eblas konservi uid-on %u, memoro plenplena" -#: plugins/sudoers/pwutil.c:170 +#: plugins/sudoers/pwutil.c:174 #, c-format msgid "unable to cache uid %u, already exists" msgstr "ne eblas konservi uid-on %u, jam ekzistas" -#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 -#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#: plugins/sudoers/pwutil.c:234 plugins/sudoers/pwutil.c:251 +#: plugins/sudoers/pwutil.c:313 plugins/sudoers/pwutil.c:358 #, c-format msgid "unable to cache user %s, out of memory" msgstr "ne eblas konservi uzanton %s, memoro plenplena" -#: plugins/sudoers/pwutil.c:234 +#: plugins/sudoers/pwutil.c:246 #, c-format msgid "unable to cache user %s, already exists" msgstr "ne eblas konservi uzanton %s, jam ekzistas" @@ -1279,37 +1386,44 @@ msgid "unable to cache gid %u, already exists" msgstr "ne eblas konservi gid-on %u, jam ekzistas" -#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 -#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#: plugins/sudoers/pwutil.c:540 plugins/sudoers/pwutil.c:557 +#: plugins/sudoers/pwutil.c:604 plugins/sudoers/pwutil.c:646 #, c-format msgid "unable to cache group %s, out of memory" msgstr "ne eblas konservi grupon %s, memoro plenplena" -#: plugins/sudoers/pwutil.c:544 +#: plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache group %s, already exists" msgstr "ne eblas konservi grupon %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 +#: plugins/sudoers/pwutil.c:772 plugins/sudoers/pwutil.c:824 +#: plugins/sudoers/pwutil.c:874 plugins/sudoers/pwutil.c:926 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "ne eblas konservi grupan liston por %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#: plugins/sudoers/pwutil.c:778 plugins/sudoers/pwutil.c:829 +#: plugins/sudoers/pwutil.c:880 plugins/sudoers/pwutil.c:931 #, c-format msgid "unable to cache group list for %s, out of memory" msgstr "ne eblas konservi grupan liston por %s, memoro plenplena" -#: plugins/sudoers/pwutil.c:777 +#: plugins/sudoers/pwutil.c:818 #, c-format msgid "unable to parse groups for %s" msgstr "ne eblas trakti grupon en %s" +#: plugins/sudoers/pwutil.c:920 +#, c-format +msgid "unable to parse gids for %s" +msgstr "ne eblas trakti 'gids' por %s" + #: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 #: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 #: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" -msgstr "permeso-staka superfluo" +msgstr "permeso-staka troo" #: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 #: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 @@ -1317,29 +1431,29 @@ #: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 #: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" -msgstr "permeso-staka subfluo" +msgstr "permeso-staka maltroo" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 #: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "ne eblas ŝanĝi al radika gid" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 #: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "ne eblas ŝanĝi al plenumigkiela gid" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 #: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "ne eblas elekti vektoron de plenumigkiela grupo" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 #: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "ne eblas ŝanĝi al plenumigkiela uid" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 #: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "ne eblas ŝanĝi al gid de sudo-redaktantoj" @@ -1368,17 +1482,35 @@ msgid "audit_failure message too long" msgstr "mesaĝo audit_failure (ekzamena fiasko) tro longas" -#: plugins/sudoers/sssd.c:333 +#: plugins/sudoers/sssd.c:400 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "ne eblas ekigi SSS-fonton. Ĉu SSSD estas instalita en via maŝino?" -#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 -#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 -#: plugins/sudoers/sssd.c:377 +#: plugins/sudoers/sssd.c:408 plugins/sudoers/sssd.c:417 +#: plugins/sudoers/sssd.c:426 plugins/sudoers/sssd.c:435 +#: plugins/sudoers/sssd.c:444 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "ne eblas trovi simbolon \"%s\" en %s" +#: plugins/sudoers/sssd.c:1541 +#, c-format +msgid "" +"\n" +"SSSD Role: %s\n" +msgstr "" +"\n" +"SSSD-rolo: %s\n" + +#: plugins/sudoers/sssd.c:1546 +#, c-format +msgid "" +"\n" +"SSSD Role: UNKNOWN\n" +msgstr "" +"\n" +"SSSD-rolo: NEKONATA\n" + #: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" @@ -1399,240 +1531,229 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Uzanto %s ne rajtas plenumigi sudo-on en %s.\n" -#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 +#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 +#: plugins/sudoers/visudo.c:955 msgid "unable to initialize sudoers default values" msgstr "%s: ne eblas ekigi aŭtomatajn valorojn de sudoers" -#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 -#: plugins/sudoers/sudoers.c:833 +#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 msgid "problem with defaults entries" msgstr "problemoj kun aŭtomataj eroj" -#: plugins/sudoers/sudoers.c:205 +#: plugins/sudoers/sudoers.c:203 msgid "no valid sudoers sources found, quitting" msgstr "ne validaj fontotekstoj de sudoers trovita, ĉesiganta" -#: plugins/sudoers/sudoers.c:275 +#: plugins/sudoers/sudoers.c:242 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers specifas, ke ĉefuzanto ne rajtas sudo-i" -#: plugins/sudoers/sudoers.c:332 +#: plugins/sudoers/sudoers.c:299 msgid "you are not permitted to use the -C option" msgstr "vi ne rajtas uzi la parametron -C" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:387 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tempo-indikila posedanto (%s): neniu tia uzanto" -#: plugins/sudoers/sudoers.c:410 +#: plugins/sudoers/sudoers.c:401 msgid "no tty" msgstr "neniu tty" -#: plugins/sudoers/sudoers.c:411 +#: plugins/sudoers/sudoers.c:402 msgid "sorry, you must have a tty to run sudo" msgstr "bedaŭre vi devas havi tty-on por plenumigi sudo-on" -#: plugins/sudoers/sudoers.c:466 +#: plugins/sudoers/sudoers.c:463 msgid "command in current directory" msgstr "komando en nuna dosierujo" -#: plugins/sudoers/sudoers.c:486 +#: plugins/sudoers/sudoers.c:483 msgid "sorry, you are not allowed to preserve the environment" msgstr "bedaŭre vi ne rajtas konservi la medion" -#: plugins/sudoers/sudoers.c:778 +#: plugins/sudoers/sudoers.c:804 msgid "command too long" msgstr "komando tro longas" -#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 -#: plugins/sudoers/visudo.c:667 -#, c-format -msgid "unable to stat %s" -msgstr "ne eblas stat-i: %s" - -#: plugins/sudoers/sudoers.c:890 +#: plugins/sudoers/sudoers.c:916 #, c-format msgid "%s is not a regular file" msgstr "%s ne estas normala dosiero" -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 +#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s estas estrita de uid %u, devas esti %u" -#: plugins/sudoers/sudoers.c:898 toke.l:954 +#: plugins/sudoers/sudoers.c:924 toke.l:957 #, c-format msgid "%s is world writable" msgstr "%s estas skribebla de ĉiuj" -#: plugins/sudoers/sudoers.c:902 toke.l:959 +#: plugins/sudoers/sudoers.c:928 toke.l:960 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s estas estrita de gid %u, devas esti %u" -#: plugins/sudoers/sudoers.c:933 +#: plugins/sudoers/sudoers.c:961 #, c-format -msgid "only root can use `-c %s'" -msgstr "nur ĉefuzanto rajtas uzi '-c %s'" +msgid "only root can use \"-c %s\"" +msgstr "nur ĉefuzanto rajtas uzi \"-c %s\"" -#: plugins/sudoers/sudoers.c:952 +#: plugins/sudoers/sudoers.c:980 #, c-format msgid "unknown login class: %s" msgstr "nekonata ensaluta klaso: %s" -#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 +#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 #, c-format msgid "unable to resolve host %s" msgstr "ne eblas trovi gastiganton %s" -#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 -#, c-format -msgid "unknown group: %s" -msgstr "nekonata grupo: %s" - -#: plugins/sudoers/sudoreplay.c:232 +#: plugins/sudoers/sudoreplay.c:236 #, c-format msgid "invalid filter option: %s" msgstr "nevalida filtrila elekto: %s" -#: plugins/sudoers/sudoreplay.c:245 +#: plugins/sudoers/sudoreplay.c:249 #, c-format msgid "invalid max wait: %s" msgstr "nevalida maksimuma atendo: %s" -#: plugins/sudoers/sudoreplay.c:251 +#: plugins/sudoers/sudoreplay.c:255 #, c-format msgid "invalid speed factor: %s" msgstr "nevalida rapida faktoro: %s" -#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 #, c-format msgid "%s version %s\n" msgstr "%s eldono %s\n" -#: plugins/sudoers/sudoreplay.c:286 +#: plugins/sudoers/sudoreplay.c:290 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:292 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:308 +#: plugins/sudoers/sudoreplay.c:312 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Refaranta sudo-seancon: %s\n" -#: plugins/sudoers/sudoreplay.c:314 +#: plugins/sudoers/sudoreplay.c:318 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Averto: via terminalo estas tro malgranda por konvene reskribi la protokolon.\n" -#: plugins/sudoers/sudoreplay.c:315 +#: plugins/sudoers/sudoreplay.c:319 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Protokola grando estas %dx%d, sed via terminala grando estas %dx%d." -#: plugins/sudoers/sudoreplay.c:368 +#: plugins/sudoers/sudoreplay.c:410 msgid "unable to set tty to raw mode" msgstr "ne eblas elekti tty-on en nudan reĝimon" -#: plugins/sudoers/sudoreplay.c:401 +#: plugins/sudoers/sudoreplay.c:439 #, c-format msgid "invalid timing file line: %s" msgstr "nevalida linio en la tempo-registran dosieron: %s" -#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 +#: plugins/sudoers/sudoreplay.c:659 plugins/sudoers/sudoreplay.c:684 #, c-format msgid "ambiguous expression \"%s\"" msgstr "ambigua esprimo \"%s\"" -#: plugins/sudoers/sudoreplay.c:658 +#: plugins/sudoers/sudoreplay.c:706 msgid "unmatched ')' in expression" msgstr "esprimo kun ')' sen samnivela '('" -#: plugins/sudoers/sudoreplay.c:662 +#: plugins/sudoers/sudoreplay.c:710 #, c-format msgid "unknown search term \"%s\"" msgstr "nekonata serĉaĵo \"%s\"" -#: plugins/sudoers/sudoreplay.c:677 +#: plugins/sudoers/sudoreplay.c:725 #, c-format msgid "%s requires an argument" msgstr "%s bezonas parametron" -#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 +#: plugins/sudoers/sudoreplay.c:728 plugins/sudoers/sudoreplay.c:1108 #, c-format msgid "invalid regular expression: %s" msgstr "nevalida regulesprimo: %s" -#: plugins/sudoers/sudoreplay.c:684 +#: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" msgstr "ne eblis analizi daton \"%s\"" -#: plugins/sudoers/sudoreplay.c:693 +#: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" msgstr "esprimo kun '(' sen samnivela ')'" -#: plugins/sudoers/sudoreplay.c:695 +#: plugins/sudoers/sudoreplay.c:743 msgid "illegal trailing \"or\"" msgstr "nevalida posta \"or\"" -#: plugins/sudoers/sudoreplay.c:697 +#: plugins/sudoers/sudoreplay.c:745 msgid "illegal trailing \"!\"" msgstr "nevalida posta \"!\"" -#: plugins/sudoers/sudoreplay.c:746 +#: plugins/sudoers/sudoreplay.c:794 #, c-format msgid "unknown search type %d" msgstr "nekonata serĉtipo %d" -#: plugins/sudoers/sudoreplay.c:784 +#: plugins/sudoers/sudoreplay.c:832 #, c-format msgid "%s: invalid log file" msgstr "%s: nevalida protokolo-dosiero" -#: plugins/sudoers/sudoreplay.c:802 +#: plugins/sudoers/sudoreplay.c:850 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: mankas temp-indikila kampo" -#: plugins/sudoers/sudoreplay.c:809 +#: plugins/sudoers/sudoreplay.c:857 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: temp-indikilo %s: %s" -#: plugins/sudoers/sudoreplay.c:816 +#: plugins/sudoers/sudoreplay.c:864 #, c-format msgid "%s: user field is missing" msgstr "%s: mankas kampo de uzanto" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:873 #, c-format msgid "%s: runas user field is missing" msgstr "%s: mankas kampo de runa uzanto" -#: plugins/sudoers/sudoreplay.c:834 +#: plugins/sudoers/sudoreplay.c:882 #, c-format msgid "%s: runas group field is missing" msgstr "%s: mankas kampo de runa grupo" -#: plugins/sudoers/sudoreplay.c:1197 +#: plugins/sudoers/sudoreplay.c:1245 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "uzado: %s [-h] [-d dosierujo] [-m nombro] [-s nombro] identigilo\n" -#: plugins/sudoers/sudoreplay.c:1200 +#: plugins/sudoers/sudoreplay.c:1248 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uzado: %s [-h] [-d dosierujo] -l [serĉaĵo]\n" -#: plugins/sudoers/sudoreplay.c:1209 +#: plugins/sudoers/sudoreplay.c:1257 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1641,7 +1762,7 @@ "%s - refari sudo-seancajn protokolojn\n" "\n" -#: plugins/sudoers/sudoreplay.c:1211 +#: plugins/sudoers/sudoreplay.c:1259 msgid "" "\n" "Options:\n" @@ -1663,11 +1784,11 @@ " -s, --speed=nombro rapidigi aŭ malrapidigi eligon\n" " -V, --version eligi eldonan informon kaj eliri" -#: plugins/sudoers/testsudoers.c:324 +#: plugins/sudoers/testsudoers.c:328 msgid "\thost unmatched" msgstr "\thost sen egalo" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:331 msgid "" "\n" "Command allowed" @@ -1675,7 +1796,7 @@ "\n" "Komando permesata" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command denied" @@ -1683,7 +1804,7 @@ "\n" "Komando rifuzata" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command unmatched" @@ -1691,129 +1812,129 @@ "\n" "Komando sen egalo" -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/timestamp.c:217 #, c-format msgid "%s is group writable" msgstr "%s estas skribebla de la grupo" -#: plugins/sudoers/timestamp.c:309 +#: plugins/sudoers/timestamp.c:293 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "ne eblas mallongigi tempo-indikilan dosieron ĝis %lld bajtoj" -#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 -#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 +#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 msgid "unable to read the clock" msgstr "ne eblas legi la horloĝon" -#: plugins/sudoers/timestamp.c:756 +#: plugins/sudoers/timestamp.c:752 msgid "ignoring time stamp from the future" msgstr "ignoranta tempo-indikilon el la estonteco" -#: plugins/sudoers/timestamp.c:768 +#: plugins/sudoers/timestamp.c:764 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tempo-indikilo tro estonte: %20.20s" -#: plugins/sudoers/timestamp.c:863 +#: plugins/sudoers/timestamp.c:859 #, c-format msgid "unable to lock time stamp file %s" msgstr "ne eblas ŝlosi tempo-indikilan dosieron %s" -#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 +#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 #, c-format msgid "lecture status path too long: %s/%s" msgstr "vojo de prelega stato tro longas: %s/%s" -#: plugins/sudoers/visudo.c:182 +#: plugins/sudoers/visudo.c:187 #, c-format msgid "%s grammar version %d\n" msgstr "%s gramatika eldono %d\n" -#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 #, c-format msgid "press return to edit %s: " msgstr "premu enen-klavon por redakti %s-on: " -#: plugins/sudoers/visudo.c:320 +#: plugins/sudoers/visudo.c:331 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "specifita tekstoredaktilo (%s) ne ekzistas" -#: plugins/sudoers/visudo.c:338 +#: plugins/sudoers/visudo.c:349 #, c-format msgid "no editor found (editor path = %s)" msgstr "neniu tekstoredaktilo trovita (vojo = %s)" -#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 +#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 msgid "write error" msgstr "skriba eraro" -#: plugins/sudoers/visudo.c:501 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "ne eblas stat-i provizoran dosieron (%s), %s neŝanĝita" -#: plugins/sudoers/visudo.c:508 +#: plugins/sudoers/visudo.c:520 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "nul-longa provizora dosiero (%s), %s neŝanĝita" -#: plugins/sudoers/visudo.c:514 +#: plugins/sudoers/visudo.c:526 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redaktilo (%s) malsukcesis, %s neŝanĝita" -#: plugins/sudoers/visudo.c:536 +#: plugins/sudoers/visudo.c:548 #, c-format msgid "%s unchanged" msgstr "%s neŝanĝita" -#: plugins/sudoers/visudo.c:562 +#: plugins/sudoers/visudo.c:607 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "ne eblas remalfermi provizoran dosieron (%s), %s neŝanĝita." -#: plugins/sudoers/visudo.c:573 +#: plugins/sudoers/visudo.c:619 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "ne eblas analizi provizoran dosieron (%s), nekonata eraro" -#: plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:656 #, c-format msgid "internal error, unable to find %s in list!" msgstr "interna eraro, ne eblas trovi '%s'-on en listo!" -#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 +#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "ne eblas ŝanĝi (uid, gid) de %s al (%u, %u)" -#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 +#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "ne eblas ŝanĝi reĝimon de %s al 0%o" -#: plugins/sudoers/visudo.c:700 +#: plugins/sudoers/visudo.c:748 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s kaj %s ne estas la sama dosiersistemo, uzanta mv-on por alinomi" -#: plugins/sudoers/visudo.c:714 +#: plugins/sudoers/visudo.c:762 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komando malsukcesis: '%s %s %s', %s neŝanĝita" -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:772 #, c-format msgid "error renaming %s, %s unchanged" msgstr "eraro dum alinomi %s-on; %s neŝanĝita" -#: plugins/sudoers/visudo.c:786 +#: plugins/sudoers/visudo.c:834 msgid "What now? " msgstr "Kion nun? " -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:848 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1825,72 +1946,62 @@ " x) eliri sen konservi ŝanĝojn al sudoers-dosiero\n" " q) Eliri kaj konservi ŝanĝojn al sudoers-dosiero (DANĜERA!)\n" -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:894 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/visudo.c:878 +#: plugins/sudoers/visudo.c:924 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: malĝusta estro (uid, gid) devas esti (%u, %u)\n" -#: plugins/sudoers/visudo.c:885 +#: plugins/sudoers/visudo.c:931 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: misaj permesoj, devas esti reĝimo 0%o\n" -#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 +#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 #, c-format msgid "failed to parse %s file, unknown error" msgstr "malsukcesis analizi dosieron %s, nekonata eraro" -#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 +#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 #, c-format msgid "parse error in %s near line %d\n" msgstr "analiza eraro en %s proksime al linio %d\n" -#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 #, c-format msgid "parse error in %s\n" msgstr "analiza eraro en %s\n" -#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 +#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analizita senerare\n" -#: plugins/sudoers/visudo.c:991 +#: plugins/sudoers/visudo.c:1041 #, c-format msgid "%s busy, try again later" msgstr "%s okupata, reprovu pli malfrue" -#: plugins/sudoers/visudo.c:1087 -#, c-format -msgid "Error: cycle in %s `%s'" -msgstr "Eraro: ciklo en %s '%s'" - -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1137 #, c-format -msgid "Warning: cycle in %s `%s'" -msgstr "Averto: ciklo en %s '%s'" +msgid "%s:%d cycle in %s \"%s\"" +msgstr "%s:%d ciklo en %s \"%s\"" -#: plugins/sudoers/visudo.c:1092 +#: plugins/sudoers/visudo.c:1140 #, c-format -msgid "Error: %s `%s' referenced but not defined" -msgstr "Eraro: %s '%s' estas referencita sed ne difinita" +msgid "%s:%d %s \"%s\" referenced but not defined" +msgstr "%s:%d %s \"%s\" estas referencita sed ne difinita" -#: plugins/sudoers/visudo.c:1093 +#: plugins/sudoers/visudo.c:1292 #, c-format -msgid "Warning: %s `%s' referenced but not defined" -msgstr "Averto: %s '%s' estas referencita sed ne difinita" +msgid "%s:%d unused %s \"%s\"" +msgstr "%s:%d neuzata %s \"%s\"" -#: plugins/sudoers/visudo.c:1236 -#, c-format -msgid "Warning: unused %s `%s'" -msgstr "Averto: neuzata %s '%s'" - -#: plugins/sudoers/visudo.c:1349 +#: plugins/sudoers/visudo.c:1403 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1899,7 +2010,7 @@ "%s - sekure redakti la dosieron sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1351 +#: plugins/sudoers/visudo.c:1405 msgid "" "\n" "Options:\n" @@ -1921,15 +2032,29 @@ " -V, --version montri eldonon kaj eliri\n" " -x, --export=eligdosiero skribi sudoers laŭ JSON-formo al eligdosiero" -#: plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#, c-format +msgid "unknown defaults entry \"%s\"" +msgstr "nekonata ero \"%s\" en defaults" + +#: plugins/sudoers/visudo_json.c:1017 #, c-format msgid "%s: input and output files must be different" msgstr "%s: eliga kaj eniga dosieroj devas esti malsamaj" -#: toke.l:918 +#: toke.l:926 msgid "too many levels of includes" msgstr "tro da niveloj de inkluzivaĵoj" +#~ msgid "Warning: cycle in %s `%s'" +#~ msgstr "Averto: ciklo en %s '%s'" + +#~ msgid "Warning: %s `%s' referenced but not defined" +#~ msgstr "Averto: %s '%s' estas referencita sed ne difinita" + +#~ msgid "Warning: unused %s `%s'" +#~ msgstr "Averto: neuzata %s '%s'" + #~ msgid "timestamp path too long: %s/%s" #~ msgstr "tempo-indikila vojo tro longas: %s/%s" @@ -1951,9 +2076,6 @@ #~ msgid "fill_args: buffer overflow" #~ msgstr "fill_args: bufra superfluo" -#~ msgid "%s: unused %s_Alias %s" -#~ msgstr "%s neuzata %s_Alias %s" - #~ msgid "%s owned by uid %u, should be uid %u" #~ msgstr "%s estas estrita de uid %u, devas esti uid %u" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/hr.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/hr.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/hr.po sudo-1.8.20p2/plugins/sudoers/po/hr.po --- sudo-1.8.19p1/plugins/sudoers/po/hr.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/hr.po 2017-05-10 15:38:43.000000000 +0000 @@ -9,10 +9,10 @@ # Božidar Putanec , 2016. msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.19b1\n" +"Project-Id-Version: sudoers-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 11:48-0800\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 20:52-0700\n" "Last-Translator: Božidar Putanec \n" "Language-Team: Croatian \n" "Language: hr\n" @@ -21,8 +21,11 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: ../../Downloads/sudo-1.8.20b1\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPath-1: plugins/sudoers\n" #: confstr.sh:1 msgid "syntax error" @@ -48,44 +51,47 @@ msgid "Sorry, try again." msgstr "Žao mi je, pokušajte ponovo." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:617 -#: plugins/sudoers/defaults.c:872 plugins/sudoers/defaults.c:1021 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3547 plugins/sudoers/ldap.c:3563 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:184 -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:467 -#: plugins/sudoers/logging.c:679 plugins/sudoers/logging.c:937 -#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:535 -#: plugins/sudoers/match.c:572 plugins/sudoers/match.c:770 -#: plugins/sudoers/match.c:828 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 @@ -94,102 +100,123 @@ #: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 #: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 #: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 -#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sssd.c:1234 plugins/sudoers/sssd.c:1248 -#: plugins/sudoers/sssd.c:1264 plugins/sudoers/sudoers.c:261 -#: plugins/sudoers/sudoers.c:271 plugins/sudoers/sudoers.c:279 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:658 -#: plugins/sudoers/sudoers.c:773 plugins/sudoers/sudoers.c:817 -#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:216 plugins/sudoers/testsudoers.c:233 -#: plugins/sudoers/timestamp.c:374 plugins/sudoers/timestamp.c:410 -#: plugins/sudoers/timestamp.c:826 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 #: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:309 -#: plugins/sudoers/visudo.c:315 plugins/sudoers/visudo.c:446 -#: plugins/sudoers/visudo.c:624 plugins/sudoers/visudo.c:964 -#: plugins/sudoers/visudo.c:1030 plugins/sudoers/visudo.c:1074 -#: plugins/sudoers/visudo.c:1171 plugins/sudoers/visudo_json.c:1035 toke.l:832 -#: toke.l:932 toke.l:1090 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "ne mogu alocirati memoriju" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "kontrolni zbroj zahtijeva ime putanje" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "neispravna vrijednost za „notbefore“" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "neispravna vrijednost za „notafter“" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "vrijednost za tajmaut je prevelika" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "neispravna vrijednost za tajmaut" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:617 plugins/sudoers/defaults.c:872 -#: plugins/sudoers/defaults.c:1021 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3546 -#: plugins/sudoers/ldap.c:3562 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 -#: plugins/sudoers/logging.c:184 plugins/sudoers/logging.c:446 -#: plugins/sudoers/logging.c:467 plugins/sudoers/logging.c:937 -#: plugins/sudoers/match.c:500 plugins/sudoers/match.c:534 -#: plugins/sudoers/match.c:572 plugins/sudoers/match.c:770 -#: plugins/sudoers/match.c:827 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:97 -#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 -#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 -#: plugins/sudoers/policy.c:278 plugins/sudoers/policy.c:287 -#: plugins/sudoers/policy.c:326 plugins/sudoers/policy.c:336 -#: plugins/sudoers/policy.c:345 plugins/sudoers/policy.c:354 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/set_perms.c:356 -#: plugins/sudoers/set_perms.c:695 plugins/sudoers/set_perms.c:1054 -#: plugins/sudoers/set_perms.c:1350 plugins/sudoers/set_perms.c:1514 -#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 -#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 -#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 -#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1248 -#: plugins/sudoers/sssd.c:1264 plugins/sudoers/sudoers.c:261 -#: plugins/sudoers/sudoers.c:271 plugins/sudoers/sudoers.c:279 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:658 -#: plugins/sudoers/sudoers.c:773 plugins/sudoers/sudoers.c:817 -#: plugins/sudoers/sudoers_debug.c:106 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:216 plugins/sudoers/testsudoers.c:233 -#: plugins/sudoers/timestamp.c:374 plugins/sudoers/timestamp.c:410 -#: plugins/sudoers/timestamp.c:826 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:309 -#: plugins/sudoers/visudo.c:315 plugins/sudoers/visudo.c:446 -#: plugins/sudoers/visudo.c:624 plugins/sudoers/visudo.c:964 -#: plugins/sudoers/visudo.c:1030 plugins/sudoers/visudo.c:1074 -#: plugins/sudoers/visudo.c:1171 plugins/sudoers/visudo_json.c:1035 toke.l:832 -#: toke.l:932 toke.l:1090 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -241,7 +268,7 @@ #: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" -msgstr "%s: ne mogu pretvoriti principala u niz („%s“): %s" +msgstr "%s: ne mogu pretvoriti principala u string („%s“): %s" #: plugins/sudoers/auth/kerb5.c:161 #, c-format @@ -251,7 +278,7 @@ #: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" -msgstr "%s: ne mogu razlučiti spremnik vjerodajnica: %s" +msgstr "%s: ne mogu razlučiti međupohranu vjerodajnica: %s" #: plugins/sudoers/auth/kerb5.c:217 #, c-format @@ -285,7 +312,7 @@ #: plugins/sudoers/auth/pam.c:108 msgid "unable to initialize PAM" -msgstr "ne mogu inicijalizirati PAM" +msgstr "ne mogu inicirati PAM" #: plugins/sudoers/auth/pam.c:194 msgid "account validation failure, is your account locked?" @@ -313,14 +340,14 @@ msgid "PAM authentication error: %s" msgstr "PAM greška autorizacije: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "niste navedeni u %s bazi podataka" #: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" -msgstr "nisam uspio inicijalizirati ACE API biblioteku" +msgstr "nisam uspio inicirati ACE API biblioteku" #: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" @@ -352,7 +379,7 @@ #: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" -msgstr "ne mogu inicijalizirati SIA sjednicu" +msgstr "ne mogu inicirati SIA sesiju" #: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" @@ -407,536 +434,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:694 plugins/sudoers/sudoers.c:736 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "nepoznat uid: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1125 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "nepoznat korisnik: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Syslog jedinica ako se koristi syslog za zapisivanje dnevnika: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Syslog prioritet koji se koristi pri uspješnoj provjeri korisnika: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Syslog prioritet koji se koristi pri neuspješnoj provjeri korisnika: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Postavi OTP upit u vlastiti redak" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Zanemari „.“ u $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Uvijek pošalji poštu kad se pokrene sudo" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Pošalji poštu ako provjera korisnika nije uspjela" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Pošalji poštu ako korisnik nije u sudoers" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Pošalji poštu ako korisnik nije u sudoers na ovom računalu" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" -msgstr "Pošalji poštu ako korisnik nema dozvolu za pokretanje naredbe" +msgstr "Pošalji poštu ako korisnik nema dopuštenje za pokretanje naredbe" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Pošalji poštu ako korisnik pokušava unositi naredbe" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Koristi posebnu vremensku oznaku za svaku kombinaciju korisnik/terminal" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Održi lekciju korisniku kad prvi put pokrene sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Datoteka koja sadrži sudo lekciju: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Uobičajeno traži provjeru korisnika" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Root može pokrenuti sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Zapiši ime računala u (ne-syslog) dnevničku datoteku" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Zapiši godinu u (ne-syslog) dnevničku datoteku" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Ako se sudo pozove bez argumenata, pokreni ljusku" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Postavi $HOME na početni direktorij odredišnog korisnika pri pokretanju ljuske sa -s" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Uvijek postavi $HOME na početni direktorij odredišnog korisnika" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" -msgstr "Dozvoli prikupljanje nekih informacija za ispis korisnih poruka grešaka" +msgstr "Dopusti prikupljanje nekih informacija za ispis korisnih poruka grešaka" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Traži potpuno kvalificirana imena računala u datoteci sudoers" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Uvrijedi korisnika kad upiše netočnu lozinku" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" -msgstr "Dozvoli korisniku pokretanje sudo samo ako ima tty" +msgstr "Dopusti korisniku pokretanje sudo samo ako ima tty" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo će poštivati varijablu okoline EDITOR" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Zatraži lozinku administratora umjesto korisnika" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Zatraži lozinku runas_default korisnika umjesto trenutnog" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Zatraži lozinku odredišnog korisnika umjesto trenutnog" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Primijeni zadane postavke u razredu prijave odredišnog korisnika ako postoje" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Postavi varijable okoline LOGNAME i USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Postavi samo efektivni uid na onaj odredišnog korisnika umjesto stvarnog uid-a" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Ne inicijaliziraj grupni vektor u onaj odredišnog korisnika" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Duljina prelamanja redaka dnevničke datoteke (0 isključuje): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Istek vremenske oznake provjere: %.1f minuta" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Istek traženja lozinke: %.1f minuta" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Broj pokušaja unosa lozinke: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask za korištenje ili 0777 za korisničku: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Putanja do dnevničke datoteke: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Putanja do programa pošte: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Zastavice za program pošte: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Adresa na koju se šalje pošta: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Adresa s koje se šalje pošta: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Predmet poruka pošte: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Neispravna poruka lozinke: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Putanja do direktorija objašnjenja: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Putanja do direktorija vremenske oznake provjere: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Vlasnik direktorija vremenske oznake provjere: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Korisnici u ovoj grupi su izuzeti od traženja lozinke i PATH zahtjeva: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Uobičajeno traženje lozinke: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Ako je postavljen, passprompt će zaobići sustavski u svim slučajevima." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Zadani korisnik za pokretanje naredbi: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Vrijednost za zaobilaženje korisničke $PATH: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Putanja do uređivača koji će koristiti visudo: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kada tražiti lozinku za pseudonaredbu „list“: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kada tražiti lozinku za pseudonaredbu „verify“: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Prethodno učitaj prividne izvršne funkcije sadržane u biblioteci sudo_noexec" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Ako je LDAP direktorij aktivan, zanemaruje li se lokalna datoteka sudoers" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Opisnici datoteka >= %d će se zatvoriti prije izvršavanja naredbe" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Ako je postavljen, korisnici mogu zaobići vrijednost „closeform“ opcijom -C" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" -msgstr "Dozvoli korisnicima postavljanje proizvoljnih varijabli okoline" +msgstr "Dopusti korisnicima postavljanje proizvoljnih varijabli okoline" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Vrati okolinu u početni zadani skup varijabli" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Varijable okoline čija će se ispravnost provjeriti:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Varijable okoline za uklanjanje:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Varijable okoline za očuvanje:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux uloga za korištenje u novom sigurnosnom kontekstu: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux vrsta za korištenje u novom sigurnosnom kontekstu: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Putanja do datoteke okoline karakteristične za sudo: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Putanja do ograničene datoteke s okružjem specifično za sudo: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Lokal za korištenje pri obradi sudoers: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" -msgstr "Dozvoli da sudo traži lozinku čak i ako će biti vidljiva" +msgstr "Dopusti da sudo traži lozinku čak i ako će biti vidljiva" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Prikaži vizualne povratne informacije pri traženju lozinke kad postoji korisnički unos" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Koristi bržu usporedbu uzoraka koja je nepreciznija, ali ne pristupa datotečnom sustavu" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" -msgstr "Umask naveden u sudoers će zaobići korisnički, čak i ako dozvoljava više" +msgstr "Umask naveden u sudoers će zaobići korisnički, čak i ako dopušta više" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Zapiši korisnički unos za pokrenute naredbe" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Zapiši izlaz pokrenute naredbe" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Komprimiraj U/I zapise korištenjem zlib" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Uvijek pokreni naredbe u pseudoterminalu" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Priključak za podršku za ne-Unix grupe: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Direktorij za spremanje ulazno/izlaznih dnevnika: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Datoteka za spremanje ulazno/izlaznog dnevnika: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Dodaj stavku u utmp/utmpx datoteku pri alokaciji pseudoterminala" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Postavi korisnika u utmp u „pokreni kao“ korisnika umjesto pozivatelja" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" -msgstr "Skup dozvoljenih ovlasti" +msgstr "Skup dopuštenih ovlasti" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Skup ograničenih ovlasti" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Pokreni naredbe na pseudoterminalu u pozadini" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Naziv PAM usluge za upotrebu" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Naziv PAM usluge za upotrebu za prijavnu ljusku" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Pokušaj uspostavljanja PAM vjerodajnica za ciljanog korisnika" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" -msgstr "Napravi novu PAM sjednicu u kojoj će se pokrenuti naredba" +msgstr "Napravi novu PAM sesiju u kojoj će se pokrenuti naredba" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Najveći redni broj U/I dnevnika: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Omogućena sudoers netgroup podrška" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Za uređivanje sa sudoedit, provjeri mogućnost pisanja u nadređenim direktorijima" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Slijedi simboličke veze prilikom uređivanja datoteka sa sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Propitaj priključak grupe za nepoznate grupe sustava" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Podudaranje netgroup-a se bazira na kompletnoj n-torki: korisnik, računalo, domena" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Dopusti izvršenje naredbe iako je sudo ne može upisati u revizijski dnevnik" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Dopusti izvršenje naredbe iako je sudo ne može upisati u U/I dnevnik" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Dopusti izvršenje naredbe iako je sudo ne može upisati u dnevnik" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Sudoers grupe razluči, i spari po ID grupe, ne po imenu" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Dnevnički unosi veći od ove vrijednosti biti će podijeljeni u više syslog poruka" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Dnevnički upisi veći od ove vrijednosti biti će podijeljeni u više syslog poruka: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Korisnik koji će posjedovati U/I dnevnik: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupa koja će posjedovati U/I dnevnik: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Vrsta datoteke za uporabu za U/I dnevnike: 0%o" -#: plugins/sudoers/defaults.c:210 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Naredbe izvrši s pomoću opisivača datoteke, umjesto putanje: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignoriraj nepoznate zadane (default) podatke za sudoers , umjesto ispisivanja upozorenja" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Trajanje u sekundama nakon što je naredba prekinuta: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Dopusti da korisnik specificira tajmaut na komandnoj liniji" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Piši U/I dnevnik direktno na disk, umjesto kroz međupohranu (buffer)" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d nepoznata stavka zadanih vrijednosti „%s“" -#: plugins/sudoers/defaults.c:213 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: nepoznata stavka zadanih vrijednosti „%s“" -#: plugins/sudoers/defaults.c:236 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d nije navedena vrijednost za „%s“" -#: plugins/sudoers/defaults.c:239 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nije navedena vrijednost za „%s“" -#: plugins/sudoers/defaults.c:258 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d vrijednost za „%s“ mora početi s „/“" -#: plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: vrijednost za „%s“ mora početi s „/“" -#: plugins/sudoers/defaults.c:286 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d opcija „%s“ ne prihvaća vrijednost" -#: plugins/sudoers/defaults.c:289 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: opcija „%s“ ne prihvaća vrijednost" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d neispravna zadana vrsta 0x%x za opciju „%s“" -#: plugins/sudoers/defaults.c:311 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: neispravna zadana vrsta 0x%x za opciju „%s“" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d vrijednost „%s“ nije ispravna za opciju „%s“" -#: plugins/sudoers/defaults.c:324 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: vrijednost „%s“ nije ispravna za opciju „%s“" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 -#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:942 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:839 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "interna greška, %s preljev" @@ -945,14 +1000,26 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: oštećen envp, duljina ne odgovara" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "ne mogu obnoviti okolinu" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" -msgstr "žao mi je, nemate dozvolu za postavljanje sljedećih varijabli okoline: %s" +msgstr "žao mi je, nemate dopuštenje za postavljanje sljedećih varijabli okoline: %s" + +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "nepodržana vrsta kontrolnog zbroja %d za %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: greška čitanja" #: plugins/sudoers/group_plugin.c:86 #, c-format @@ -962,7 +1029,7 @@ #: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" -msgstr "samo vlasnik smije imati dozvole za pisanje %s" +msgstr "samo vlasnik smije imati dopuštenje za pisanje %s" #: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:398 #, c-format @@ -979,86 +1046,102 @@ msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: nekompatibilna glavna inačica grupnog priključka %d, očekujem %d" -#: plugins/sudoers/interfaces.c:117 +#: plugins/sudoers/interfaces.c:79 plugins/sudoers/interfaces.c:96 +#, c-format +msgid "unable to parse IP address \"%s\"" +msgstr "ne mogu raščlaniti IP adresu „%s“" + +#: plugins/sudoers/interfaces.c:84 plugins/sudoers/interfaces.c:101 +#, c-format +msgid "unable to parse netmask \"%s\"" +msgstr "ne mogu raščlaniti netmask „%s“" + +#: plugins/sudoers/interfaces.c:129 msgid "Local IP address and netmask pairs:\n" msgstr "Parovi lokalnih IP adresa i mrežnih maski:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s postoji, ali nije direktorij (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "ne mogu napraviti direktorij %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1156 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "ne mogu promijeniti mod od %s u 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "nepoznata grupa: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:895 -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:813 -#: plugins/sudoers/sudoreplay.c:1017 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 +#: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "ne mogu otvoriti %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:899 -#: plugins/sudoers/sudoreplay.c:1128 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 +#: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "ne mogu čitati %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:594 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "ne mogu pisati u %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "ne mogu napraviti %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "ne mogu pisati u U/I dnevnik: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: interna greška, indeks datoteka %d nije otvoren" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port je prevelik" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nepodržana vrsta LDAP uri-ja: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "ne mogu miješati ldap i ldaps URI-je" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "starttls nije podržan ako se koristi ldaps" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" -msgstr "ne mogu inicijalizirati SSL certifikat i bazu podataka ključeva: %s" +msgstr "ne mogu inicirati SSL certifikat i bazu podataka ključeva: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "morate postaviti TLS_CERT u %s za korištenje SSL-a" @@ -1076,7 +1159,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1085,7 +1168,7 @@ "\n" "LDAP uloga: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1094,27 +1177,27 @@ "\n" "LDAP uloga: NEPOZNATA\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Redoslijed: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Naredbe:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" -msgstr "ne mogu inicijalizirati LDAP: %s" +msgstr "ne mogu inicirati LDAP: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "naveden je start_tls, ali LDAP biblioteke ne podržavaju ldap_start_tls_s() ili ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "neispravno sudoOrder svojstvo: %s" @@ -1127,80 +1210,80 @@ msgid "unable to send audit message" msgstr "ne mogu poslati poruku revizije" -#: plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:130 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (naredba nastavljena) %s" -#: plugins/sudoers/logging.c:159 +#: plugins/sudoers/logging.c:163 #, c-format msgid "unable to open log file: %s" msgstr "ne mogu otvoriti dnevičku datoteku: %s" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:171 #, c-format msgid "unable to lock log file: %s" msgstr "ne mogu zaključati dnevničku datoteku: %s" -#: plugins/sudoers/logging.c:200 +#: plugins/sudoers/logging.c:204 #, c-format msgid "unable to write log file: %s" msgstr "ne mogu pisati u dnevničku datoteku: %s" -#: plugins/sudoers/logging.c:229 +#: plugins/sudoers/logging.c:233 msgid "No user or host" msgstr "Nema korisnika ili računala" -#: plugins/sudoers/logging.c:231 +#: plugins/sudoers/logging.c:235 msgid "validation failure" msgstr "provjera nije uspjela" -#: plugins/sudoers/logging.c:238 +#: plugins/sudoers/logging.c:242 msgid "user NOT in sudoers" msgstr "korisnik NIJE u sudoers" -#: plugins/sudoers/logging.c:240 +#: plugins/sudoers/logging.c:244 msgid "user NOT authorized on host" msgstr "korisnik NIJE ovlašten na računalu" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:246 msgid "command not allowed" -msgstr "naredba nije dozvoljena" +msgstr "naredba nije dopuštena" -#: plugins/sudoers/logging.c:277 +#: plugins/sudoers/logging.c:281 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s nije u datoteci sudoers. Ovaj će incident biti prijavljen.\n" -#: plugins/sudoers/logging.c:280 +#: plugins/sudoers/logging.c:284 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" -msgstr "Korisniku %s nije dozvoljeno pokrenuti sudo na %s. Ovaj će incident biti prijavljen.\n" +msgstr "Korisniku %s nije dopušteno pokrenuti sudo na %s. Ovaj će incident biti prijavljen.\n" -#: plugins/sudoers/logging.c:284 +#: plugins/sudoers/logging.c:288 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Žao mi je, korisnik %s ne može pokrenuti sudo na %s.\n" -#: plugins/sudoers/logging.c:287 +#: plugins/sudoers/logging.c:291 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" -msgstr "Žao mi je, korisniku %s nije dozvoljeno izvršiti „%s%s%s“ kao %s%s%s na %s.\n" +msgstr "Žao mi je, korisniku %s nije dopušteno izvršiti „%s%s%s“ kao %s%s%s na %s.\n" -#: plugins/sudoers/logging.c:324 plugins/sudoers/sudoers.c:466 -#: plugins/sudoers/sudoers.c:468 plugins/sudoers/sudoers.c:470 -#: plugins/sudoers/sudoers.c:472 plugins/sudoers/sudoers.c:1245 -#: plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: naredba nije pronađena" -#: plugins/sudoers/logging.c:326 plugins/sudoers/sudoers.c:462 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1209,15 +1292,15 @@ "zanemarujem „%s“ pronađen u „.“\n" "Koristite „sudo ./%s“ ako je ovo „%s“ koji želite pokrenuti." -#: plugins/sudoers/logging.c:343 +#: plugins/sudoers/logging.c:347 msgid "authentication failure" msgstr "provjera nije uspjela" -#: plugins/sudoers/logging.c:369 +#: plugins/sudoers/logging.c:373 msgid "a password is required" msgstr "potrebna je lozinka" -#: plugins/sudoers/logging.c:440 plugins/sudoers/logging.c:506 +#: plugins/sudoers/logging.c:444 plugins/sudoers/logging.c:510 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -1225,62 +1308,52 @@ msgstr[1] "%u netočna pokušaja unosa lozinke" msgstr[2] "%u netočnih pokušaja unosa lozinke" -#: plugins/sudoers/logging.c:593 +#: plugins/sudoers/logging.c:597 msgid "unable to fork" msgstr "ne mogu razdvojiti" -#: plugins/sudoers/logging.c:601 plugins/sudoers/logging.c:653 +#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:657 #, c-format msgid "unable to fork: %m" msgstr "ne mogu razdvojiti: %m" -#: plugins/sudoers/logging.c:643 +#: plugins/sudoers/logging.c:647 #, c-format msgid "unable to open pipe: %m" msgstr "ne mogu otvoriti cjevovod: %m" -#: plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:672 #, c-format msgid "unable to dup stdin: %m" msgstr "ne mogu izvršiti dup stdin: %m" -#: plugins/sudoers/logging.c:706 +#: plugins/sudoers/logging.c:710 #, c-format msgid "unable to execute %s: %m" msgstr "ne mogu izvršiti %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "nepodržana vrsta kontrolnog zbroja %d za %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: greška čitanja" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "kontrolni zbroj za %s (%s) nije u %s obliku" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:910 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "ne mogu izvršiti stat %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "greška analize u %s kod retka %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "greška analize u %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1289,41 +1362,41 @@ "\n" "Sudoers stavka:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " PokreniKaoKorisnici: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " PokreniKaoGrupe: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Opcije:" -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "ne mogu raščlaniti listu mrežnih adresa" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "ne mogu izvršiti %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Inačica sudoers priključka police %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Inačica sudoers gramatike datoteke %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1332,23 +1405,23 @@ "\n" "Sudoers putanja: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch putanja: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf putanja: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret putanja: %s\n" # hook: A location in a routine or program in which the programmer can connect or insert other routines for the purpose of debugging or enhancing functionality. -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "ne mogu registrirati kuku (hook) vrste %d (inačica %d.%d)" @@ -1417,48 +1490,48 @@ msgid "unable to parse gids for %s" msgstr "ne mogu obraditi grupne identitete (gids) za %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "preljev trajnog stoga" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "podljev trajnog stoga" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "ne mogu promijeniti u administratorski gid" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "ne mogu promijeniti u „pokreni kao“ gid" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "ne mogu postaviti „pokreni kao“ grupni vektor" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "ne mogu promijeniti u „pokreni kao“ uid" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "ne mogu promijeniti u sudoers gid" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "previše procesa" @@ -1491,7 +1564,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "ne mogu pronaći simbol „%s“ u %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1500,7 +1573,7 @@ "\n" "SSSD uloga: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1527,240 +1600,244 @@ #: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" -msgstr "Korisniku %s nije dozvoljeno pokrenuti sudo na %s.\n" +msgstr "Korisniku %s nije dopušteno pokrenuti sudo na %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "ne mogu inicirati sudoers zadane vrijednosti" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:857 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "problem sa stavkama zadanih vrijednosti" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "nisu pronađeni ispravni sudoers izvori, izlazim" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers navodi da root ne može koristiti sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" -msgstr "nemate dozvolu za korištenje opcije -C" +msgstr "nemate ovlasti za korištenje opcije -C" -#: plugins/sudoers/sudoers.c:385 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "vlasnik vremenske oznake (%s): Nema takvog korisnika" -#: plugins/sudoers/sudoers.c:399 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "nema terminala" -#: plugins/sudoers/sudoers.c:400 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "žao mi je, morate imati terminal za pokretanje sudo" -#: plugins/sudoers/sudoers.c:461 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "naredba u trenutnom direktoriju" -#: plugins/sudoers/sudoers.c:481 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "žao mi je, ali vama nije dopušteno zadavanje tajmauta za naredbu" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" -msgstr "žao mi je, nemate dozvolu za očuvanje okoline" +msgstr "žao mi je, nemate ovlasti za očuvanje okoline" -#: plugins/sudoers/sudoers.c:802 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "naredba je predugačka" -#: plugins/sudoers/sudoers.c:914 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s nije obična datoteka" -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "vlasnik %s je uid %u, treba biti %u" -#: plugins/sudoers/sudoers.c:922 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" -msgstr "%s ima dozvole za pisanje svih korisnika" +msgstr "svim imaju ovlasti za pisanje u %s" -#: plugins/sudoers/sudoers.c:926 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "vlasnik %s je gid %u, treba biti %u" -#: plugins/sudoers/sudoers.c:959 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "jedino root smije koristiti „-c %s“" -#: plugins/sudoers/sudoers.c:978 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "nepoznat razred prijave: %s" -#: plugins/sudoers/sudoers.c:1061 plugins/sudoers/sudoers.c:1089 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "ne mogu pronaći računalo %s" -#: plugins/sudoers/sudoreplay.c:232 +#: plugins/sudoers/sudoreplay.c:236 #, c-format msgid "invalid filter option: %s" msgstr "neispravna opcija filtra: %s" -#: plugins/sudoers/sudoreplay.c:245 +#: plugins/sudoers/sudoreplay.c:249 #, c-format msgid "invalid max wait: %s" msgstr "neispravno najveće čekanje: %s" -#: plugins/sudoers/sudoreplay.c:251 +#: plugins/sudoers/sudoreplay.c:255 #, c-format msgid "invalid speed factor: %s" msgstr "neispravni faktor brzine: %s" -#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s inačica %s\n" -#: plugins/sudoers/sudoreplay.c:286 +#: plugins/sudoers/sudoreplay.c:290 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/vrijeme: %s" -#: plugins/sudoers/sudoreplay.c:292 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/vrijeme: %s" -#: plugins/sudoers/sudoreplay.c:308 +#: plugins/sudoers/sudoreplay.c:312 #, c-format msgid "Replaying sudo session: %s\n" -msgstr "Prikazujem sudo sjednicu: %s\n" +msgstr "Prikazujem sudo sesiju: %s\n" -#: plugins/sudoers/sudoreplay.c:314 +#: plugins/sudoers/sudoreplay.c:318 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Upozorenje: vaš terminal je premalen za ispravno prikazivanje dnevnika.\n" -#: plugins/sudoers/sudoreplay.c:315 +#: plugins/sudoers/sudoreplay.c:319 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Veličina dnevnika je %d x %d, a veličina vašeg terminala %d x %d." -#: plugins/sudoers/sudoreplay.c:406 +#: plugins/sudoers/sudoreplay.c:410 msgid "unable to set tty to raw mode" msgstr "ne mogu postaviti terminal u sirovi način" -#: plugins/sudoers/sudoreplay.c:435 +#: plugins/sudoers/sudoreplay.c:439 #, c-format msgid "invalid timing file line: %s" msgstr "neispravan redak datoteke mjerenja vremena: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:659 plugins/sudoers/sudoreplay.c:684 #, c-format msgid "ambiguous expression \"%s\"" msgstr "višeznačni izraz „%s“" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:706 msgid "unmatched ')' in expression" msgstr "nesparena „)“ u izrazu" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:710 #, c-format msgid "unknown search term \"%s\"" msgstr "nepoznat pojam pretrage „%s“" -#: plugins/sudoers/sudoreplay.c:721 +#: plugins/sudoers/sudoreplay.c:725 #, c-format msgid "%s requires an argument" msgstr "%s zahtijeva argument" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1104 +#: plugins/sudoers/sudoreplay.c:728 plugins/sudoers/sudoreplay.c:1108 #, c-format msgid "invalid regular expression: %s" msgstr "neispravan regularni izraz: %s" -#: plugins/sudoers/sudoreplay.c:728 +#: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" msgstr "ne mogu analizirati datum „%s“" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" msgstr "nesparena „(“ u izrazu" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:743 msgid "illegal trailing \"or\"" -msgstr "nedozvoljeni „or“ na kraju" +msgstr "nedopušteni „or“ na kraju" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:745 msgid "illegal trailing \"!\"" -msgstr "nedozvoljeni „!“ na kraju" +msgstr "nedopušteni „!“ na kraju" -#: plugins/sudoers/sudoreplay.c:790 +#: plugins/sudoers/sudoreplay.c:794 #, c-format msgid "unknown search type %d" msgstr "nepoznat vrsta pretrage %d" -#: plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:832 #, c-format msgid "%s: invalid log file" msgstr "%s: neispravna dnevnička datoteka" -#: plugins/sudoers/sudoreplay.c:846 +#: plugins/sudoers/sudoreplay.c:850 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: nedostaje polje za vremenski žig" -#: plugins/sudoers/sudoreplay.c:853 +#: plugins/sudoers/sudoreplay.c:857 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: vremenski žig %s: %s" -#: plugins/sudoers/sudoreplay.c:860 +#: plugins/sudoers/sudoreplay.c:864 #, c-format msgid "%s: user field is missing" msgstr "%s: nedostaje polje za korisnika" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:873 #, c-format msgid "%s: runas user field is missing" msgstr "%s: nedostaje polje „pokreni kao“ (run as)" -#: plugins/sudoers/sudoreplay.c:878 +#: plugins/sudoers/sudoreplay.c:882 #, c-format msgid "%s: runas group field is missing" -msgstr "%s: nedostaje grupno polje „pokreni kao“ (run as)" +msgstr "%s: nedostaje grupno polje „pokreni kao“ (runas)" -#: plugins/sudoers/sudoreplay.c:1241 +#: plugins/sudoers/sudoreplay.c:1245 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" -msgstr "uporaba: %s [-h] [-d direktorij] [-m maks. čekanje] [-s faktor brzine] ID\n" +msgstr "uporaba: %s [-h] [-d direktorij] [-m broj] [-s broj] ID\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1248 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uporaba: %s [-h] [-d direktorij] -l [izraz za pretragu]\n" -#: plugins/sudoers/sudoreplay.c:1253 +#: plugins/sudoers/sudoreplay.c:1257 #, c-format msgid "" "%s - replay sudo session logs\n" "\n" msgstr "" -"%s - prikaži dnevnike sudo sjednica\n" +"%s - prikaži dnevnike sudo sesija\n" "\n" -#: plugins/sudoers/sudoreplay.c:1255 +#: plugins/sudoers/sudoreplay.c:1259 msgid "" "\n" "Options:\n" @@ -1774,28 +1851,28 @@ msgstr "" "\n" "Options:\n" -" -d, --directory=dir navedi direktorij za dnevnike sjednica\n" +" -d, --directory=dir navedi direktorij za dnevnike sesija\n" " -f, --filter=filtar navedi U/I vrste za prikaz\n" -" -h, --help prikaži pomoć i iziđi\n" +" -h, --help prikaži pomoć pa iziđi\n" " -l, --list [izraz] dostupne ID-ovi sjednice, koji se podudaraju\n" "\t\t s izrazom\n" " -m, --max-wait=broj najveći broj sekundi za čekanje između događaja\n" " -s, --speed=broj ubrzaj ili uspori ispis\n" -" -V, --version prikaži informacije o inačici i iziđi" +" -V, --version prikaži informacije o inačici pa iziđi" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tračunalo nije pronađeno" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" msgstr "" "\n" -"Naredba dozvoljena" +"Naredba je dopuštena" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1803,7 +1880,7 @@ "\n" "Naredba zabranjena" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1811,129 +1888,124 @@ "\n" "Naredba nije pronađena" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s je za grupu dostupan za pisanje" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "ne mogu podrezati vremenski žig na %lld bajtova" -#: plugins/sudoers/timestamp.c:730 plugins/sudoers/timestamp.c:797 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "ne mogu čitati vrijeme (clock)" -#: plugins/sudoers/timestamp.c:744 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "vremenski žig iz budućnosti se zanemaruje" -#: plugins/sudoers/timestamp.c:756 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "vremenski žig je previše u budućnosti: %20.20s" -#: plugins/sudoers/timestamp.c:851 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "datoteka (vremenski žigovi) ne može se zaključati %s" -#: plugins/sudoers/timestamp.c:895 plugins/sudoers/timestamp.c:915 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "putanja do uputa je predugačka: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s inačica gramatike %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "pritisnite return za uređivanje %s: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "navedeni uređivač (%s) ne postoji" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "nije pronađen uređivač (putanja uređivača = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "greška pisanja" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "na mogu izvršiti stat privremene datoteke (%s), %s nepromijenjen" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "privremena datoteka duljine nula (%s), %s nepromijenjen" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "uređivač (%s) nije uspio, %s nepromijenjen" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s nepromijenjen" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "ne mogu ponovo otvoriti privremenu datoteku (%s), %s nepromijenjen." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "ne mogu analizirati privremenu datoteku (%s), nepoznata greška" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "interna greška, ne mogu pronaći %s na popisu!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "na mogu postaviti (uid, gid) od %s na (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "ne mogu promijeniti mod od %s u 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s i %s nisu na istom datotečnom sustavu, koristim mv za preimenovanje" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "naredba nije uspjela: „%s %s %s“, %s nepromijenjen" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "greška preimenovanja %s, %s nepromijenjen" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Što sada? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1945,62 +2017,72 @@ " (x) izađi bez spremanja promjena u datoteku sudoers\n" " (Q) izađi i spremi promjene u datoteku sudoers (OPASNO!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "ne mogu pokrenuti %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: krivi vlasnički (uid, gid), treba biti (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" -msgstr "%s: neispravne dozvole, treba biti mod 0%o\n" +msgstr "%s: neispravna dopuštenja, treba biti mod 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "nisam uspio analizirati %s datoteku, nepoznata greška" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "greška analize u %s kod retka %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "greška analize u %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analiza u redu\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s je zauzet, pokušajte ponovo kasnije" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Greška: %s:%d ciklus u %s \"%s\"" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Upozorenje: %s:%d ciklus u %s „%s“" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d ciklus u %s „%s“" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Greška: %s:%d %s „%s“ je refereriran ali nije definiran" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d %s „%s“ ima referenciju ali nije definiran" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Upozorenje: %s:%d %s „%s“ je refereriran ali nije definiran" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d neupotrjebljen %s „%s“" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Upozorenje: %s:%d neupotrjebljen %s „%s“" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2009,7 +2091,7 @@ "%s - sigurno uređivanje datoteke sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2025,23 +2107,23 @@ "Opcije:\n" " -c, --check samo za provjeravanje\n" " -f, --file=sudoers lokacija datoteke sudoers\n" -" -h, --help prikaži pomoći i iziđi\n" +" -h, --help prikaži pomoći pa iziđi\n" " -q, --quite manje opširne (tihe) poruke sintaksnih grešaka\n" " -s, --strick strogo provjeravanje sintakse\n" -" -V, --version informacije o inačici i iziđi\n" +" -V, --version informacije o inačici pa iziđi\n" " -x, --export=output_file ispiši sudoers in JSON formatu u output_file" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "nepoznati zadani unos „%s“" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: ulazna i izlazna datoteka moraju se razlikovati" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "previše include ulaza" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/it.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/it.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/it.po sudo-1.8.20p2/plugins/sudoers/po/it.po --- sudo-1.8.19p1/plugins/sudoers/po/it.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/it.po 2017-05-10 15:38:43.000000000 +0000 @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.19b2\n" +"Project-Id-Version: sudoers-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-13 12:14+0100\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 14:23+0200\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -16,7 +16,7 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 1.8.12\n" "X-Poedit-SourceCharset: UTF-8\n" #: confstr.sh:1 @@ -43,148 +43,172 @@ msgid "Sorry, try again." msgstr "Riprovare." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "impossibile allocare memoria" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "un digest richiede il nome di percorso" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "valore notbefore non valido" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "valore notafter non valido" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "valore timeout troppo grande" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "valore timeout non valido" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -308,7 +332,7 @@ msgid "PAM authentication error: %s" msgstr "errore autenticazione PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "l'utente attuale non esiste nel database %s" @@ -402,536 +426,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "uid sconosciuto: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "utente sconosciuto: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Infrastruttura syslog se syslog viene utilizzato per le registrazioni: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Priorità di syslog se l'utente si identifica con successo: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Priorità di syslog se l'utente non si identifica con successo: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Mette il prompt OTP su una riga a parte" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Ignora \".\" in $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Invia sempre una email quando viene eseguito sudo" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Invia una email se l'autenticazione utente non riesce" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Invia una email se l'utente non è tra i sudoers" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Invia una email se l'utente non è tra i sudoers per questo host" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Invia una email se l'utente non è abilitato a eseguire un comando" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Invia una email se l'utente tenta di eseguire un comando" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa una marcatura temporale diversa per ogni combinazione utente/tty" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Aiuta gli utenti alla prima esecuzione di sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "File contenente la lezione su sudo: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Richiede in modo predefinito l'autenticazione degli utenti" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Root può eseguire sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Registra il nome host nel file di registro (non-syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Registra l'anno nel file di registro (non-syslog)" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo viene lanciato senza alcun argomento, avvia una shell" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Imposta $HOME all'utente definito quando viene avviata una shell con -s" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Imposta sempre $HOME alla directory home dell'utente definito" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Consente la raccolta di alcune informazioni per dare messaggi di errore utili" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Richiede nomi host completi nel file sudoers" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Apostrofa l'utente quando inserisce una password errata" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Consente all'utente di seguire sudo solo se dispone di un tty" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo utilizzerà il valore definito nella variabile EDITOR" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Chiede la password di root, non quella dell'utente" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Chiede la password dell'utente runas_default, non quella dell'utente" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Chiede la password dell'utente definito, non quella dell'invocante" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Applica i Defaults nella classe di login dell'utente definito, se presente" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Imposta le variabili d'ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Imposta lo uid effettivo all'utente definito, non lo uid reale" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Non inizializza il vettore di gruppo con quello dell'utente definito" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Lunghezza a cui andare a capo nei file di registro (0 per non andare a capo): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Timeout marcatura temporale di autenticazione: %.1f minuti" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Timeout per inserimento password: %.1f minuti" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Numero di tentativi per l'inserimento della password: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "umask da utilizzare o 0777 per utilizzare quella dell'utente: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Percorso al file di registro: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Percorso al programma email: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Flag per il programma email: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Indirizzo a cui mandare l'email: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Indirizzo da cui mandare l'email: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Oggetto dell'email: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Messaggio password errata: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Percorso directory di stato della lezione: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Percorso directory con la marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Proprietario directory con la marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Agli utenti di questo gruppo non sono richiesti password e PATH: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Prompt predefinito per la password: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se impostato, passprompt scavalcherà sempre il prompt di sistema." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Utente predefinito con cui eseguire i comandi: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valore con cui sovrascrivere la variabile $PATH dell'utente: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Percorso all'editor per visudo: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quando richiedere una password per il pseudo-comando \"list\": %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quando richiedere una password per il pseudo-comando \"verify\": %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Pre-carica le funzioni exec dummy contenute nella libreria sudo_noexec" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Se LDAP è funzionante, viene ignorato il file sudoers locale" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "I descrittori di file >= %d verranno chiusi prima dell'esecuzione di un comando" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Se impostata, gli utenti possono sovrascrivere il valore di \"closefrom\" con l'opzione -C" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Consente agli utenti di impostare variabili d'ambiente" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Reimposta l'ambiente con le variabili predefinite" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Variabile d'ambienti da validare:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Variabili d'ambiente da rimuovere:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Variabili d'ambiente da preservare:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Ruolo SELinux da usare nel nuovo contesto di sicurezza: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Tipologia di SELinux da usare nel nuovo contesto di sicurezza: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Percorso al file d'ambiente specifico di sudo: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Percorso al file d'ambiente riservato specifico di sudo: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Localizzazione da usare durante l'analisi del file sudoers: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Abilita sudo a chiedere una password anche se sarebbe visibile" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Fornisce riscontro visibile al prompt della password nel caso di input utente" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Usa glob più veloce e meno preciso, ma non accede al file system" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "La umask definita in sudoers scavalca quella dell'utente, anche se è più permissiva" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Registra l'input dell'utente per il comando in esecuzione" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Registra l'output del comando in esecuzione" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Comprime i registri utilizzando zlib" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Esegue sempre i comandi in uno pseudo-tty" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin per supporto ai gruppi non-Unix: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Directory in cui salvare i registri di I/O: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "File in cui salvare il registro I/O: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Aggiunge una voce al file utmp/utmpx quando viene allocato un pty" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Imposta l'utente in utmp all'utente runas, non l'utente invocante" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Privilegi concessi" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Privilegi non concessi" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Esegue i comandi in un pty in background" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Nome del servizio PAM da usare" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Nome del servizio PAM da usare per le shell di login" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Tentativo di stabilire le credenziali PAM per l'utente finale" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Crea una nuova sessione PAM in cui eseguire il comando" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Numero massimo di sequenze I/O di registro: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Abilita support netgroup in sudoers" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Controlla le directory superiori per accesso in scrittura durante le modifiche con sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Segue i collegamenti simbolici durante le modifiche con sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Interroga il plugin dei gruppi per gruppi di sistema sconosciuti" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Corrispondenza gruppi di rete con tutti i valori: utente, host e dominio" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Consente di eseguire i comandi anche se sudo non può scrivere sul registro di controllo" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Consente di eseguire i comandi anche se sudo non può scrivere sul registro di I/O" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Consente di eseguire i comandi anche se sudo non può scrivere sul file di registro" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Gestisce i gruppi attraverso sudoers ed esegue la corrispondenza sull'ID del gruppo, non sul nome" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Voci di registro più grandi di questo valore vengono divise su più messaggi" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Voci di registro più grandi di questo valore vengono divise su più messaggi: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Utente proprietario dei file di registro di I/O: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Gruppo proprietario dei file di registro di I/O: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Modalità dei file di registro di I/O: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Esegue comandi in base al descrittore del file e non sul percorso: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignora le voci Defaults sconosciute nel file sudoers invece di inviare un avviso" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Tempo in secondi dopo il quale il comando viene terminato: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Consente all'utente di specificare un timeout attraverso la riga di comando" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Scrive immediatamente i dati I/O del registro sul disco invece di tenerli in memoria" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d voce Defaults \"%s\" sconosciuta" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: voce Defaults \"%s\" sconosciuta" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d nessun valore specificato per \"%s\"" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nessun valore specificato per \"%s\"" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d i valori per \"%s\" devono iniziare con un carattere \"/\"" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: i valori per \"%s\" devono iniziare con un carattere \"/\"" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d l'opzione \"%s\" non accetta un valore" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: l'opzione \"%s\" non accetta un valore" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d tipo Defaults 0x%x non valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: tipo Defaults 0x%x non valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d il valore \"%s\" non è valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: il valore \"%s\" non è valido per l'opzione \"%s\"" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "errore interno, overflow di %s" @@ -940,15 +992,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp danneggiato, discordanza nella lunghezza" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "impossibile ricostruire l’ambiente" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "permessi non sufficienti per impostare le seguenti variabili d'ambiente: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "tipo di digest %d non supportato per %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: errore di lettura" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -988,82 +1052,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Coppia indirizzo IP locale e maschera di rete:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s esiste, ma non è una directory (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "impossibile creare la directory %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "impossibile modificare la modalità di %s a 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "gruppo sconosciuto: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "impossibile aprire %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "impossibile leggere %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "impossibile scrivere su %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "impossibile creare %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "impossibile scrivere sul file di registro di I/O: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: errore interno, file indice %d non aperto" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: porta troppo grande" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipologia di uri LDAP non supportata: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "impossibile utilizzare URI ldap e ldaps assieme" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "starttls non supportato quando viene utilizzato ldaps" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "impossibile inizializzare il certificato SSL e il database delle chiavi: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "è necessario impostare TLS_CERT in %s per usare SSL" @@ -1081,7 +1151,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1090,7 +1160,7 @@ "\n" "Ruolo LDAP: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1099,27 +1169,27 @@ "\n" "Ruolo LDAP: sconosciuto\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Ordine: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Comandi:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "impossibile inizializzare LDAP: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "specificato start_tls ma le librerie LDAP non supportano ldap_start_tls_s() o ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attributo sudoOrder non valido: %s" @@ -1197,15 +1267,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "All'utente %s non è consentito eseguire \"%s%s%s\" come %s%s%s su %s.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: comando non trovato" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1253,38 +1323,28 @@ msgid "unable to execute %s: %m" msgstr "impossibile eseguire %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "tipo di digest %d non supportato per %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: errore di lettura" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "il digest per %s (%s) non è nella forma %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "impossibile eseguire stat su %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "errore di analisi in %s vicino alla riga %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "errore di analisi in %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1293,41 +1353,41 @@ "\n" "Voce sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Opzioni: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "impossibile analizzare l'elenco degli indirizzi di rete" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "impossibile eseguire %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versione %s del plugin della politica sudoers\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versione %d della grammatica del file sudoers\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1336,22 +1396,22 @@ "\n" "Percorso sudoers: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "percorso nsswitch: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "percorso ldap.conf: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "percorso ldap.secret: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "impossibile registrare un hook di tipo %d (versione %d.%d)" @@ -1420,48 +1480,48 @@ msgid "unable to parse gids for %s" msgstr "impossibile analizzare i gid per %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "overflow dello stack perm" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "underflow dello stack perm" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "impossibile passare al gid root" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "impossibile passare al gid runas" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "impossibile impostare il vettore di gruppo per runas" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "impossibile passare allo uid runas" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "impossibile passare al gid sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "troppi processi" @@ -1494,7 +1554,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "impossibile trovare il simbolo \"%s\" in \"%s\"" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1503,7 +1563,7 @@ "\n" "Ruolo SSSD: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1532,84 +1592,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "L'utente %s non è abilitato all'esecuzione di sudo su %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "impossibile inizializzare i valori predefiniti di sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "problema con le voci Defaults" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "nessuna sorgente valida di sudoers trovata, uscita" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers indica che a root non è consentito usare sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "utente non abilitato all'uso dell'opzione -C" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "proprietario marcatura temporale (%s): utente inesistente" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "nessun tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "è necessario disporre di un tty per eseguire sudo" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "comando nella directory corrente" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "non è consentito impostare un timeout per i comandi" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "non è consentito preservare l'ambiente" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "comando troppo lungo" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s non è un file regolare" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s è di proprietà dello uid %u, dovrebbe essere %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s è di proprietà del gid %u, dovrebbe essere %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "solo root può usare \"-c %s\"" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "classe di login sconosciuta: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "impossibile risolvere l'host %s" @@ -1629,7 +1693,7 @@ msgid "invalid speed factor: %s" msgstr "fattore di velocità non valido: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s versione %s\n" @@ -1785,11 +1849,11 @@ " -s, --speed=NUME Velocizza o rallenta l'output\n" " -V, --version Visualizza la versione ed esce" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\thost non corrispondente" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1797,7 +1861,7 @@ "\n" "Comando consentito" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1805,7 +1869,7 @@ "\n" "Comando negato" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1813,129 +1877,124 @@ "\n" "Comando non corrispondente" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "impossibile troncare il file della marcatura temporale a %lld byte" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "impossibile leggere l'orologio" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "marcatura temporale dal futuro ignorata" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "marcatura temporale troppo avanti nel tempo: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "impossibile bloccare il file della marcatura temporale %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "percorso marcatura temporale troppo lungo: %s %s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s versione grammaticale %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "premere Invio per modificare %s:" -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "l'editor specificato (%s) non esiste" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "nessun editor trovato (percorso dell'editor = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "errore di scrittura" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "impossibile eseguire stat sul file temporaneo (%s), %s non modificato" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "file temporaneo di lunghezza pari a zero (%s), %s non modificato" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) non riuscito, %s non modificato" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s non modificato" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "impossibile riaprire il file temporaneo (%s), %s non modificato" -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "impossibile analizzare il file temporaneo (%s), errore sconosciuto" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "errore interno, impossibile trovare %s nell'elenco." -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "impossibile impostare (uid, gid) di %s a (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "impossibile modificare la modalità di %s a 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s e %s non sono sullo stesso file system, viene usato \"mv\" per rinominare" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando non riuscito: \"%s %s %s\", %s non modificato" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "errore nel rinominare %s, %s non è stato modificato" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Che fare ora?" -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1947,69 +2006,79 @@ " (x) Esce senza salvare le modifiche al file sudoers\n" " (Q) Esce e salva le modifiche al file sudoers (pericoloso)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "impossibile avviare %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: proprietario errato (uid, gid), dovrebbe essere (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permessi errati, dovrebbe avere modalità 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "analisi del file %s non riuscita, errore sconosciuto" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "errore di analisi in %s vicino alla riga %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "errore di analisi in %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analisi effettuata correttamente\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s occupato, riprovare" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Errore: %s:%d ciclo in %s \"%s\"" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Attenzione: %s:%d ciclo in %s \"%s\"" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d ciclo in %s \"%s\"" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Attenzione: %1$s:%2$d riferimento a \"%4$s\" %3$s, ma non definito" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%1$s:%2$d riferimento a \"%4$s\" %3$s, ma non definito" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Attenzione: %1$s:%2$d riferimento a \"%4$s\" %3$s, ma non definito" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d inutilizzato %s \"%s\"" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Attenzione %s:%d inutilizzato %s \"%s\"" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "%s - Modifica in sicurezza il file sudoers\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2031,17 +2100,17 @@ " -V, --version Visualizza la versione ed esce\n" " -x, --export=FILE Esporta il file sudoers in formato JSON su FILE" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "voce Defaults \"%s\" sconosciuta" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: i file di input e output devono essere diversi" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "troppi livelli di inclusioni" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/ja.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/ja.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/ja.po sudo-1.8.20p2/plugins/sudoers/po/ja.po --- sudo-1.8.19p1/plugins/sudoers/po/ja.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/ja.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,13 @@ # Japanese messages for sudoers # This file is put in the public domain. # Yasuaki Taniguchi , 2011. -# Takeshi Hamasaki , 2012, 2015, 2016. +# Takeshi Hamasaki , 2012, 2015, 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 21:38+0900\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-04-01 21:13+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -16,7 +16,7 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-Basepath: sudo-1.8.19b1\n" +"X-Poedit-Basepath: sudo-1.8.20b1\n" "X-Generator: Poedit 1.8.11\n" "X-Poedit-SearchPath-0: .\n" @@ -44,148 +44,172 @@ msgid "Sorry, try again." msgstr "残念、また試してください。" -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "認証方式にはパスが必要です" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "notbefore の値が無効です" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "notafter の値が無効です" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "制限時間の値が大き過ぎます" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "時間制限値が無効です" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -309,7 +333,7 @@ msgid "PAM authentication error: %s" msgstr "PAM 認証エラーです: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "あなたは %s データベース内に存在しません" @@ -403,537 +427,565 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "不明なユーザーID (uid) です: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "不明なユーザーです: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "ログ記録時に syslog を使用する場合の syslog facility: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "ログ記録時に syslog を使用する場合の syslog priority: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "ユーザー認証に失敗したと時に使用される syslog priority: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "ワンタイムパスワード入力要求をそれのみの行に表示します" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "$PATH 内にある '.' を無視します" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "sudo を実行した時に、常にメールを送信します" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "ユーザー認証に失敗した場合にメールを送信します" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "ユーザー他 sudoers 内に存在しない場合にメールを送信します" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "ユーザーがこのホスト用の sudoers 内に存在しない場合にメールを送信します" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "ユーザーが許可されていないコマンドを実行しようとした場合にメールを送信します" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "ユーザーがマンドを実行しようとした場合にメールを送信します" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "ユーザー/tty の組み合わせごとに分離したタイムスタンプを使用します" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "ユーザーが最初に sudo を実行した時に講義を行う" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "sudo の講義が含まれているファイル: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "デフォルトでユーザーが認証されていることを必要とします" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "root が sudo を実行するかもしれません" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr " ログファイル (syslog 以外) に記録する時にホスト名を含めます" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "ログファイル (syslog 以外) に記録する時に年情報を含めます" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "sudo を引数無しで起動した場合、シェルを開始します" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "シェルを -s で開始した時に $HOME を変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "$HOME を常に変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "役に立つエラーメッセージを表示するためにいくつかの情報を収集することを許可します" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "sudoers ファイルに完全修飾ホスト名 (FQDN) を要求します" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "間違ったパスワードを入力した時にユーザーを侮辱します" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "tty がある場合のみ sudo の実行を許可します" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo が EDITOR 環境変数を尊重して使用します" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "ユーザーのパスワードではなく、root のパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "ユーザーのパスワードではなく、 runas_default ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "現在のユーザーのパスワードではなく、変更先ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "変更先ユーザーのログインクラスのデフォルトが存在する場合は、デフォルトを適用します" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "LOGNAME および USER 環境変数を設定します" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "実効ユーザーIDのみ変更先ユーザーの UID に設定し、実ユーザーIDは変更しない" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "グループベクトルを変更先ユーザーの値で初期化しない" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "ログファイルの行頭から改行までの長さ (0 の場合は改行しない): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "認証タイムスタンプのタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "パスワード入力要求のタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "パスワード入力の試行回数: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "使用する umask 値 (0777 の場合はユーザーの設定値を使用します): 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "ログファイルのパス: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "メールプログラムのパス: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "メールプログラムの引数フラグ: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "メールの送信先アドレス: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "メールの送信元アドレス: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "メールの件名 (Subject) 行: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "パスワードを間違った時のメッセージ: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "受講状況ディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリの所有者: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "パスワード入力と PATH の要求が免除されるグループに属するユーザー: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "パスワード入力要求時に表示される文字列: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "設定した場合、すべての場合において passprompt がシステムの入力要求表示を上書きします" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "コマンドを実行するデフォルトの変更先ユーザー: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "ユーザーの $PATH を上書きする時の値: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo で使用されるエディターのパス: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "'list' 疑似コマンド使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "'verify' 疑似コマンドを使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "sudo_noexec ライブラリに含まれるダミーの exec 関数群を事前ロードします" # do はたぶん強調の do -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "LDAP ディレクトリが実行中の場合、ローカルの sudoers ファイルを無視します" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "%d 以上の値をもつファイル記述子をコマンド実行前に閉じます" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "設定した場合、ユーザーが `closefrom' の値を -C オプションで上書きするかもしれません" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "ユーザーが任意の環境変数を設定することを許可します" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "環境変数の集合をデフォルトに設定します" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "正当性の確認を行う環境変数:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "削除する環境変数:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "保護する環境変数:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux の役割: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux のタイプ: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 固有の環境ファイルのパス: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "制限付きsudo 固有の環境ファイルのパス: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "sudoers を構文解析する時に使用するロケール: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "パスワードが表示されてしまう状態であっても sudo がパスワード入力を要求することを許可します" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "パスワード入力要求でユーザーの入力があった時に、視覚的なフィードバックを提供します" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "ファイルシステムにアクセスしないがより正確では無い、素早い一致確認処理を行います" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "sudoers で指定した umask 値でユーザーの umask 値を上書きします (ユーザーの umask 値より緩い場合でも)" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "コマンドを実行した時のユーザー入力をログに記録します" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "コマンドを実行した時の出力をログに記録します" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "I/O ログを zlib を使用して圧縮します" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "常に疑似 tty 内でコマンドを実行します" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "UNIX 以外のグループをサポートするためのプラグインです:%s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "入出力 (I/O) ログを保存するディレクトリです:%s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "入出力 (I/O) ログを保存するファイルです:%s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "pty を割り当てた時に utmp/utmpx ファイルに記録を加えます" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "utmp に記録するユーザーを、実行したユーザーではなく、変更後のユーザーにします" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "許容される権限の集合" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "制限される権限の集合" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "コマンドを pty でバックグラウンドで実行する" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "利用する PAM サービス名" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "ログインシェルで利用する PAM サービス名" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "ターゲットユーザーの PAM 資格情報による認証を試みる" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "実行するコマンドのために新しい PAM セッションを生成する" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "I/O ログシーケンス番号の最大値: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "sudoers のネットグループサポートを有効にする" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "ファイルを sudoedit で編集するときに親ディレクトリが書き込み可能か確かめる" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "ファイルを sudoedit で編集するときにシンボリックリンクを追う" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "不明なシステムグループについて、グループプラグインに問い合わせる" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "ネットグループについて、すべてのタプル(ユーザー、ホスト、ドメイン)を基に判定する" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "監査ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "I/O ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "グループの照合を sudoers の中で行い、グループ名でなくグループIDを用いる" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "ログエントリーがこの値より長くなると、複数の syslog メッセージに分割されます" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "ログエントリーがこの値より長くなると、複数の syslog メッセージに分割されます: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "I/O ログの所有者となるユーザー: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "I/O ログの所有者となるグループ: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "I/O ログのファイルモード: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "コマンドの実行時にパスでなくファイル記述子を使う: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "sudoers の中の未知の Defaults エントリーを無視し、警告を出さない" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "コマンドが中断されるまでの経過時間を秒で指定する: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "ユーザーがコマンド実行の制限時間をコマンドラインで指定できるようにする" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "I/O ログのデータをバッファせずに、即ディスクにフラッシュする" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d 不明なデフォルト項目 \"%s\" です" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: 不明なデフォルト項目 \"%s\" です" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d \"%s\" に値が指定されていません" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: \"%s\" に値が指定されていません" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d \"%s\" の値は '/' で開始しなければいけません" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: \"%s\" の値は '/' で開始しなければいけません" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d オプション \"%s\" は値をとりません" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: オプション \"%s\" は値をとりません" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d \"%s\" はオプション \"%s\" の値としては無効です" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: \"%s\" はオプション \"%s\" の値としては無効です" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "内部エラー、%s がオーバーフローしました" @@ -942,14 +994,26 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp が破損しています。長さが合いません" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "環境を再構築できません" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" -msgstr "すみませんが、あなたは次の環境変数を設定することを許可されていません: %s" +msgstr "残念ですが、あなたは次の環境変数を設定することを許可されていません: %s" + +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "サポートされてない 認証方式 %d です: %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: 読み込みエラー" #: plugins/sudoers/group_plugin.c:86 #, c-format @@ -990,82 +1054,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "ローカル IP アドレスとネットマスクの組:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s が存在しますがディレクトリではありません (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "ディレクトリ %s を作成できません" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "%s のアクセス権限のモードを 0%o に変更できません" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "不明なグループです: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "%s を開けません" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "%s を読み込めません" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "%s へ書き込むことができません" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "%s を作成できません" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "%s へ I/O ログを書き込むことができません" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: 内部エラー、インデックス %d のファイルを開くことができません" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: ポートが大きすぎます" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "サポートされてない LDAP URI タイプです: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap と ldaps の URI を混ぜて使用できません" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "starttls は ldaps を使用時にはサポートされていません" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "SSL 証明書と鍵データベースを初期化できません: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "SSL を使用するためには %s の中の TLS_CERT を設定する必要があります" @@ -1083,7 +1153,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1092,7 +1162,7 @@ "\n" "LDAP 役割: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1101,27 +1171,27 @@ "\n" "LDAP 役割: 不明\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Order: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " コマンド:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP を初期化できません: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 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:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "無効な sudoOrder 属性です: %s" @@ -1192,22 +1262,22 @@ #: plugins/sudoers/logging.c:288 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" -msgstr "ユーザー %s は %s 上で sudo を実行できません。すみません。\n" +msgstr "残念ですが、ユーザー %s は %s 上で sudo を実行できません。\n" #: plugins/sudoers/logging.c:291 #, 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" +msgstr "残念ですが、ユーザー %s は'%s%s%s' を %s%s%s として %s 上で実行することは許可されていません。\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: コマンドが見つかりません" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1254,38 +1324,28 @@ msgid "unable to execute %s: %m" msgstr "%s を実行できません: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "サポートされてない 認証方式 %d です: %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: 読み込みエラー" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "%s (%s) の認証方式は %s 形式ではありません" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "%s の状態取得 (stat) ができません" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "%s 内 %d 行付近で構文解析エラーが発生しました" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "%s 内で構文解析エラーが発生しました" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1294,41 +1354,41 @@ "\n" "sudoers 項目:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " オプション: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "ネットワークのアドレスリストを解析できません" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "sudoers ポリシープラグイン バージョン %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "sudoers ファイル文法バージョン %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1337,22 +1397,22 @@ "\n" "sudoers のパス: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch のパス: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf のパス: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret のパス: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "タイプ %d のフックを登録できません (バージョン %d.%d)" @@ -1421,48 +1481,48 @@ msgid "unable to parse gids for %s" msgstr "%s のグループIDを解析できません" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "perm スタックがオーバーフローしました" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "perm スタックがアンダーフローしました" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "root のグループIDへ変更できません" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "実行するためのグループIDに変更できません" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "グループベクトルを実行するためのものに変更できません" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "実行するためのユーザーIDに変更できません" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "sudoers のグループIDへ変更できません" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "プロセスが多すぎます" @@ -1495,7 +1555,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "シンボル \"%s\" が %s 内にありません" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1504,7 +1564,7 @@ "\n" "SSSD 役割: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1533,84 +1593,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "ユーザー %s は %s 上で sudo を実行することを許可されていません。\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "sudoers のデフォルト値を初期化できません" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "デフォルト項目で問題が発生しました" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "有効な sudoers のソースが見つかりません。終了します" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers の指定により root が sudo を使用することは禁止されています" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "-C オプションを使用することは許可されていません" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "タイムスタンプの所有者 (%s): そのようなユーザーはありません" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "tty がありません" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" -msgstr "sudo を実行するには tty がなければいけません。すみません" +msgstr "残念ですが、sudo を実行するには tty が必要です" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "コマンドがカレントディレクトリにあります" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "残念ですが、あなたはコマンド実行の制限時間を設定することを許可されていません。" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" -msgstr "あなたは環境変数を保護することを許可されていません。すみません" +msgstr "残念ですが、あなたは環境変数を保存することを許可されていません。" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "コマンド名が長すぎます" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s は通常ファイルではありません" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s はユーザーID %u によって所有されています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s は誰でも書き込み可能です" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s のグループIDは %u になっています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "root のみ \"-c %s\" を使用できます" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "不明なログインクラスです: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "ホスト %s の名前解決ができません" @@ -1630,7 +1694,7 @@ msgid "invalid speed factor: %s" msgstr "無効な speed_factor の値です: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s バージョン %s\n" @@ -1786,11 +1850,11 @@ " -s, --speed=num 出力速度を速くする、または遅くする\n" " -V, --version バージョン情報を表示して終了する" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tホストが一致しません" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1798,7 +1862,7 @@ "\n" "コマンドが許可されました" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1806,7 +1870,7 @@ "\n" "コマンドが拒否されました" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1814,129 +1878,124 @@ "\n" "コマンドが一致しませんでした" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s はグループのメンバーによる書き込みが可能です" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "タイムスタンプファイルを %lld バイトに切り詰めることができません" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "時刻を読み込むことができません" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "未来の時刻のタイムスタンプを無視します" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "タイムスタンプが遠すぎる将来になっています: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "タイムスタンプファイル %s をロックすることができません" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "受講状況格納パスが長すぎます: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s 文法バージョン %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "%s を編集するためにリターンを押してください: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "指定したエディター (%s) が存在しません" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "エディターが見つかりません (エディターのパス = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "書き込みエラーです" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の状態取得 (stat) ができません。%s は変更されません" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の大きさが 0 です。%s は変更されません" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "エディター (%s) が異常終了しました。%s は変更されません" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s は変更されません" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "一時ファイル (%s) を再度開くことができません。%s は変更されません。" -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "一時ファイル (%s) の構文解析ができません。不明なエラーです" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "内部エラー、リスト内に %s が見つかりません!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "%s の (ユーザーID, グループID) を (%u, %u) に設定できません" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "%s のアクセス権限のモードを 0%o に変更できません" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s と %s は同じファイルシステム上にありません。名前を変更するために mv を使用しています" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "コマンドの失敗です: '%s %s %s'。%s は変更されません" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "%s の名前変更に失敗しました。%s は変更されません" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "次は何でしょうか? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1948,62 +2007,72 @@ " x -- sudoers ファイルへの変更を保存せずに終了します\n" " Q -- sudoers ファイルへの変更を保存して終了します (*危険です!*)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: 所有権に誤りがあります。(ユーザーID, グループID) は (%u, %u) であるべきです\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: アクセス権限に誤りがあります。モードは 0%o であるべきです\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "%s ファイルの構文解析に失敗しました。不明なエラーです" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s 内 %d 行付近で構文解析エラーが発生しました\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "%s 内で構文解析エラーが発生しました\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: 正しく構文解析されました\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s がビジー状態です。後で再試行してください" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "エラー: %s:%d %s のエイリアス \"%s\" で定義が循環しています" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "警告: %s:%d %s のエイリアス \"%s\" で定義が循環しています" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d %s \"%s\" の定義が循環しています" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "エラー: %s:%d %s \"%s\" は参照されているのに定義されていません" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d %s \"%s\" は参照されていますが定義されていません" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "警告: %s:%d %s \"%s\" は参照されているのに定義されていません" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d エイリアス %s として %s は使用されていません" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "警告: %s:%d エイリアス %s として %s は使用されていません" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2012,7 +2081,7 @@ "%s - sudoers ファイルを安全に編集する\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2034,17 +2103,17 @@ " -V, --version バージョン情報を表示して終了する\n" " -x, --export=output_file write sudoers in JSON format to output_file" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "不明なデフォルト項目 \"%s\" です" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: 入力ファイルと出力ファイルは別である必要があります" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "インクルードの階層が大きすぎます" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/nb.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/nb.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/nb.po sudo-1.8.20p2/plugins/sudoers/po/nb.po --- sudo-1.8.19p1/plugins/sudoers/po/nb.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/nb.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,15 +1,15 @@ # Norwegian bokmål translation of sudoers. # This file is distributed under the same license as the sudo package. -# Copyright (C) 2016 Free Software Foundation, Inc. +# Copyright (C) 2017 Free Software Foundation, Inc. # Todd C. Miller , 2011-2013. -# Åka Sikrom , 2014-2016. +# Åka Sikrom , 2014-2017. # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.19b2\n" +"Project-Id-Version: sudoers-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 12:26+0100\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-04-15 17:56+0200\n" "Last-Translator: Åka Sikrom \n" "Language-Team: Norwegian Bokmaal \n" "Language: nb\n" @@ -44,148 +44,172 @@ msgid "Sorry, try again." msgstr "Feil. Prøv igjen." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "klarte ikke å tildele minne" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "kontrollsummering krever at du velger et stinavn" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "ugyldig «notbefore»-verdi" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "ugyldig «notafter»-verdi" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "for langt tidsavbrudd" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "ugyldig tidsavbrudd" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -309,7 +333,7 @@ msgid "PAM authentication error: %s" msgstr "Feil ved PAM-autentisering. %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "du finnes ikke i %s-databasen" @@ -403,536 +427,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "uid-en «%u» er ukjent" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "brukeren %s er ukjent" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Syslog-plassering, hvis syslog brukes til loggføring: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Syslog-prioritet når brukeren har autentisert seg: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Syslog-prioritet når brukeren ikke har klart å autentisere seg: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Legg OTP-ledetekst på egen linje" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Ignorer «.» i $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Send alltid e-post når noen kjører sudo" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Send e-post hvis en bruker mislykkes i å autentisere seg" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Send e-post hvis bruker ikke finnes i sudoers-fil" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Send e-post hvis brukeren ikke finnes i sudoers-fil for denne verten" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Send e-post hvis brukeren ikke har lov til å kjøre en kommando" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Send e-post hvis brukeren prøver å kjøre en kommando" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Bruk separat tidsstempel for hver kombinasjon av bruker og tty" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Gi brukere en moralpreken første gang de kjører sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fil som inneholder sudo-moralpreken: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Krev at brukere skal autentisere seg som standard" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Rotbruker kan kjøre sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Ta med vertsnavn i loggfil (ikke syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Ta med år i loggfil (ikke syslog)" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Start et skall hvis sudo kjøres uten argumenter" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Velg målbrukers $HOME når et skall startes med «-s»" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Bruk alltid målbrukers hjemmemappe som $HOME" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Tillat informasjonsinnhenting for å gjøre feilmeldingene nyttige" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Krev fullstendige vertsnavn i sudoers-fil" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Send brukere en fornærmelsestekst når de oppgir feil passord" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Bare tillat brukere å kjøre sudo hvis de bruker en tty" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo tar hensyn til miljøvariabelen EDITOR" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Spør etter rotbrukers passord, i stedet for eget passord" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Spør etter passord for «runas_default» i stedet for eget passord" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Spør etter målbrukers passord, i stedet for eget passord" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Bruk standardverdier i målbrukers innloggingsklasse, hvis den finnes" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Gi verdier til miljøvariablene «LOGNAME» og «USER»" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Velg målbrukers uid som effektiv uid, i stedet for faktisk uid" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Ikke last inn målbrukers gruppevektor" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Hvilken lengde linjer i loggfiler skal pakkes ned til (bruk 0 for å deaktivere pakking): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Tidsavbrudd for autentiseringstidsstempel: %.1f minutter" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Tidsavbrudd for passordetterspørsel: %.1f minutter" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Antall forsøk på å skrive inn passord: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "U-maske som skal brukes, eller 0777 for å bruke egen maske: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Sti til loggfil: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Sti til e-postprogram: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Valg for e-postprogram: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Hvilken adresse det skal sendes e-post til: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Hvilken adresse e-posten skal sendes fra: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Emnelinje i e-postmeldinger: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Melding om feil passord: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Sti til mappe for moralpreken-status: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Sti til mappe for autentiseringstidsstempel: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Eieren av mappa for autentiseringstidsstempel: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Brukerne i denne gruppa fritas fra passord- og PATH-krav: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Standard passord-ledetekst: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Hvis dette er valgt, blir system-ledetekst alltid overstyrt av passord-ledetekst." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardbruker for kjøring av kommandoer: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Verdi som overstyrer brukerspesifikk $PATH: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Filsti til tekstbehandler som visudo skal bruke: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Når pseudokommandoen «list» skal kreve passord: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Når pseudokommandoen «verify» skal kreve passord: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Last inn prøvekjøringsfunksjonene som ligger i biblioteket «sudo_noexec»" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Om lokal sudoers-fil skal ignoreres når en LDAP er aktiv" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Fildeskriptorne >= %d lukkes før en kommando blir kjørt" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Hvis dette er valgt, har brukerne mulighet til å overstyre «closefrom»-verdien med valget «-C»" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Tillat brukere å velge arbitrære miljøvariabler" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Tilbakestill brukermiljøet til et sett med standardvariabler" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Miljøvariabler som skal kontrolleres:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Miljøvariabler som skal fjernes:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Miljøvariabler som skal beholdes:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-rolle som skal brukes i ny sikkerhetskontekst: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-type som skal brukes i ny sikkerhetskontekst: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Sti til sudo-spesifikk miljøfil: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Sti til sudo-spesifikk miljøfil: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Regioninnstilling som skal brukes når «sudoers» tolkes: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Tillat sudo å spørre etter et passord som - hvis skrevet inn - blir synlig på skjermen" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Gi visuell respons når brukere skriver inn passord" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Bruk raskere joker-søking som er mindre presis (og som ikke søker i filsystemet)" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "U-masker som er valgt i sudoers overstyrer brukermasker, selv hvis sudoers åpner for mer tilgang enn brukermaska" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Loggfør bruker-inndata i kommandoen som kjøres" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Loggfør utskrift fra kommandoen som kjøres" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Komprimer inn- og utdatalogger ved bruk av «zlib»" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Kjør alltid kommandoer i en pseudo-tty" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Støttetillegg for grupper som ikke er Unix-grupper: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Mappe hvor inn- og utdatalogger skal lagres: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fil hvor inn- og utdatalogger skal lagres: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Legg til en oppføring i utmp-/utmpx-fil ved tildeling av pty" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Kjør kommandoer som utmp-bruker, i stedet for brukeren som skriver inn kommando" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Sett med tillatte privilegier" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Sett med begrensningsprivilegier" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Kjør kommandoer på en pty i bakgrunnen" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "PAM-tjenestenavn som skal brukes" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "PAM-tjenestenavn som skal brukes til innloggingsskall" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Prøv å sette opp PAM-akkreditiver for målbruker" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Lag en ny PAM-økt som kommandoen kjøres i" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Høyeste tillatte sekvensnummer i inn-/utdatalogg: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Slå på støtte for sudoers-nettgruppe" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Kontroller skrivetillatelse til foreldermapper ved redigering av filer med sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Følg symbolske lenker ved redigering av filer med sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Spør gruppetillegget om ukjente systemgrupper" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Kontroller nettgrupper basert på både bruker, vert og domene" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Tillat kjøring av kommandoer selv om sudo ikke klarer å skrive til revisjonslogg" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Tillat kjøring av kommandoer selv om sudo ikke klarer å skrive til I/O-logg" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Tillat kjøring av kommandoer selv om sudo ikke klarer å skrive til loggfil" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Slå opp grupper i sudoers på gruppe-ID i stedet for gruppenavn" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Loggoppføringer som er større enn dette blir delt opp i flere syslog-meldinger" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Loggoppføringer som er større enn dette blir delt opp i flere syslog-meldinger: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Bruker som skal eie I/O-loggfiler: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Gruppe som skal eie I/O-loggfiler: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Filmodus for I/O-loggfiler: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Kjør kommandoer med fildeskriptor i stedet for sti: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignorer ukjente standardverdier i sudoers i stedet for å vise advarsel" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "TIdsavbrudd for kommando: %u sekunder" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "La bruker velge tidsavbrudd via kommandolinje" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Tøm inn- og utdata direkte til disk i stedet for å mellomlagre" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s: %d «%s» er en ukjent standardoppføring" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: «%s» er en ukjent standardoppføring" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s: %d «%s» har ingen verdi" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: «%s» har ingen verdi" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d verdier av «%s» må begynne med «/»" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: verdier av «%s» må begynne med «/»" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d «%s» kan ikke ha en verdi" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: «%s» kan ikke ha en verdi" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d Defaults-type 0x%x for valget «%s» er ugyldig" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: Defaults-type 0x%x for valget «%s» er ugyldig" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d «%s» er en ugyldig verdi for valget «%s»" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: verdien «%s» er ugyldig valget «%s»" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "intern feil: %s er full" @@ -941,15 +993,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp er korrupt (lengde samsvarer ikke)" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "klarte ikke å bygge opp miljøet på nytt" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "du har ikke tillatelse til å bestemme følgende miljøvariabler: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "behandlingstype %d for %s støttes ikke" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: lesefeil" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -989,82 +1053,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Lokale par av IP-adresser og nettverksmasker:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s finnes, men er ikke en mappe (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "klarte ikke å utføre mkdir %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "klarte ikke å endre %s modus til 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "%s er en ukjent gruppe" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "klarte ikke å åpne %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "klarte ikke å lese %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "klarte ikke å skrive til %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "klarte ikke å opprette %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "klarte ikke å skrive til I/O-loggfil: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: intern feil. Filindeks %d er ikke åpent" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: portnummeret er for stort" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "LDAP-ens adressetype %s støttes ikke" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "du kan ikke blande ldap- og ldaps-nettadresser" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "starttls støttes ikke når du bruker ldaps" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "klarte ikke å starte opp database for SSL-sertifikater og -nøkler. %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "du må velge TLS_CERT i %s for å bruke SSL" @@ -1082,7 +1152,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1091,7 +1161,7 @@ "\n" "LDAP-rolle: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1100,27 +1170,27 @@ "\n" "LDAP-role: UKJENT\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Sorter: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Kommandoer:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "klarte ikke å starte opp LDAP. %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls er valgt, men LDAP-bibliotekene støtter hverken «ldap_start_tls_s()» eller «ldap_start_tls_s_np()»" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "«%s» er en ugyldig sudoOrder-attributt" @@ -1198,15 +1268,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Brukeren %s har ikke tillatelse til å kjøre «%s%s%s» som %s%s%s på %s.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: fant ikke kommando" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1254,38 +1324,28 @@ msgid "unable to execute %s: %m" msgstr "klarte ikke å kjøre %s. %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "behandlingstype %d for %s støttes ikke" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: lesefeil" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "behandlingen for %s (%s) er ikke i %s-skjemaet" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "klarte ikke å lage statistikk av %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "tolkningsfeil i %s ved linje %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "tolkningsfeil i %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1294,41 +1354,41 @@ "\n" "Oppføring i sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " Kjør som-brukere: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " Kjør som-grupper: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Valg: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "klarte ikke å tolke nettverksadresse-liste" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "klarte ikke å kjøre %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers regeltillegg versjon %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-grammatikkversjon %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1337,22 +1397,22 @@ "\n" "Sti til «sudoers»-fil: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "Sti til «nsswitch»: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "Sti til «ldap.conf»: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "Stil til «ldap.secret»: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "klarte ikke å tildele krok av typen %d (versjon %d.%d)" @@ -1421,48 +1481,48 @@ msgid "unable to parse gids for %s" msgstr "klarte ikke å tolke gid-er for %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "perm-stabelen er full" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "perm-stabelen er tom" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "klarte ikke å endre gid til rotbruker" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "klarte ikke å endre til kjør som-gid" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "klarte ikke å velge «kjør som»-gruppevektor" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "klarte ikke å endre uid til «kjør som»-bruker" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "klarte ikke å endre gid til sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "for mange prosesser" @@ -1495,7 +1555,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "fant ikke symbolet «%s» i %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1504,7 +1564,7 @@ "\n" "SSSD-rolle: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1533,84 +1593,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Brukeren %s har ikke tillatelse til å kjøre sudo på %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "klarte ikke å laste inn standardverdier for sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "det har oppstått et problem med én eller flere standardoppføringer" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "fant ingen gyldig sudoers-kilde. Avslutter." -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers-fil tillater ikke rotbruker å kjøre sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "du har ikke tillatelse til å bruke valget «-C»" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "eier («%s») av tidsstempel finnes ikke" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "du må ha en tty for å kunne kjøre sudo" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "kommando i gjeldende mappe" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "du har ikke tillatelse til å velge tidsavbrudd for kommandoer" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "du har ikke tillatelse til å beholde brukermiljøet" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "kommandoen er for lang" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s er ikke en vanlig fil" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s eies av uid %u, som skulle vært %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s kan overskrives av alle" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s eies av gid %u, som skulle vært %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "du må være rotbruker for å velge «-c %s»" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "innloggingsklasse %s er ukjent" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "klarte ikke å slå opp vertsnavn %s" @@ -1630,7 +1694,7 @@ msgid "invalid speed factor: %s" msgstr "%s er en ugyldig hastighetsfaktor" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s versjon %s\n" @@ -1786,11 +1850,11 @@ " -s, --speed=num øk eller senk utskriftshastigheten\n" " -V, --version vis versjon og avslutt" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tvert samsvarer ikke" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1798,7 +1862,7 @@ "\n" "Kommando tillatt" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1806,7 +1870,7 @@ "\n" "Kommandoen tillates ikke" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1814,129 +1878,124 @@ "\n" "Kommandoen samsvarer ikke" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s kan overskrives av gruppa den tilhører" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "klarte ikke å korte ned tidsstempel-fil til %lld byte" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "klarte ikke å lese klokka" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "tidsstempel for fremtidig tidspunkt blir ignorert" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tidsstempelet er for langt inn i fremtiden: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "klarte ikke å låse tidsstempel-fil %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "filsti for moralpreken-status («%s/%s») er for lang" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s gramatikkversjon %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "trykk linjeskift for å redigere %s: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "finner ikke valgt redigeringsprogram (%s)" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "fant ingen redigeringsprogram («editor»-sti = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "skrivefeil" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "klarte ikke å undersøke midlertidig fil (%s). %s er ikke endret" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "midlertidig fil (%s) er tom. %s er ikke endret" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "noe gikk galt med behandleren (%s). %s er ikke endret" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s er ikke endret" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "klarte ikke å åpne midlertidig fil (%s) på nytt. %s er ikke endret" -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "klarte ikke å tolke midlertidig fil (%s). Ukjent feil" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "intern feil: fant ikke %s i lista!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "klarte ikke å endre uid og gid for %s til (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "klarte ikke å endre %s modus til 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s og %s er ikke på samme filsystem. Bruker «mv» til å gi nye navn" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "kommando mislyktes. «%s %s %s». %s er ikke endret" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "klarte ikke å gi %s nytt navn. %s er ikke endret" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Hva nå? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1948,62 +2007,72 @@ " (x) avslutt uten å lagre endringer i sudoers-fil\n" " (Q) avslutt og lagre endringene i sudoers-fil (FARLIG!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "klarte ikke å kjøre %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: feil eier. uid og gid skulle vært «%u, %u»\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: feil tillatelsesmodus. Skulle vært modus 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "klarte ikke å tolke %s. Ukjent feil" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "tolkefeil i %s ved linje %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "tolkefeil i %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: lest og tolket OK\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s er opptatt. Prøv igjen senere" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Feil: %s:%d sløyfe i %s «%s»" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Advarsel: %s:%d sløyfe i %s «%s»" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d sløyfe i %s «%s»" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Feil: %s:%d referanse til %s «%s», som ikke er definert" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d referanse til %s «%s», som ikke er definert" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Advarsel: %s:%d referanse til %s «%s», som ikke er definert" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d %s «%s» står ubrukt" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Advarsel: %s:%d %s «%s» står ubrukt" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2012,7 +2081,7 @@ "%s - rediger sudoers-fil på en trygg måte\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2034,17 +2103,17 @@ " -V, --version vis versjon og avslutt\n" " -x, --export=utdatafil skriv sudoers i JSON-format til valgt utdatafil" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "forvalg «%s» er ukjent" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: inndata- og utdatafiler må være ulike" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "du har for mange nivåer av inkluderte filer" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/pl.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/pl.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/pl.po sudo-1.8.20p2/plugins/sudoers/po/pl.po --- sudo-1.8.19p1/plugins/sudoers/po/pl.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/pl.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,13 @@ # Polish translation for sudo/sudoers. # This file is put in the public domain. -# Jakub Bogusz , 2011-2016. +# Jakub Bogusz , 2011-2017. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 20:31+0100\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 21:30+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -41,148 +41,172 @@ msgid "Sorry, try again." msgstr "Niestety, proszę spróbować ponownie." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "nie udało się przydzielić pamięci" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "skrót wymaga nazwy pliku" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "błędna wartość notbefore" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "błędna wartość notafter" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "wartość limitu czasu zbyt duża" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "błędna wartość limitu czasu" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -306,7 +330,7 @@ msgid "PAM authentication error: %s" msgstr "Błąd uwierzytelniania PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "nie istniejesz w bazie danych %s" @@ -400,536 +424,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "nieznany uid: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "nieznany użytkownik: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, 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 +#: plugins/sudoers/def_data.c:38 #, 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 +#: plugins/sudoers/def_data.c:42 #, 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 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Umieszczenie zachęty OTP we własnej linii" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Ignorowanie '.' w $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Wysyłanie listu zawsze przy uruchomieniu sudo" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Wysyłanie listu przy błędnym uwierzytelnieniu" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 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 +#: plugins/sudoers/def_data.c:66 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 +#: plugins/sudoers/def_data.c:70 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 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Wysyłanie listu jeśli użytkownik próbuje uruchomić polecenie" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 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:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Poinstruowanie użytkownika przy pierwszym uruchomieniu sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Plik zawierający instrukcję do sudo: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Domyślne wymaganie uwierzytelnienia przez użytkowników" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Możliwość uruchamiania sudo przez roota" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Logowanie nazwy hosta w pliku logu (niesyslogowym)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Logowanie roku w pliku logu (niesyslogowym)" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 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:103 +#: plugins/sudoers/def_data.c:110 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:107 +#: plugins/sudoers/def_data.c:114 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:111 +#: plugins/sudoers/def_data.c:118 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:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Wymaganie pełnych nazw hostów w pliku sudoers" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 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:123 +#: plugins/sudoers/def_data.c:130 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:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Honorowanie zmiennej środowiskowej EDITOR przez visudo" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 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:135 +#: plugins/sudoers/def_data.c:142 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:139 +#: plugins/sudoers/def_data.c:146 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:143 +#: plugins/sudoers/def_data.c:150 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:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Ustawianie zmiennych środowiskowych LOGNAME i USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 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:155 +#: plugins/sudoers/def_data.c:162 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:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Długość, na której zawijać linie logu (0 bez zawijania): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Limit czasu znacznika uwierzytelniania (w minutach): %.1f" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Limit czasu pytania o hasło (w minutach): %.1f" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Liczba prób wpisania hasła: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, 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:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Ścieżka do pliku logu: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Ścieżka do programu mail: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Flagi dla programu mail: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, 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:195 +#: plugins/sudoers/def_data.c:202 #, 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:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Temat wysyłanych listów: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Komunikat o błędnym haśle: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Ścieżka katalogu stanu instrukcji: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Ścieżka katalogu znaczników czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, 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:219 +#: plugins/sudoers/def_data.c:226 #, 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:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Domyślne pytanie o hasło: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 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:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Domyślny użytkownik do uruchamiania poleceń: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, 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:239 +#: plugins/sudoers/def_data.c:246 #, 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:243 +#: plugins/sudoers/def_data.c:250 #, 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:247 +#: plugins/sudoers/def_data.c:254 #, 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:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Wczytanie pustych funkcji exec zawartych w bibliotece sudo_noexec" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 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:259 +#: plugins/sudoers/def_data.c:266 #, 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:263 +#: plugins/sudoers/def_data.c:270 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:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Zezwolenie użytkownikom na ustawianie dowolnych zmiennych środowiskowych" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Wyczyszczenie środowiska do domyślnego zbioru zmiennych" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Zmienne środowiskowe do sprawdzania poprawności:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Zmienne środowiskowe do usunięcia:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Zmienne środowiskowe do zachowania:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, 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:291 +#: plugins/sudoers/def_data.c:298 #, 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:295 +#: plugins/sudoers/def_data.c:302 #, 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:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Ścieżka do pliku ograniczonego środowiska specyficznego dla sudo: %s" + +#: plugins/sudoers/def_data.c:310 #, 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:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Zezwolenie sudo na pytanie o hasło nawet gdyby miało być widoczne" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 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:311 +#: plugins/sudoers/def_data.c:322 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:315 +#: plugins/sudoers/def_data.c:326 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:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Logowanie wejścia użytkownika dla uruchamianych poleceń" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Logowanie wyjścia z uruchamianych poleceń" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Kompresja logów we/wy przy użyciu zliba" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Uruchamianie poleceń zawsze na pseudoterminalu" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Wtyczka do obsługi grup nieuniksowych: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Katalog do zapisu logów wejścia/wyjścia: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Plik do zapisu logu wejścia/wyjścia: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 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:351 +#: plugins/sudoers/def_data.c:362 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/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Zbiór dozwolonych uprawnień" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Zbiór ograniczonych uprawnień" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Uruchomienie poleceń na pseudoterminalu w tle" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Nazwa usługi PAM do użycia" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Nazwa usługi PAM do użycia dla powłok logowania" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Próba ustanowienia danych uwierzytelniających PAM dla użytkownika docelowego" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Utworzenie nowej sesji PAM dla uruchamianego polecenia" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksymalny numer sekwencji logu we/wy: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Włączenie obsługi grup sieciowych w sudoers" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Sprawdzanie katalogów nadrzędnych pod kątem możliwości zapisu przy edycji plików programem sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Podążanie za dowiązaniami symbolicznymi przy edycji programem sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Odpytanie wtyczki group pod kątem nieznanych grup systemowych" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Dopasowanie grup sieciowych w oparciu o całą krotkę: użytkownik, host i domena" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Zezwolenie na uruchamianie poleceń nawet jeśli sudo nie może pisać do logu audytowego" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Zezwolenie na uruchamianie poleceń nawet jeśli sudo nie może pisać do logu we/wy" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Zezwolenie na uruchamianie poleceń nawet jeśli sudo nie może pisać do pliku logu" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Rozwiązanie grup z sudoers i dopasowywanie po ID grupy zamiast nazwy" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Wpisy logu większe niż ta wartość będą dzielone na wiele wiadomości sysloga" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Wpisy logu większe niż ta wartość będą dzielone na wiele wiadomości sysloga: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Użytkownik, który będzie właścicielem plików logu we/wy: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupa, która będzie właścicielem plików logu we/wy: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Uprawnienia dla plików logu we/wy: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Uruchomienie poleceń poprzez deskryptor pliku zamiast ścieżki: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignorowanie nieznanych wpisów Defaults w sudoers zamiast ostrzeżenia" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Czas w sekundach, po którym polecenie będzie kończone: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Zezwolenie użytkownikowi na określenie limitu czasu z linii poleceń" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Natychmiastowy zrzut danych logu we/wy na dysk zamiast buforowania" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d: nieznany wpis domyślny \"%s\"" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: nieznany wpis domyślny \"%s\"" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d: nie podano wartości dla \"%s\"" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nie podano wartości dla \"%s\"" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d: wartości \"%s\" muszą zaczynać się od '/'" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: wartości \"%s\" muszą zaczynać się od '/'" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d: opcja \"%s\" nie przyjmuje wartości" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: opcja \"%s\" nie przyjmuje wartości" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d: błędny typ Defaults 0x%x dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: błędny typ Defaults 0x%x dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d: błędna wartość \"%s\" dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: błędna wartość \"%s\" dla opcji \"%s\"" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "błąd wewnętrzny, przepełnienie %s" @@ -938,15 +990,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: uszkodzone envp, niezgodność długości" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "nie udało się przebudować środowiska" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, 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/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "nieobsługiwany typ skrótu %d dla %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: błąd odczytu" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -986,82 +1050,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Pary lokalnych adresów IP i masek:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s istnieje, ale nie jest katalogiem (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "nie udało się wykonać mkdir %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, 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/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "nieznana grupa: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "nie udało się odczytać %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "nie udało się zapisać do %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "nie udało się utworzyć %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "nie udało się zapisać do pliku logu we/wy: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: błąd wewnętrzny, plik o indeksie %d nie jest otwarty" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port zbyt duży" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nieobsługiwany rodzaj URI LDAP: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "nie można mieszać URI ldap i ldaps" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "brak obsługi starttls w przypadku użycia ldaps" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, 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:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "aby używać SSL, trzeba ustawić TLS_CERT w %s" @@ -1079,7 +1149,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1088,7 +1158,7 @@ "\n" "Rola LDAP: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1097,27 +1167,27 @@ "\n" "Rola LDAP: NIEZNANA\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Porządek: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Polecenia:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "nie udało się zainicjować LDAP: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 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:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "błędny atrybut sudoOrder: %s" @@ -1195,15 +1265,15 @@ 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:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1252,38 +1322,28 @@ msgid "unable to execute %s: %m" msgstr "nie udało się wywołać %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "nieobsługiwany typ skrótu %d dla %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: błąd odczytu" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "skrót dla %s (%s) nie jest w postaci %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "nie udało się wykonać stat na %s" -#: plugins/sudoers/parse.c:114 +#: 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:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "błąd składni w %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1292,41 +1352,41 @@ "\n" "Wpis sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " Jako użytkownicy: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " Jako grupy: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Opcje: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "nie udało się przeanalizować listy adresów sieciowych" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "nie udało się wywołać %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Wersja wtyczki polityki sudoers %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Wersja gramatyki pliku sudoers %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1335,22 +1395,22 @@ "\n" "Ścieżka do sudoers: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "ścieżka do nsswitch: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "ścieżka do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "ścieżka do ldap.secret: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "nie udało się zarejestrować uchwytu typu %d (wersja %d.%d)" @@ -1419,48 +1479,48 @@ msgid "unable to parse gids for %s" msgstr "nie udało się przeanalizować gidów dla %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "przepełnienie stosu uprawnień" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "niedopełnienie stosu uprawnień" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "nie udało się zmienić na gid roota" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "nie udało się zmienić na docelowy gid" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "nie udało się ustawić wektora grup docelowych" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "nie udało się zmienić na docelowy uid" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "nie udało się zmienić na gid sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "zbyt dużo procesów" @@ -1493,7 +1553,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "nie udało się odnaleźć symbolu \"%s\" w %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1502,7 +1562,7 @@ "\n" "Rola SSSD: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1531,84 +1591,88 @@ 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:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "nie udało się zainicjować wartości domyślnych sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "problem z wpisami domyślnymi" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "nie znaleziono poprawnych źródeł sudoers, zakończenie" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "wg sudoers root nie ma prawa używać sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "brak uprawnień do używania opcji -C" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, 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:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "brak tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "niestety do uruchomienia sudo konieczny jest tty" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "polecenie w bieżącym katalogu" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "niestety brak uprawnień do ustawienia limitu czasu polecenia" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "niestety brak uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "polecenie zbyt długie" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, 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:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, 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:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "tylko root może używać \"-c %s\"" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "nieznana klasa logowania: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "nie udało się rozwiązać nazwy hosta %s" @@ -1628,7 +1692,7 @@ msgid "invalid speed factor: %s" msgstr "błędny współczynnik szybkości: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s wersja %s\n" @@ -1784,11 +1848,11 @@ " -s, --speed=ile przyspieszenie lub spowolnienie wyjścia\n" " -V, --version wyświetlenie informacji o wersji i zakończenie" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\thost nie znaleziony" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1796,7 +1860,7 @@ "\n" "Polecenie dozwolone" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1804,7 +1868,7 @@ "\n" "Polecenie niedozwolone" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1812,129 +1876,124 @@ "\n" "Polecenie nie znalezione" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s jest zapisywalny dla groupy" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "nie udało się uciąć pliku znacznika czasu do długości %lld" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "nie udało się odczytać zegara" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "znacznik czasu zbyt daleko w przyszłości" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "znacznik czasu zbyt daleko w przyszłości: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "nie udało się zablokować pliku znacznika czasu %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "ścieżka stanu instrukcji zbyt długa: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s, wersja gramatyki %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "wciśnięcie return przejdzie do edycji %s: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "podany edytor (%s) nie istnieje" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "nie znaleziono edytora (ścieżka = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "błąd zapisu" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, 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:520 +#: plugins/sudoers/visudo.c:521 #, 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:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "błąd edytora (%s), %s nie zmieniony" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s nie zmieniony" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, 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:619 +#: plugins/sudoers/visudo.c:620 #, 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:656 +#: plugins/sudoers/visudo.c:657 #, 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:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "nie udało się ustawić (uid, gid) %s na (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, 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:748 +#: plugins/sudoers/visudo.c:749 #, 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:762 +#: plugins/sudoers/visudo.c:763 #, 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:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "błąd podczas zmiany nazwy %s, %s nie zmieniony" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Co teraz? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1946,62 +2005,72 @@ " (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:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: błędny właściciel, (uid, gid) powinny wynosić (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, 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:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, 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:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, 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:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "błąd składni w %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: składnia poprawna\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s zajęty, proszę spróbować później" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Błąd: %s:%d: cykl w %s \"%s\"" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Uwaga: %s:%d: cykl w %s \"%s\"" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d: cykl w %s \"%s\"" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Błąd: %s:%d: %s \"%s\" użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d: %s \"%s\" użyty, ale nie zdefiniowany" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Uwaga: %s:%d: %s \"%s\" użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d: nie użyty %s \"%s\"" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Uwaga: %s:%d: nie użyty %s \"%s\"" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2010,7 +2079,7 @@ "%s - bezpieczna edycja pliku sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2032,16 +2101,16 @@ " -V, --version wyświetlenie informacji o wersji i zakończenie\n" " -x, --export=plik_wyjściowy zapis danych sudoers w formacie JSON do pliku" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "nieznany wpis domyślny \"%s\"" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: pliki wejściowy i wyjściowy muszą być różne" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "za dużo poziomów include" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/pt_BR.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/pt_BR.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/pt_BR.po sudo-1.8.20p2/plugins/sudoers/po/pt_BR.po --- sudo-1.8.19p1/plugins/sudoers/po/pt_BR.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/pt_BR.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,14 @@ # Brazilian Portuguese translation of sudoers. +# Traduções em português brasileiro para o pacote sudoers # This file is distributed under the same license as the sudo package. -# Copyright (C) 2016 Free Software Foundation, Inc. -# Rafael Fontenelle , 2013, 2014, 2015, 2016. +# Copyright (C) 2017 Free Software Foundation, Inc. +# Rafael Fontenelle , 2013, 2014, 2015, 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 08:58-0200\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 16:17-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -42,148 +43,172 @@ msgid "Sorry, try again." msgstr "Sinto muito, tente novamente." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "não foi possível alocar memória" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "um digest requer um nome de caminho" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "valor de notbefore inválido" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "falha de notafter inválido" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "valor de timeout grande demais" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "valore de timeout inválido" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -307,7 +332,7 @@ msgid "PAM authentication error: %s" msgstr "Erro de autenticação PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "você não existe no banco de dados de %s" @@ -401,538 +426,566 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "uid desconhecido: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "usuário desconhecido: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Facilidade do syslog, se syslog estiver sendo usado para registrar logs: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Prioridade do syslog para usar quando um usuário autenticar com sucesso: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Prioridade do syslog para usar quando um usuário não usuário autenticar com sucesso: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Colocar prompt OTP na sua própria linha" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Ignorar \".\" no $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Sempre envia correio quando sudo for executado" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Envia correio se a autenticação de um usuário falhar" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Envia correio se o usuário não estiver no sudoers" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Envia correio se o usuário não estiver no sudoers desta máquina" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Envia correio se o usuário não tiver permissão para executar um comando" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Envia correio se o usuário tentar executar um comando" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa uma marca de tempo separada para cada combo usuário/tty" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Instrui o usuário na primeira vez que ele executar sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Arquivo contendo as instruções do sudo: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Exige que os usuários se autentiquem, por padrão" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Root pode executar sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Registra o nome da máquina no arquivo de log (não-syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Registra o ano no arquivo de log (não-syslog)" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo for chamado sem argumentos, inicia um shell" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Define $HOME com o usuário alvo ao iniciar um shell com -s" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Sempre define $HOME para a pasta pessoal do usuário alvo" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Permite juntar algumas informações para fornecer mensagens de erro úteis" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Exige nomes de máquina completos (FQDN) no arquivo sudoers" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Insulta o usuário quando ele digitar uma senha incorreta" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Permite que o usuário execute sudo apenas se ele tiver um tty" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo vai honrar a variável de ambiente EDITOR" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Pede a senha do root, e não a do usuário" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Pede a senha do usuário runas_default, e não a do usuário" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Pede a senha do usuário alvo, e não a do usuário" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Aplica o padrão na classe de login do usuário alvo, se houver alguma" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Define as variáveis de ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Define o uid efetivo apenas para o usuário alvo, e não o uid real" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Não inicializa o vetor de grupos para aquele usuário alvo" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Comprimento da quebra de linha do arquivo de log (0 para sem quebra): %u" # "Limite de tempo da marca de tempo de autenticação" ficaria estranho, então utilizei "... expira em" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Marca de tempo de autenticação expira em: %.1f minutos" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Pedido de senha expira em: %.1f minutos" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Número de tentativas para digitar senha: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask a ser usada ou 0777 para usar do usuário: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Caminho para o arquivo de log: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Caminho para o programa de correio: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Opções para o programa de correio: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Endereço para onde enviar correio: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Endereço de onde enviar correio: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Linha do assunto para as mensagens de correio: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Mensagem de senha incorreta: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Caminho para o diretório de status de instruções: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Caminho para diretório de marca de tempo de autenticação: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Dono do diretório de marca de tempo de autenticação: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Usuários neste grupo estão eximidos da exigência de senha e PATH: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Pedido de senha padrão: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se definido, o pedido de senha vai sobrescrever o do sistema em todos os casos." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Usuário padrão para se executar comandos: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valor para sobrescrever o $PATH do usuário: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Caminho do editor a ser usado pelo visudo: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quando exigir uma senha para o pseudo-comando \"list\": %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quando exigir uma senha para o pseudo-comando \"verify\": %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Pré-carrega as funções de exec de teste contidas na biblioteca sudo_noexec" # ideia da frase original: se acontecer algo, se deve ou não ignorar. Traduzi reorganizando a frase com a finalidade de manter a ideia original. -- Rafael -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Estando o diretório LDAP disponível, se devemos ignorar o arquivo sudoers local" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Descritores, de arquivos, >= %d serão fechados antes de executar um comando" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Se definido, usuários podem sobrescrever o valor de \"closefrom\" com a opção -C" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Permite que usuários definam variáveis de ambiente arbitrárias" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Redefine o ambiente para um conjunto padrão de variáveis" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Variáveis de ambiente nas quais deve-se verificar sanidade:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Variáveis de ambiente para remover:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Variáveis de ambiente para preservar:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Papel SELinux para usar no novo contexto de segurança: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Tipo SELinux para usar no novo contexto de segurança: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Caminho do arquivo de ambiente específico do sudo: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Caminho do arquivo restrito de ambiente específico do sudo: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Localização para usar ao analisar o sudoers: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Permite ao sudo solicitar uma senha mesmo se ele estiver visível" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Fornece feedback visual na solicitação de senha quando houver entrada do usuário" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Usa um englobamento mais rápido que é menos preciso, mas não acessa o sistema de arquivos" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "O umask especificado no sudoers vai sobrescrever o do usuário, mesmo se ele foi mais permissivo" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Registra no log a entrada do usuário para o comando sendo executado" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Registra no log a saída do comando sendo executado" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Comprime logs I/O usando zlib" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Sempre executa comandos em um pseudo-tty" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plug-in para suporte a grupo não-Unix: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Diretório no qual devem ser armazenados os logs de entrada/saída: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Arquivo no qual deve ser armazenado o log de entrada/saída: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Adiciona uma entrada ao arquivo utmp/utmpx ao alocar um pty" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Define o usuário em utmp como usuário a ser executado como, e não o usuário a ser chamado" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Conjunto de privilégios permitidos" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Conjunto de privilégios limitados" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Executa comandos em um pty em plano de fundo" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Nome do serviço PAM para usar" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Nome do serviço PAM para usar para shells de login" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Tenta estabelecer as credenciais PAM para o usuário alvo" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Cria uma nova sessão PAM para o comando ser executado nela" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Número máximo de sequência de log de E/S: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Habilita suporte a netgroup no sudoers" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Verifica diretórios pai para capacidade de gravação ao editar arquivos com sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Segue links simbólicos ao editar arquivos com sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Consulta o plug-in de grupo por grupos de sistema desconhecidos" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Compara netgroups baseada em toda tupla: usuário, máquina e domínio" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Permite comandos serem executados mesmo se sudo não puder escrever em logs de auditoria" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Permite comandos serem executados mesmo se sudo não puder escrever em logs de E/S" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Permite comandos serem executados mesmo se sudo não puder escrever no arquivo de log" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Resolve grupos no sudoers e corresponde ao ID de grupo, e não o nome" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Entradas de log maiores que este valor serão divididos em múltiplas mensagens de syslog" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Entradas de log maiores que este valor serão divididos em múltiplas mensagens de syslog: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Usuário que será dono dos arquivos de log de E/S: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupo que será dono dos arquivos de log de E/S: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Modo de arquivo usado para os arquivos de log de E/S: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Executa comandos pelo descritor de arquivo em vez de pelo caminho: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ignora entradas desconhecidas de Defaults no sudoers em vez de produzir um aviso" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Tempo em segundos após o qual o comando será terminado: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Permite o usuário especificar um tempo limite na linha de comando" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Descarrega os dados de log de E/S para o disco imediatamente em vez de armazenar no buffer" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d entrada padrão \"%s\" desconhecida" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: entrada padrão \"%s\" desconhecida" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d nenhum valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nenhum valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d valores para \"%s\" devem iniciar com um \"/\"" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: valores para \"%s\" devem iniciar com um \"/\"" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d opção \"%s\" não leva um valor" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: opção \"%s\" não leva um valor" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d Tipo de padrões 0x%x inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: Tipo de padrões 0x%x inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d valor \"%s\" é inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: valor \"%s\" é inválido para a opção \"%s\"" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, estouro de pilha de %s" @@ -941,15 +994,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corrompido, cumprimento não confere" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "não foi possível recompilar o ambiente" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "sinto muito, você não tem permissão para definir as seguintes variáveis de ambiente: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "tipo de digest %d sem suporte para %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: erro de leitura" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -989,82 +1054,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Par de endereço IP e máscara de rede locais:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existe, mas não é um diretório (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "não foi possível fazer mkdir %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "não foi possível alterar modo de %s para 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "grupo desconhecido %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "não foi possível abrir %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "não foi possível ler %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "não foi possível gravar em %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "não foi possível criar %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "não foi possível gravar no arquivo de log de E/S: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: erro interno, o índice de arquivo %d não está aberto" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: porta muito grande" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipo de uri LDAP sem suporte: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "não foi possível misturar ldap e ldaps URIs" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "sem suporte a starttls ao usar ldaps" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "não foi possível inicializar bando de dados de chaves e certificados SSL: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "você deve definir TLS_CERT em %s para usar SSL" @@ -1082,7 +1153,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1091,7 +1162,7 @@ "\n" "Papel LDAP: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1100,27 +1171,27 @@ "\n" "Papel LDAP: DESCONHECIDO\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Ordem: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Comandos:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "não foi possível inicializar LDAP: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls especificado, mas bibliotecas LDAP não possuem suporte a ldap_start_tls_s() ou ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atributo sudoOrder inválido: %s" @@ -1198,15 +1269,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Sinto muito, usuário %s não tem permissão para executar \"%s%s%s\" como %s%s%s em %s.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1254,38 +1325,28 @@ msgid "unable to execute %s: %m" msgstr "não foi possível executar %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "tipo de digest %d sem suporte para %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: erro de leitura" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "digest de %s (%s) não está na forma %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "não foi possível obter o estado de %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "erro de análise em %s próximo à linha %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "erro de análise em %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1294,41 +1355,41 @@ "\n" "Entradas no sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " UsuáriosRunAs: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " GruposRunAs: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Opções: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "não foi possível analisar a lista de endereços de rede" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versão de plug-in de política do sudoers %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versão de gramática de arquivo do sudoers %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1337,22 +1398,22 @@ "\n" "Caminho do sudoers: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "caminho do nsswitch: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "caminho do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "caminho do ldap.secret: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "não foi possível registrar hook do tipo %d (versão %d.%d)" @@ -1421,48 +1482,48 @@ msgid "unable to parse gids for %s" msgstr "não foi possível analisar os gids de %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "estouro da pilha de permissões" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "esvaziamento da pilha de permissões" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "não foi possível alterar gid de root" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "não foi possível alterar para gid de \"runas\"" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "não foi possível definir vetor de grupo de \"runas\"" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "não foi possível alterar para uid de \"runas\"" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "não foi possível alterar para gid de sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "processos demais" @@ -1495,7 +1556,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "não foi possível localizar símbolo \"%s\" em %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1504,7 +1565,7 @@ "\n" "Papel SSSD: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1533,84 +1594,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Usuário %s não tem permissão para executar sudo em %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "não foi possível inicializar valores padrões do sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "problema com o entradas padrão" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "nenhuma fonte de sudoers válida encontrada; saindo" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers especifica que o root não tem permissão para usar sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "você não tem permissão para usar a opção -C" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "dono da marca de tempo (%s): Usuário inexistente" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "nenhum tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "sinto muito, você deve ter um tty para executar sudo" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "comando no diretório atual" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "sinto muito, você não tem permissão para definir um tempo limite de comando" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "sinto muito, você não tem permissão para preservar o ambiente" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "comando muito grande" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s não é um arquivo comum" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s tem como dono o uid %u, deveria ser %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s é gravável globalmente" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s tem como dono o gid %u, deveria ser %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "apenas o root pode usar \"-c %s\"" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "classe de login desconhecida: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "não foi possível resolver máquina %s" @@ -1630,7 +1695,7 @@ msgid "invalid speed factor: %s" msgstr "fator de velocidade inválido: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s versão %s\n" @@ -1790,11 +1855,11 @@ " -s, --speed=número aumenta ou diminui a velocidade da saída\n" " -V, --version exibe a informação da versão e sai" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tmáquina sem correspondente" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1802,7 +1867,7 @@ "\n" "Comando permitido" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1810,7 +1875,7 @@ "\n" "Comando negado" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1818,129 +1883,124 @@ "\n" "Comando sem correspondente" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s é gravável pelo grupo" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "não foi possível truncar o arquivo de marca de tempo para %lld bytes" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "não foi possível ler do relógio" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ignorado marca de tempo no futuro" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "marca de tempo muito a frente no futuro: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "não foi possível travar o arquivo de marca de tempo %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "caminho de status de instruções muito longo: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "gramática de %s versão %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "pressione enter para editar %s: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "editor especificado (%s) não existe" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "nenhum editor encontrado (caminho do editor = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "erro de escrita" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "não foi possível obter estado de arquivo temporário (%s), %s sem alteração" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "arquivo de temporário (%s) com comprimento zero, %s sem alteração" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s sem alteração" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "não foi possível reabrir arquivo temporário (%s), %s sem alteração." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "não foi possível analisar arquivo temporário (%s), erro desconhecido" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "erro interno, não foi possível localizar %s na lista!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "não foi possível definir (uid, gid) de %s para (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "não foi possível alterar modo de %s para 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s e %s não estão no mesmo sistema de arquivos, usando mv para renomear" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando \"%s %s %s\" falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "erro ao renomear %s, %s sem alteração" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Agora o que? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1952,62 +2012,72 @@ " e(x)it - sair sem salvar alterações no arquivo sudoers\n" " (Q)uit - sair e salvar alterações no arquivo sudoers (PERIGO!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: dono (uid, gid) incorreto; deveria ser (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permissões incorretas; deveria estar no modo 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "falha em analisar o arquivo %s, erro desconhecido" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "erro de análise em %s perto da linha %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "erro de análise em \"%s\"\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: análise OK\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s ocupado, tente novamente" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Erro: %s:%d ciclo em %s \"%s\"" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Aviso: %s:%d ciclo em %s \"%s\"" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d ciclo em %s \"%s\"" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Erro: %s:%d %s \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d %s \"%s\" referenciado, mas não definido" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Aviso: %s:%d %s \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d %s não usado \"%s\"" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Aviso: %s:%d %s não usado \"%s\"" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2016,7 +2086,7 @@ "%s - edita o arquivo sudoers com segurança\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2038,17 +2108,17 @@ " -V, --version exibe a informação da versão e sai\n" " -x, --export=arq_saída exporta o sudoers no formato JSON para arq_saída" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "entrada padrão \"%s\" desconhecido" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: arquivos de entrada e saída devem ser diferentes" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "níveis de inclusões demais" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/sr.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/sr.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/sr.po sudo-1.8.20p2/plugins/sudoers/po/sr.po --- sudo-1.8.19p1/plugins/sudoers/po/sr.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/sr.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,12 +1,12 @@ # Serbian translation for sudoers. # This file is put in the public domain. -# Мирослав Николић , 2014—2016. +# Мирослав Николић , 2014—2017. msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.19b1\n" +"Project-Id-Version: sudoers-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-12-04 16:21+0200\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-05-07 14:39+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -40,44 +40,47 @@ msgid "Sorry, try again." msgstr "Извините, покушајте поново." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:617 -#: plugins/sudoers/defaults.c:872 plugins/sudoers/defaults.c:1021 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3547 plugins/sudoers/ldap.c:3563 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:184 -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:467 -#: plugins/sudoers/logging.c:679 plugins/sudoers/logging.c:937 -#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:535 -#: plugins/sudoers/match.c:572 plugins/sudoers/match.c:770 -#: plugins/sudoers/match.c:828 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 @@ -86,102 +89,123 @@ #: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 #: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 #: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 -#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sssd.c:1234 plugins/sudoers/sssd.c:1248 -#: plugins/sudoers/sssd.c:1264 plugins/sudoers/sudoers.c:261 -#: plugins/sudoers/sudoers.c:271 plugins/sudoers/sudoers.c:279 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:658 -#: plugins/sudoers/sudoers.c:773 plugins/sudoers/sudoers.c:817 -#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:216 plugins/sudoers/testsudoers.c:233 -#: plugins/sudoers/timestamp.c:374 plugins/sudoers/timestamp.c:410 -#: plugins/sudoers/timestamp.c:826 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 #: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:309 -#: plugins/sudoers/visudo.c:315 plugins/sudoers/visudo.c:446 -#: plugins/sudoers/visudo.c:624 plugins/sudoers/visudo.c:964 -#: plugins/sudoers/visudo.c:1030 plugins/sudoers/visudo.c:1074 -#: plugins/sudoers/visudo.c:1171 plugins/sudoers/visudo_json.c:1035 toke.l:832 -#: toke.l:932 toke.l:1090 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "зборник захтева назив путање" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "неисправна вредност не-пре" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "неисправна вредност не-после" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "вредност временског истека је превелика" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "неисправна вредност временског ограничења" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:617 plugins/sudoers/defaults.c:872 -#: plugins/sudoers/defaults.c:1021 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3546 -#: plugins/sudoers/ldap.c:3562 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 -#: plugins/sudoers/logging.c:184 plugins/sudoers/logging.c:446 -#: plugins/sudoers/logging.c:467 plugins/sudoers/logging.c:937 -#: plugins/sudoers/match.c:500 plugins/sudoers/match.c:534 -#: plugins/sudoers/match.c:572 plugins/sudoers/match.c:770 -#: plugins/sudoers/match.c:827 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:97 -#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 -#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 -#: plugins/sudoers/policy.c:278 plugins/sudoers/policy.c:287 -#: plugins/sudoers/policy.c:326 plugins/sudoers/policy.c:336 -#: plugins/sudoers/policy.c:345 plugins/sudoers/policy.c:354 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/set_perms.c:356 -#: plugins/sudoers/set_perms.c:695 plugins/sudoers/set_perms.c:1054 -#: plugins/sudoers/set_perms.c:1350 plugins/sudoers/set_perms.c:1514 -#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 -#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 -#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 -#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1053 -#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1248 -#: plugins/sudoers/sssd.c:1264 plugins/sudoers/sudoers.c:261 -#: plugins/sudoers/sudoers.c:271 plugins/sudoers/sudoers.c:279 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:658 -#: plugins/sudoers/sudoers.c:773 plugins/sudoers/sudoers.c:817 -#: plugins/sudoers/sudoers_debug.c:106 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:216 plugins/sudoers/testsudoers.c:233 -#: plugins/sudoers/timestamp.c:374 plugins/sudoers/timestamp.c:410 -#: plugins/sudoers/timestamp.c:826 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:309 -#: plugins/sudoers/visudo.c:315 plugins/sudoers/visudo.c:446 -#: plugins/sudoers/visudo.c:624 plugins/sudoers/visudo.c:964 -#: plugins/sudoers/visudo.c:1030 plugins/sudoers/visudo.c:1074 -#: plugins/sudoers/visudo.c:1171 plugins/sudoers/visudo_json.c:1035 toke.l:832 -#: toke.l:932 toke.l:1090 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 +#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 +#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -305,7 +329,7 @@ msgid "PAM authentication error: %s" msgstr "Грешка ПАМ потврђивања идентитета: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "ви не постојите у бази подтака „%s“" @@ -399,536 +423,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:694 plugins/sudoers/sudoers.c:736 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "непознат јиб: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1125 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "непознат корисник: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Помоћник сисдневника ако је сисдневник коришћен за пријављивање: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Приоритет системског дневника за коришћење када корисник успешно потврди идентитет: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Приоритет системског дневника за коришћење када корисник неуспешно потврди идентитет: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Поставља ОТП упит на свом реду" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Занемарује . у $ПУТАЊИ" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Увек шаље пошту када је судо покренут" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Пошаљи поруку ако потврђивање идентитета корисника не успе" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Пошаљи поруку ако корисник није у судоерсу" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Пошаљи поруку ако корисник није у судоерсу за овог домаћина" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Пошаљи поруку ако кориснику није дозвољено да покрене наредбу" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Пошаљи поруку ако корисник покуша да покрене наредбу" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Користи одвојене временске ознаке за сваку комбинацију корисник/конзола" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Подучава корисника када први пут покрену судо" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Датотека садржи судо обучавања: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Захтева да корисници потврде идентитет по основи" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Администратор може да покрене судо" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Бележи назив домаћина у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Бележи годину у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Ако је судо призван без аргумената, покреће шкољку" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Подешава $HOME на крајњег корисника када покреће шкољку са „-s“" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Увек подешава $HOME на циљни лични директоријум корисника" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Дозвољава прикупљање неких података да би дао корисне поруке грешака" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Захтева потпуно одређене називе домаћина у датотеци судоерса" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Вређа корисника када унесе нетачну лозинку" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозвољава кориснику да покрене судо само ако има конзолу" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Висудо ће поштовати променљиву окружења УРЕЂИВАЧА" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Тражи администраторову лозинку, а не корисника" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Тражи корисникову лозинку покреникао_основни, а не корисника" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Тражи корисникову лозинку мете, а не корисника" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Примењује основности у циљни кориснички разред пријављивања ако постоји" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Подешава променљиве окружења НАЗИВДНЕВНИКА и КОРИСНИК" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Подешава само ефективни јиб на крајњег корисника, а не стваран јиб" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Не покреће вектор групе ка оном крајњег корисника" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Дужина за преламање редова у датотеци дневника (0 — без преламања): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Време истека временске ознаке потврђивања идентитета: %.1f минута" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Време истека упита лозинке: %.1f минута" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Број покушаја за уношење лозинке: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Умаска за коришћење или 0777 за коришћење корисника: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Путања до датотеке дневника: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Путања до програма поште: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Опције за програм поште: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса на коју послати поруку: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса са које послати поруку: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Ред теме за поруке поште: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Порука нетачне лозинке: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Путања до директоријума стања обучавања: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Путања до директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Корисницима у овој групи се не захтева лозинка и ПУТАЊА: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Основни упит лозинке: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Ако је подешено, упит лозинке ће преписати системски упит у свим случајевима." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Основни корисник за покретање наредби као: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Вредност за преписивање корисничке $ПУТАЊЕ са: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Путања до уређивача кога ће да користи висудо: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „list“: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „verify“: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Унапред учитава лажне функције извршавања које се налазе у библиотеци „sudo_noexec“" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Ако је ЛДАП директоријум изнет, да ли занемарујемо месну датотеку судоерса" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Описници датотека >= %d ће бити затворени пре извршавања наредбе" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Ако је подешено, корисници могу да препишу вредност „closefrom“ са опцијом „-C“" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Дозвољава корисницима да подесе произвољне променљиве окружења" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Враћа окружење на основни скуп променљивих" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Променљиве окружења за проверу исправности:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Променљиве окружења за уклањање:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Променљиве окружења за очување:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "СЕЛинукс улога за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "СЕЛинукс врста за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Путања до судо-посебне датотеке окружења: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Путања до ограничене судо-посебне датотеке окружења: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Језк за коришћење при обради судоерса: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозвољава да судо тражи лозинку чак и ако би била видљива" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Обезбеђује видну повратну поруку при тражењу лозинке када постоји унос корисника" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Користи брже упоређивање које је мање тачно али не приступа систему датотека" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Умаска наведена у судоерсима ће преписати корисникову, чак и ако има већа овлашћења" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Бележи корисников улаз за покренуту наредбу" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Бележи излаз покренуте наредбе" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Пакује У/И дневнике користећи злиб" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Увек покреће наредбе у привидној конзоли" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Прикључак за подршку не-Јуникс групе: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Директоријум за смештај улазних/излазних дневника: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Датотека за смештај улазно/излазног дневника: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додаје унос у датотеку „utmp/utmpx“ када додељује „pty“" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Подешава корисника у „utmp“-у на корисника покрени-као, не призивајући корисника" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Скуп допуштених повластица" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Скуп повластица ограничења" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Покреће наредбе у позадини на назовитерминалу" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Назив ПАМ услуге за коришћење" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Назив ПАМ услуге за шкољке пријављивања" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Покушава да успостави ПАМ пуномоћства за циљног корисника" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Прави нову ПАМ сесију за покретање наредбе" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Највећи број низа У/И дневника: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Укључује подршку нетгрупе судоерса" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Проверава родитељски директоријум за уписивошћу када уређује датотеке са „sudoedit“" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Прати симболичке везе када уређује датотеке са „sudoedit“" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Пропитује прикључак групе за непознатим групама система" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Упоређује мрежне групе на основу читавог слога: корисник, домаћин и домен" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Допушта покретање наредби чак и ако судо не може да пише у дневник прегледа" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Допушта покретање наредби чак и ако судо не може да пише у дневник У/И" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Допушта покретање наредби чак и ако судо не може да пише у датотеку дневника" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Решава групе у судоерсима и упоређује ИД групе, а не назив" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Уноси дневника већи од ове вредности биће подељени на више порука системског дневника" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Уноси дневника већи од ове вредности биће подељени на више порука системског дневника: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Корисник који ће поседовати датотеке дневника У/И: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Група која ће поседовати датотеке дневника У/И: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Режим датотеке за коришћење за датотеке дневника У/И: 0%o" -#: plugins/sudoers/defaults.c:210 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Извршава наредбе описником датотеке уместо путањом: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Занемарује непознате уносе основности у судоерсу уместо да даје упозорење" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Време у секундама након ког ће наредба бити окончана: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Допушта кориснику да наведе време на линији наредби" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Пребацује У/И податке дневника на диск одмах уместо да га смешта у међумеморију" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:213 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:236 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:239 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:258 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d вредност за „%s“ мора да почиње /" -#: plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: вредност за „%s“ мора да почиње /" -#: plugins/sudoers/defaults.c:286 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:289 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:311 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/defaults.c:324 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: вредност „%s“ је неисправна за опцију „%s“" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 -#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:942 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:839 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење „%s“" @@ -937,15 +989,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: оштећено стави окружење, дужине не одговарају" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "не могу поново да изградим окружење" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "извините, није вам дозвољено да подесите следеће променљиве окружења: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "неподржана врста прихватања потврђивања иднтитета „%d“ за „%s“" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: грешка читања" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -971,86 +1035,102 @@ msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: несагласно веће издање прикључка групе %d, очекивано је %d" -#: plugins/sudoers/interfaces.c:117 +#: plugins/sudoers/interfaces.c:79 plugins/sudoers/interfaces.c:96 +#, c-format +msgid "unable to parse IP address \"%s\"" +msgstr "не могу да обрадим ИП адресу „%s“" + +#: plugins/sudoers/interfaces.c:84 plugins/sudoers/interfaces.c:101 +#, c-format +msgid "unable to parse netmask \"%s\"" +msgstr "не могу да обрадим мрежну маску „%s“" + +#: plugins/sudoers/interfaces.c:129 msgid "Local IP address and netmask pairs:\n" msgstr "Месна ИП адреса и парови мрежне маске:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s постоји али није директоријум (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "не могу да направим директоријум „%s“" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1156 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "не могу да променим режим „%s“ на 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "непозната група: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:895 -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:813 -#: plugins/sudoers/sudoreplay.c:1017 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 +#: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "не могу да отворим „%s“" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:899 -#: plugins/sudoers/sudoreplay.c:1128 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 +#: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "не могу да прочитам „%s“" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:594 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "не могу да пишем у „%s“" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "не могу да направим „%s“" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не могу да пишем у датотеку дневника У/И: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: унутрашња грешка, индекс датотеке %d није отворен" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: прикључник је превелик" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "неподржана врста ЛДАП путање: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "не могу да помешам лдап и лдапс путање" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "старттлс није подржано када се користи лдапс" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не могу да покренем ССЛ уверење и бп кључа: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "морате да подесите „TLS_CERT“ у „%s“ да користите ССЛ" @@ -1068,7 +1148,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1077,7 +1157,7 @@ "\n" "ЛДАП улога: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1086,27 +1166,27 @@ "\n" "ЛДАП улога: НЕПОЗНАТО\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Поредак: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Наредбе:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не могу да покренем ЛДАП: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "„start_tls“ је наведено али ЛДАП библиотеке не подржавају „ldap_start_tls_s()“ или „ldap_start_tls_s_np()“" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "неисправна особина „sudoOrder“: %s" @@ -1119,80 +1199,80 @@ msgid "unable to send audit message" msgstr "не могу да пошаљем поруку прегледа" -#: plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:130 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (наредба је настављена) %s" -#: plugins/sudoers/logging.c:159 +#: plugins/sudoers/logging.c:163 #, c-format msgid "unable to open log file: %s" msgstr "не могу да отворим датотеку дневника: %s" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:171 #, c-format msgid "unable to lock log file: %s" msgstr "не могу да закључам датотеку дневника: %s" -#: plugins/sudoers/logging.c:200 +#: plugins/sudoers/logging.c:204 #, c-format msgid "unable to write log file: %s" msgstr "не могу да запишем датотеку дневника: %s" -#: plugins/sudoers/logging.c:229 +#: plugins/sudoers/logging.c:233 msgid "No user or host" msgstr "Нема корисника или домаћина" -#: plugins/sudoers/logging.c:231 +#: plugins/sudoers/logging.c:235 msgid "validation failure" msgstr "неуспех потврђивања" -#: plugins/sudoers/logging.c:238 +#: plugins/sudoers/logging.c:242 msgid "user NOT in sudoers" msgstr "корисник НИЈЕ у судоерсу" -#: plugins/sudoers/logging.c:240 +#: plugins/sudoers/logging.c:244 msgid "user NOT authorized on host" msgstr "корисник НИЈЕ овлашћен на домаћину" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:246 msgid "command not allowed" msgstr "наредба није допуштена" -#: plugins/sudoers/logging.c:277 +#: plugins/sudoers/logging.c:281 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "„%s“ се не налази у датотеци судоерса. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:280 +#: plugins/sudoers/logging.c:284 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "„%s“ нема права да покрене судо над „%s“. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:284 +#: plugins/sudoers/logging.c:288 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Извините, корисник %s не може покренути судо на %s.\n" -#: plugins/sudoers/logging.c:287 +#: plugins/sudoers/logging.c:291 #, 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:324 plugins/sudoers/sudoers.c:466 -#: plugins/sudoers/sudoers.c:468 plugins/sudoers/sudoers.c:470 -#: plugins/sudoers/sudoers.c:472 plugins/sudoers/sudoers.c:1245 -#: plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: нема такве наредбе" -#: plugins/sudoers/logging.c:326 plugins/sudoers/sudoers.c:462 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1201,15 +1281,15 @@ "занемарујем „%s“ пронађено у „.“\n" "Користите „sudo ./%s“ ако је то „%s“ које желите да покренете." -#: plugins/sudoers/logging.c:343 +#: plugins/sudoers/logging.c:347 msgid "authentication failure" msgstr "потврђивање идентитета није успело" -#: plugins/sudoers/logging.c:369 +#: plugins/sudoers/logging.c:373 msgid "a password is required" msgstr "потребна је лозинка" -#: plugins/sudoers/logging.c:440 plugins/sudoers/logging.c:506 +#: plugins/sudoers/logging.c:444 plugins/sudoers/logging.c:510 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -1217,62 +1297,52 @@ msgstr[1] "%u покушаја нетачне лозинке" msgstr[2] "%u покушаја нетачне лозинке" -#: plugins/sudoers/logging.c:593 +#: plugins/sudoers/logging.c:597 msgid "unable to fork" msgstr "не могу да исцепим" -#: plugins/sudoers/logging.c:601 plugins/sudoers/logging.c:653 +#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:657 #, c-format msgid "unable to fork: %m" msgstr "не могу да исцепим: %m" -#: plugins/sudoers/logging.c:643 +#: plugins/sudoers/logging.c:647 #, c-format msgid "unable to open pipe: %m" msgstr "не могу да отворим спојку: %m" -#: plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:672 #, c-format msgid "unable to dup stdin: %m" msgstr "не могу да удвостручим стандардни улаз: %m" -#: plugins/sudoers/logging.c:706 +#: plugins/sudoers/logging.c:710 #, c-format msgid "unable to execute %s: %m" msgstr "не могу да извршим „%s“: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "неподржана врста прихватања потврђивања иднтитета „%d“ за „%s“" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: грешка читања" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "приказ за %s (%s) није у %s облику" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:910 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "грешка обраде у %s близу реда %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "грешка обраде у %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1281,41 +1351,41 @@ "\n" "Унос судоерса:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " „Покрени-као“ корисници: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " „Покрени-као“ групе: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Опције: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "не могу да обрадим списак адреса мреже" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим „%s“" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Издање %s прикључка политике судоерса\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматика датотеке судоерса издање %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1324,22 +1394,22 @@ "\n" "Путања судоерса: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "путања нс-прекидача: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "путања лдап.подешавања: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "путања лдап.тајне: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "немогу да региструјем прикачку врсте „%d“ (издање %d.%d)" @@ -1408,48 +1478,48 @@ msgid "unable to parse gids for %s" msgstr "не могу да обрадим гид-ове за „%s“" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "стално прекорачење спремника" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "стално поткорачење спремника" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "не могу да пређем на гиб администратора" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "не могу да пређем на гиб покреникао" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "не могу да подесим вектор „покрени-као група“" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "не могу да пређем на јиб покреникао" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "не могу да пређем на гиб судоерса" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "превише процеса" @@ -1482,7 +1552,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "не могу да нађем симбол „%s“ у „%s“" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1491,7 +1561,7 @@ "\n" "СССД улога: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1520,229 +1590,233 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Корисник „%s“ нема права да покрене судо над „%s“.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "не могу да покренем основне вредности судоерса" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:857 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "неприлике са основним уносима" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "нисам пронашао исправне изворе судоерса, прекидам" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "судоерси наводе да администратор није дозвољен у судоу" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "није вам допуштено да користите опцију „-C“" -#: plugins/sudoers/sudoers.c:385 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник временске ознаке (%s): нема таквог корисника" -#: plugins/sudoers/sudoers.c:399 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "нема конзоле" -#: plugins/sudoers/sudoers.c:400 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "извините, морате имати конзолу да покренете судо" -#: plugins/sudoers/sudoers.c:461 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "наредба у текућем директоријуму" -#: plugins/sudoers/sudoers.c:481 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "извините, није вам дозвољено да подесите време истека наредбе" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "извините, није вам дозвољено да сачувате окружење" -#: plugins/sudoers/sudoers.c:802 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "наредба је предуга" -#: plugins/sudoers/sudoers.c:914 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:922 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "Сви могу да пишу у „%s“" -#: plugins/sudoers/sudoers.c:926 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:959 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "само администратор може да користи „-c %s“" -#: plugins/sudoers/sudoers.c:978 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "непознат разред пријављивања: %s" -#: plugins/sudoers/sudoers.c:1061 plugins/sudoers/sudoers.c:1089 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "не могу да решим домаћина „%s“" -#: plugins/sudoers/sudoreplay.c:232 +#: plugins/sudoers/sudoreplay.c:236 #, c-format msgid "invalid filter option: %s" msgstr "неисправна опција пропусника: %s" -#: plugins/sudoers/sudoreplay.c:245 +#: plugins/sudoers/sudoreplay.c:249 #, c-format msgid "invalid max wait: %s" msgstr "неисправно најдуже чекање: %s" -#: plugins/sudoers/sudoreplay.c:251 +#: plugins/sudoers/sudoreplay.c:255 #, c-format msgid "invalid speed factor: %s" msgstr "неисправан чинилац брзине: %s" -#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s издање %s\n" -#: plugins/sudoers/sudoreplay.c:286 +#: plugins/sudoers/sudoreplay.c:290 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/временисање: %s" -#: plugins/sudoers/sudoreplay.c:292 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/временисање: %s" -#: plugins/sudoers/sudoreplay.c:308 +#: plugins/sudoers/sudoreplay.c:312 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Понављам сесију судоа: %s\n" -#: plugins/sudoers/sudoreplay.c:314 +#: plugins/sudoers/sudoreplay.c:318 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Упозорење: ваш терминал је премали да би исправно приказао дневник.\n" -#: plugins/sudoers/sudoreplay.c:315 +#: plugins/sudoers/sudoreplay.c:319 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Геометрија дневника је %d x %d, а геометрија терминала је %d x %d." -#: plugins/sudoers/sudoreplay.c:406 +#: plugins/sudoers/sudoreplay.c:410 msgid "unable to set tty to raw mode" msgstr "не могу да подесим конзолу на сирови режим" -#: plugins/sudoers/sudoreplay.c:435 +#: plugins/sudoers/sudoreplay.c:439 #, c-format msgid "invalid timing file line: %s" msgstr "неисправан ред датотеке временисања: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:659 plugins/sudoers/sudoreplay.c:684 #, c-format msgid "ambiguous expression \"%s\"" msgstr "нејасан израз „%s“" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:706 msgid "unmatched ')' in expression" msgstr "непоклопљена ) у изразу" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:710 #, c-format msgid "unknown search term \"%s\"" msgstr "непознат појам претраге „%s“" -#: plugins/sudoers/sudoreplay.c:721 +#: plugins/sudoers/sudoreplay.c:725 #, c-format msgid "%s requires an argument" msgstr "„%s“ захтева аргумент" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1104 +#: plugins/sudoers/sudoreplay.c:728 plugins/sudoers/sudoreplay.c:1108 #, c-format msgid "invalid regular expression: %s" msgstr "неисправан регуларан израз: %s" -#: plugins/sudoers/sudoreplay.c:728 +#: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" msgstr "не могу да обрадим датум „%s“" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" msgstr "непоклопљена ( у изразу" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:743 msgid "illegal trailing \"or\"" msgstr "недозвољено пратеће „или“" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:745 msgid "illegal trailing \"!\"" msgstr "недозвољени пратећи „!“" -#: plugins/sudoers/sudoreplay.c:790 +#: plugins/sudoers/sudoreplay.c:794 #, c-format msgid "unknown search type %d" msgstr "непозната врста претраге „%d“" -#: plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:832 #, c-format msgid "%s: invalid log file" msgstr "%s: неисправна датотека дневника" -#: plugins/sudoers/sudoreplay.c:846 +#: plugins/sudoers/sudoreplay.c:850 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: недостаје поље временске ознаке" -#: plugins/sudoers/sudoreplay.c:853 +#: plugins/sudoers/sudoreplay.c:857 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: временска ознака %s: %s" -#: plugins/sudoers/sudoreplay.c:860 +#: plugins/sudoers/sudoreplay.c:864 #, c-format msgid "%s: user field is missing" msgstr "%s: недостаје поље корисника" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:873 #, c-format msgid "%s: runas user field is missing" msgstr "%s: недостаје поље „покрени-као корисник“" -#: plugins/sudoers/sudoreplay.c:878 +#: plugins/sudoers/sudoreplay.c:882 #, c-format msgid "%s: runas group field is missing" msgstr "%s: недостаје поље „покрени-као група“" -#: plugins/sudoers/sudoreplay.c:1241 +#: plugins/sudoers/sudoreplay.c:1245 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "употреба: %s [-h] [-d дир] [-m број] [-s број] ИБ\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1248 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "употреба: %s [-h] [-d дир] -l [израз претраге]\n" -#: plugins/sudoers/sudoreplay.c:1253 +#: plugins/sudoers/sudoreplay.c:1257 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1751,7 +1825,7 @@ "%s — понавља дневнике сесије судоа\n" "\n" -#: plugins/sudoers/sudoreplay.c:1255 +#: plugins/sudoers/sudoreplay.c:1259 msgid "" "\n" "Options:\n" @@ -1773,11 +1847,11 @@ " -s, --speed=број убрзава или успорава излаз\n" " -V, --version приказује податке о издању и излази" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tдомаћин није поклопљен" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1785,7 +1859,7 @@ "\n" "Наредба је допуштена" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1793,7 +1867,7 @@ "\n" "Наредба је одбијена" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1801,129 +1875,124 @@ "\n" "Наредба није поклопљена" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "Група може да пише у „%s“" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "не могу да скратим датотеку временске ознаке на %lld бајта" -#: plugins/sudoers/timestamp.c:730 plugins/sudoers/timestamp.c:797 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "не могу да прочитам сат" -#: plugins/sudoers/timestamp.c:744 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "занемарујем временску ознаку из будућности" -#: plugins/sudoers/timestamp.c:756 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "временска ознака је превише у будућности: %20.20s" -#: plugins/sudoers/timestamp.c:851 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "не могу да закључам датотеку временске ознаке „%s“" -#: plugins/sudoers/timestamp.c:895 plugins/sudoers/timestamp.c:915 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "путања стања обучавања је предуга: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s граматика издање %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "притисните „унеси“ да уредите „%s“: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "наведени уређивач (%s) не постоји" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "нисам пронашао уређивача (путања уређивача = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "грешка писања" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не могу да добавим податке привремене датотеке (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "привремена датотека нулте дужине (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "уређивач (%s) није успео, %s је неизмењено" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "„%s“ је неизмењено" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не могу поново да отворим привремену датотеку (%s), %s је неизмењено." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "не могу да обрадим привремену датотеку (%s), непозната грешка" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не могу да подесим (јиб, гиб) за %s на (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "не могу да променим режим „%s“ на 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "„%s“ и „%s“ нису на истом систему датотека, користим „mv“ за преименовање" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "наредба није успела: „%s %s %s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "грешка преименовања „%s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Шта сада? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1935,62 +2004,72 @@ " x — излази без чувања измена у датотеци судоерса\n" " Q — прекида и чува измене у датотеци судоерса (ОПАСНО!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: погрешан власник (јиб, гиб) треба бити (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: лоша овлашћења, требају бити у режиму 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "нисам успео да обрадим %s датотеку, непозната грешка" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "грешка обраде у %s близу реда %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "грешка обраде у %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: успешно је обрађено\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "„%s“ је заузет, покушајте касније" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Грешка: %s:%d циклус у „%s“ „%s“" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Упозорење: %s:%d циклус у „%s“ „%s“" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d циклус у „%s“ „%s“" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Грешка: %s:%d упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d упута за „%s“ „%s“ постоји али није одређена" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Упозорење: %s:%d упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d некоришћено „%s“ „%s“" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Упозорење: %s:%d некоришћено „%s“ „%s“" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1999,7 +2078,7 @@ "%s — безбедно уређује датотеку судоерса\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2021,17 +2100,17 @@ " -V, --version приказује податке о издању и излази\n" " -x, --export=изл._датотека извози судоерсе у ЈСОН запису" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "непознат унос основности „%s“" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: улазна датотека треба да се разликује од излазне" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "превише нивоа укључивања" diff -Nru sudo-1.8.19p1/plugins/sudoers/po/sudoers.pot sudo-1.8.20p2/plugins/sudoers/po/sudoers.pot --- sudo-1.8.19p1/plugins/sudoers/po/sudoers.pot 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/sudoers.pot 2017-05-10 15:38:43.000000000 +0000 @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19\n" +"Project-Id-Version: sudo 1.8.20\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,147 +41,171 @@ msgid "Sorry, try again." msgstr "" -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:278 -#: gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:384 gram.y:392 -#: gram.y:402 gram.y:432 gram.y:439 gram.y:446 gram.y:453 gram.y:565 gram.y:572 -#: gram.y:581 gram.y:590 gram.y:607 gram.y:663 gram.y:670 gram.y:677 gram.y:685 -#: gram.y:781 gram.y:788 gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 -#: gram.y:849 gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 gram.y:284 +#: gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 gram.y:398 gram.y:406 +#: gram.y:416 gram.y:449 gram.y:456 gram.y:463 gram.y:470 gram.y:552 gram.y:559 +#: gram.y:568 gram.y:577 gram.y:594 gram.y:706 gram.y:713 gram.y:720 gram.y:728 +#: gram.y:824 gram.y:831 gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 +#: gram.y:892 gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "" @@ -305,7 +329,7 @@ msgid "PAM authentication error: %s" msgstr "" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "" @@ -395,542 +419,571 @@ msgstr "" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "" "Use faster globbing that is less accurate but does not access the filesystem" msgstr "" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "" "The umask specified in sudoers will override the user's, even if it is more " "permissive" msgstr "" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "" "Check parent directories for writability when editing files with sudoedit" msgstr "" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "" -#: plugins/sudoers/def_data.c:423 +#: plugins/sudoers/def_data.c:434 +#, c-format msgid "" "Log entries larger than this value will be split into multiple syslog " -"messages" +"messages: %u" msgstr "" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:454 +msgid "" +"Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "" @@ -939,16 +992,28 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "" "sorry, you are not allowed to set the following environment variables: %s" msgstr "" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -988,82 +1053,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "" @@ -1081,43 +1152,43 @@ msgid "%s: %s: %s: %s" msgstr "" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" "LDAP Role: %s\n" msgstr "" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" "LDAP Role: UNKNOWN\n" msgstr "" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr "" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr "" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 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:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "" @@ -1195,15 +1266,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1249,101 +1320,91 @@ msgid "unable to execute %s: %m" msgstr "" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" "Sudoers entry:\n" msgstr "" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr "" -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr "" -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr "" -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "" @@ -1412,48 +1473,48 @@ msgid "unable to parse gids for %s" msgstr "" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "" @@ -1486,14 +1547,14 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" "SSSD Role: %s\n" msgstr "" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1520,84 +1581,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "" @@ -1617,7 +1682,7 @@ msgid "invalid speed factor: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "" @@ -1762,151 +1827,146 @@ " -V, --version display version information and exit" msgstr "" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" msgstr "" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" msgstr "" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" msgstr "" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "" -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "" -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "" -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1914,69 +1974,79 @@ " (Q)uit and save changes to sudoers file (DANGER!)\n" msgstr "" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" +msgid "Warning: %s:%d unused %s \"%s\"" msgstr "" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -1989,16 +2059,16 @@ " -x, --export=output_file write sudoers in JSON format to output_file" msgstr "" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/sv.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/sv.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/sv.po sudo-1.8.20p2/plugins/sudoers/po/sv.po --- sudo-1.8.19p1/plugins/sudoers/po/sv.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/sv.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,24 +1,24 @@ # Swedish translation for sudoers. -# Copyright © 2012, 2016 Free Software Foundation, Inc. +# Copyright © 2012, 2016, 2017 Free Software Foundation, Inc. # This file is put in the public domain. # Daniel Nylander , 2012. -# Sebastian Rasmussen , 2016. +# Sebastian Rasmussen , 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.18b4\n" +"Project-Id-Version: sudoers 1.8.19b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-08-31 05:48-0600\n" -"PO-Revision-Date: 2016-09-04 22:41+0800\n" +"POT-Creation-Date: 2016-12-03 19:24-0700\n" +"PO-Revision-Date: 2017-01-14 01:07+0100\n" "Last-Translator: Sebastian Rasmussen \n" "Language-Team: Swedish \n" "Language: sv\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.8\n" +"X-Generator: Poedit 1.8.11\n" #: confstr.sh:1 msgid "syntax error" @@ -44,44 +44,44 @@ msgid "Sorry, try again." msgstr "Försök igen." -#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 -#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 -#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 -#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 -#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 -#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 -#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 -#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 -#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 -#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:443 -#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/defaults.c:576 plugins/sudoers/defaults.c:826 -#: plugins/sudoers/defaults.c:974 plugins/sudoers/editor.c:64 -#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:656 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 -#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 -#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 -#: plugins/sudoers/ldap.c:1124 plugins/sudoers/ldap.c:1138 -#: plugins/sudoers/ldap.c:1420 plugins/sudoers/ldap.c:1580 -#: plugins/sudoers/ldap.c:1662 plugins/sudoers/ldap.c:1802 -#: plugins/sudoers/ldap.c:1826 plugins/sudoers/ldap.c:1856 -#: plugins/sudoers/ldap.c:1909 plugins/sudoers/ldap.c:1924 -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/ldap.c:2053 -#: plugins/sudoers/ldap.c:2206 plugins/sudoers/ldap.c:2303 -#: plugins/sudoers/ldap.c:3105 plugins/sudoers/ldap.c:3137 -#: plugins/sudoers/ldap.c:3443 plugins/sudoers/ldap.c:3471 -#: plugins/sudoers/ldap.c:3487 plugins/sudoers/ldap.c:3577 -#: plugins/sudoers/ldap.c:3593 plugins/sudoers/linux_audit.c:76 +#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 +#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 +#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 +#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 +#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 +#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 +#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 +#: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 +#: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 +#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 +#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 +#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 +#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 +#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 +#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 +#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 +#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 +#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 +#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 +#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 +#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 -#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:682 -#: plugins/sudoers/logging.c:940 plugins/sudoers/match.c:506 -#: plugins/sudoers/match.c:540 plugins/sudoers/match.c:577 -#: plugins/sudoers/match.c:775 plugins/sudoers/match.c:833 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 #: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 #: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:393 plugins/sudoers/policy.c:608 +#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 #: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 #: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 @@ -91,66 +91,69 @@ #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1014 plugins/sudoers/sssd.c:1205 -#: plugins/sudoers/sssd.c:1219 plugins/sudoers/sudoers.c:262 -#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 -#: plugins/sudoers/sudoers.c:362 plugins/sudoers/sudoers.c:653 -#: plugins/sudoers/sudoers.c:759 plugins/sudoers/sudoers.c:803 -#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:214 plugins/sudoers/testsudoers.c:231 -#: plugins/sudoers/timestamp.c:402 plugins/sudoers/timestamp.c:438 -#: plugins/sudoers/timestamp.c:854 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:308 -#: plugins/sudoers/visudo.c:314 plugins/sudoers/visudo.c:445 -#: plugins/sudoers/visudo.c:998 plugins/sudoers/visudo.c:1042 -#: plugins/sudoers/visudo.c:1138 toke.l:829 toke.l:929 toke.l:1087 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 msgid "unable to allocate memory" msgstr "kunde inte allokera minne" -#: gram.y:471 +#: gram.y:464 msgid "a digest requires a path name" msgstr "en kontrollsumma kräver ett sökvägsnamn" -#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:320 +#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:576 plugins/sudoers/defaults.c:826 -#: plugins/sudoers/defaults.c:974 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 +#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 #: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 -#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:656 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 -#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 -#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 -#: plugins/sudoers/ldap.c:1124 plugins/sudoers/ldap.c:1138 -#: plugins/sudoers/ldap.c:1420 plugins/sudoers/ldap.c:1580 -#: plugins/sudoers/ldap.c:1662 plugins/sudoers/ldap.c:1802 -#: plugins/sudoers/ldap.c:1826 plugins/sudoers/ldap.c:1856 -#: plugins/sudoers/ldap.c:1909 plugins/sudoers/ldap.c:1924 -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/ldap.c:2053 -#: plugins/sudoers/ldap.c:2206 plugins/sudoers/ldap.c:2303 -#: plugins/sudoers/ldap.c:3105 plugins/sudoers/ldap.c:3137 -#: plugins/sudoers/ldap.c:3443 plugins/sudoers/ldap.c:3470 -#: plugins/sudoers/ldap.c:3486 plugins/sudoers/ldap.c:3577 -#: plugins/sudoers/ldap.c:3593 plugins/sudoers/linux_audit.c:76 -#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 -#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:940 -#: plugins/sudoers/match.c:505 plugins/sudoers/match.c:539 -#: plugins/sudoers/match.c:577 plugins/sudoers/match.c:775 -#: plugins/sudoers/match.c:832 plugins/sudoers/parse.c:236 -#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:263 -#: plugins/sudoers/parse.c:275 plugins/sudoers/policy.c:97 -#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 -#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 -#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 -#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 -#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 -#: plugins/sudoers/policy.c:608 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 +#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 +#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 +#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 +#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 +#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 +#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 +#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 +#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 +#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 +#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 +#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 +#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 +#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 +#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 +#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 +#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 @@ -162,32 +165,34 @@ #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1014 plugins/sudoers/sssd.c:1205 -#: plugins/sudoers/sssd.c:1219 plugins/sudoers/sudoers.c:262 -#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 -#: plugins/sudoers/sudoers.c:362 plugins/sudoers/sudoers.c:653 -#: plugins/sudoers/sudoers.c:759 plugins/sudoers/sudoers.c:803 -#: plugins/sudoers/sudoers_debug.c:106 plugins/sudoers/sudoreplay.c:513 -#: plugins/sudoers/sudoreplay.c:712 plugins/sudoers/sudoreplay.c:824 -#: plugins/sudoers/sudoreplay.c:864 plugins/sudoers/sudoreplay.c:873 -#: plugins/sudoers/sudoreplay.c:883 plugins/sudoers/sudoreplay.c:891 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:1051 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/testsudoers.c:130 -#: plugins/sudoers/testsudoers.c:214 plugins/sudoers/testsudoers.c:231 -#: plugins/sudoers/timestamp.c:402 plugins/sudoers/timestamp.c:438 -#: plugins/sudoers/timestamp.c:854 plugins/sudoers/toke_util.c:56 -#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:308 -#: plugins/sudoers/visudo.c:314 plugins/sudoers/visudo.c:445 -#: plugins/sudoers/visudo.c:998 plugins/sudoers/visudo.c:1042 -#: plugins/sudoers/visudo.c:1138 toke.l:829 toke.l:929 toke.l:1087 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 +#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 +#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 +#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 +#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 +#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 +#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 +#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 +#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 +#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 +#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 +#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 +#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/alias.c:132 +#: plugins/sudoers/alias.c:135 #, c-format -msgid "Alias `%s' already defined" +msgid "Alias \"%s\" already defined" msgstr "Aliaset ”%s” är redan definierat" #: plugins/sudoers/auth/bsdauth.c:68 @@ -304,7 +309,7 @@ msgid "PAM authentication error: %s" msgstr "PAM-autentiseringsfel: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:225 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 #, c-format msgid "you do not exist in the %s database" msgstr "du finns inte i %s-databasen" @@ -398,14 +403,14 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:689 plugins/sudoers/sudoers.c:722 +#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 #, c-format msgid "unknown uid: %u" msgstr "okänt uid: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:780 -#: plugins/sudoers/sudoers.c:1111 plugins/sudoers/testsudoers.c:205 -#: plugins/sudoers/testsudoers.c:363 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 +#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 +#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 #, c-format msgid "unknown user: %s" msgstr "okänd användare: %s" @@ -841,45 +846,93 @@ msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Gör namnupplösning för grupper i sudoers och matcha efter grupp-ID, inte namnet" -#: plugins/sudoers/defaults.c:203 +#: plugins/sudoers/def_data.c:423 +msgid "Log entries larger than this value will be split into multiple syslog messages" +msgstr "Loggposter större än detta värde kommer att delas upp i flera syslog-meddelanden" + +#: plugins/sudoers/def_data.c:427 #, c-format -msgid "no value specified for `%s'" -msgstr "inget värde angivet för ”%s”" +msgid "User that will own the I/O log files: %s" +msgstr "Användare som kommer att äga I/O-loggfilerna: %s" -#: plugins/sudoers/defaults.c:218 +#: plugins/sudoers/def_data.c:431 #, c-format -msgid "values for `%s' must start with a '/'" -msgstr "värden för ”%s” måste börja med ett ”/”" +msgid "Group that will own the I/O log files: %s" +msgstr "Grupp som kommer att äga I/O-loggfilerna: %s" -#: plugins/sudoers/defaults.c:241 +#: plugins/sudoers/def_data.c:435 #, c-format -msgid "option `%s' does not take a value" -msgstr "flaggan ”%s” tar inte emot något värde" +msgid "File mode to use for the I/O log files: 0%o" +msgstr "Filrättigheter att använda för I/O-loggfilerna: 0%o" -#: plugins/sudoers/defaults.c:258 +#: plugins/sudoers/defaults.c:211 #, c-format -msgid "invalid Defaults type 0x%x for option `%s'" -msgstr "ogiltig Standardtyp 0x%x för flagga ”%s”" +msgid "%s:%d unknown defaults entry \"%s\"" +msgstr "%s:%d okänd standardpost ”%s”" -#: plugins/sudoers/defaults.c:271 +#: plugins/sudoers/defaults.c:214 #, c-format -msgid "value `%s' is invalid for option `%s'" -msgstr "värdet ”%s” är ogiltigt för flaggan ”%s”" +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: okänd standardpost ”%s”" -#: plugins/sudoers/defaults.c:318 plugins/sudoers/defaults.c:716 -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/defaults.c:237 #, c-format -msgid "unknown defaults entry `%s'" -msgstr "okänd standardpost ”%s”" +msgid "%s:%d no value specified for \"%s\"" +msgstr "%s:%d inget värde angivet för ”%s”" + +#: plugins/sudoers/defaults.c:240 +#, c-format +msgid "%s: no value specified for \"%s\"" +msgstr "%s: inget värde angivet för ”%s”" + +#: plugins/sudoers/defaults.c:259 +#, c-format +msgid "%s:%d values for \"%s\" must start with a '/'" +msgstr "%s:%d värden för ”%s” måste börja med ett ”/”" + +#: plugins/sudoers/defaults.c:262 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: värden för ”%s” måste börja med ett ”/”" + +#: plugins/sudoers/defaults.c:287 +#, c-format +msgid "%s:%d option \"%s\" does not take a value" +msgstr "%s:%d flaggan ”%s” tar inte emot något värde" + +#: plugins/sudoers/defaults.c:290 +#, c-format +msgid "%s: option \"%s\" does not take a value" +msgstr "%s: flaggan ”%s” tar inte emot något värde" + +#: plugins/sudoers/defaults.c:309 +#, c-format +msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d ogiltig standardtyp 0x%x för flagga ”%s”" + +#: plugins/sudoers/defaults.c:312 +#, c-format +msgid "%s: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s: ogiltig Standardtyp 0x%x för flagga ”%s”" + +#: plugins/sudoers/defaults.c:322 +#, c-format +msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d värdet ”%s” är ogiltigt för flaggan ”%s”" + +#: plugins/sudoers/defaults.c:325 +#, c-format +msgid "%s: value \"%s\" is invalid for option \"%s\"" +msgstr "%s: värdet ”%s” är ogiltigt för flaggan ”%s”" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 -#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1202 -#: plugins/sudoers/ldap.c:1424 plugins/sudoers/ldap.c:1750 -#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:945 -#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:521 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:825 -#: plugins/sudoers/testsudoers.c:235 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 +#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 +#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 +#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "internt fel, %s spill" @@ -922,100 +975,114 @@ msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: inkompatibel gruppinsticksmodul huvudversion %d, förväntade %d" -#: plugins/sudoers/interfaces.c:117 +#: plugins/sudoers/interfaces.c:79 plugins/sudoers/interfaces.c:96 +#, c-format +msgid "unable to parse IP address \"%s\"" +msgstr "kan inte tolka IP-adress ”%s”" + +#: plugins/sudoers/interfaces.c:84 plugins/sudoers/interfaces.c:101 +#, c-format +msgid "unable to parse netmask \"%s\"" +msgstr "kan inte tolka nätmask ”%s”" + +#: plugins/sudoers/interfaces.c:129 msgid "Local IP address and netmask pairs:\n" msgstr "Lokala IP-adress- och nätmaskpar:\n" -#: plugins/sudoers/iolog.c:95 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/timestamp.c:181 +#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s finns men är inte en katalog (0%o)" -#: plugins/sudoers/iolog.c:110 plugins/sudoers/iolog.c:116 -#: plugins/sudoers/iolog.c:138 plugins/sudoers/iolog.c:147 -#: plugins/sudoers/timestamp.c:170 plugins/sudoers/timestamp.c:196 +#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 #, c-format msgid "unable to mkdir %s" msgstr "kunde inte skapa katalogen %s" -#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:881 -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:813 -#: plugins/sudoers/sudoreplay.c:1017 plugins/sudoers/timestamp.c:411 -#: plugins/sudoers/visudo.c:917 plugins/sudoers/visudo_json.c:1011 +#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 +#: plugins/sudoers/testsudoers.c:389 +#, c-format +msgid "unknown group: %s" +msgstr "okänd grupp: %s" + +#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 #: plugins/sudoers/visudo_json.c:1024 #, c-format msgid "unable to open %s" msgstr "kunde inte öppna %s" -#: plugins/sudoers/iolog.c:270 plugins/sudoers/sudoers.c:885 -#: plugins/sudoers/sudoreplay.c:1128 +#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "kunde inte läsa %s" -#: plugins/sudoers/iolog.c:306 plugins/sudoers/sudoreplay.c:594 -#: plugins/sudoers/timestamp.c:310 plugins/sudoers/timestamp.c:313 +#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 #, c-format msgid "unable to write to %s" msgstr "kunde inte skriva till %s" -#: plugins/sudoers/iolog.c:378 plugins/sudoers/iolog.c:582 +#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 #, c-format msgid "unable to create %s" msgstr "kunde inte skapa %s" -#: plugins/sudoers/iolog.c:746 plugins/sudoers/iolog.c:827 +#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 #, c-format msgid "unable to write to I/O log file: %s" msgstr "kunde inte skriva till I/O-loggfil: %s" -#: plugins/sudoers/iolog.c:778 +#: plugins/sudoers/iolog.c:927 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: internt fel, filindex %d inte öppet" -#: plugins/sudoers/ldap.c:428 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port är för stor" -#: plugins/sudoers/ldap.c:488 +#: plugins/sudoers/ldap.c:489 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "LDAP-uri-typ stöds ej: %s" -#: plugins/sudoers/ldap.c:515 +#: plugins/sudoers/ldap.c:516 msgid "unable to mix ldap and ldaps URIs" msgstr "kan inte blanda ldap- och ldaps-URI:er" -#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 +#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 msgid "starttls not supported when using ldaps" msgstr "starttls stöds inte när ldaps används" -#: plugins/sudoers/ldap.c:626 +#: plugins/sudoers/ldap.c:627 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "kan inte initiera SSL-certifikat och nyckeldatabas: %s" -#: plugins/sudoers/ldap.c:629 +#: plugins/sudoers/ldap.c:630 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "du måste ställa in TLS_CERT i %s för att använda SSL" -#: plugins/sudoers/ldap.c:1188 +#: plugins/sudoers/ldap.c:1239 msgid "unable to get GMT time" msgstr "kunde inte få GMT-tid" -#: plugins/sudoers/ldap.c:1194 +#: plugins/sudoers/ldap.c:1245 msgid "unable to format timestamp" msgstr "kunde inte formatera tidsstämpel" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1956 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2440 +#: plugins/sudoers/ldap.c:2504 #, c-format msgid "" "\n" @@ -1024,7 +1091,7 @@ "\n" "LDAP-roll: %s\n" -#: plugins/sudoers/ldap.c:2442 +#: plugins/sudoers/ldap.c:2506 #, c-format msgid "" "\n" @@ -1033,27 +1100,27 @@ "\n" "LDAP-roll: OKÄND\n" -#: plugins/sudoers/ldap.c:2489 +#: plugins/sudoers/ldap.c:2562 #, c-format msgid " Order: %s\n" msgstr " Ordning: %s\n" -#: plugins/sudoers/ldap.c:2497 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1568 +#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 +#: plugins/sudoers/sssd.c:1626 #, c-format msgid " Commands:\n" msgstr " Kommandon:\n" -#: plugins/sudoers/ldap.c:3057 +#: plugins/sudoers/ldap.c:3130 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kunde inte initiera LDAP: %s" -#: plugins/sudoers/ldap.c:3093 +#: plugins/sudoers/ldap.c:3166 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-bibliotek har inte stöd för ldap_start_tls_s() eller ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3341 +#: plugins/sudoers/ldap.c:3415 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ogiltigt sudoOrder-attribut: %s" @@ -1131,19 +1198,19 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Tyvärr, användaren %s tillåts inte att köra ”%s%s%s” som %s%s%s på %s.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:461 -#: plugins/sudoers/sudoers.c:463 plugins/sudoers/sudoers.c:465 -#: plugins/sudoers/sudoers.c:467 plugins/sudoers/sudoers.c:1231 -#: plugins/sudoers/sudoers.c:1233 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 +#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 +#: plugins/sudoers/sudoers.c:1249 #, c-format msgid "%s: command not found" msgstr "%s: kommandot hittades inte" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 #, c-format msgid "" -"ignoring `%s' found in '.'\n" -"Use `sudo ./%s' if this is the `%s' you wish to run." +"ignoring \"%s\" found in '.'\n" +"Use \"sudo ./%s\" if this is the \"%s\" you wish to run." msgstr "" "ignorerar ”%s” som hittades i ”.”\n" "Använd ”sudo ./%s” om detta är den ”%s” som du vill köra." @@ -1167,41 +1234,47 @@ msgid "unable to fork" msgstr "kunde inte grena process" -#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:656 +#: plugins/sudoers/logging.c:605 plugins/sudoers/logging.c:657 #, c-format msgid "unable to fork: %m" msgstr "kunde inte grena process: %m" -#: plugins/sudoers/logging.c:646 +#: plugins/sudoers/logging.c:647 #, c-format msgid "unable to open pipe: %m" msgstr "kunde inte öppna rör: %m" -#: plugins/sudoers/logging.c:671 +#: plugins/sudoers/logging.c:672 #, c-format msgid "unable to dup stdin: %m" msgstr "kan inte duplicera stdin: %m" -#: plugins/sudoers/logging.c:709 +#: plugins/sudoers/logging.c:710 #, c-format msgid "unable to execute %s: %m" msgstr "kunde inte köra %s: %m" -#: plugins/sudoers/match.c:649 +#: plugins/sudoers/match.c:644 #, c-format msgid "unsupported digest type %d for %s" msgstr "typ %d av kontrollsumma stöds inte för %s" -#: plugins/sudoers/match.c:690 +#: plugins/sudoers/match.c:685 #, c-format msgid "%s: read error" msgstr "%s: läsfel" -#: plugins/sudoers/match.c:725 +#: plugins/sudoers/match.c:720 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "kontrollsumma för %s (%s) är inte på %s-form" +#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#, c-format +msgid "unable to stat %s" +msgstr "kunde inte ta status på %s" + #: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" @@ -1236,26 +1309,26 @@ msgid " Options: " msgstr " Flaggor: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:258 +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 msgid "unable to parse network address list" msgstr "kan inte tolka nätverksadresslista" -#: plugins/sudoers/policy.c:665 plugins/sudoers/visudo.c:855 +#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 #, c-format msgid "unable to execute %s" msgstr "kunde inte köra %s" -#: plugins/sudoers/policy.c:798 +#: plugins/sudoers/policy.c:823 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers policyinsticksmodul version %s\n" -#: plugins/sudoers/policy.c:800 +#: plugins/sudoers/policy.c:825 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-filgrammatik version %d\n" -#: plugins/sudoers/policy.c:804 +#: plugins/sudoers/policy.c:829 #, c-format msgid "" "\n" @@ -1264,22 +1337,22 @@ "\n" "Sökväg till sudoers: %s\n" -#: plugins/sudoers/policy.c:807 +#: plugins/sudoers/policy.c:832 #, c-format msgid "nsswitch path: %s\n" msgstr "Sökväg till nsswitch: %s\n" -#: plugins/sudoers/policy.c:809 +#: plugins/sudoers/policy.c:834 #, c-format msgid "ldap.conf path: %s\n" msgstr "Sökväg till ldap.conf: %s\n" -#: plugins/sudoers/policy.c:810 +#: plugins/sudoers/policy.c:835 #, c-format msgid "ldap.secret path: %s\n" msgstr "Sökväg till ldap.secret: %s\n" -#: plugins/sudoers/policy.c:843 +#: plugins/sudoers/policy.c:868 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "kan inte registrera krok av typ %d (version %d.%d)" @@ -1362,27 +1435,27 @@ msgid "perm stack underflow" msgstr "perm-stackunderspill" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 #: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "kan inte ändra till root-gid" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 #: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "kan inte ändra till runas-gid" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 #: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "kan inte ställa in gruppvektor för runas" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 #: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "kan inte ändra till runas-uid" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 #: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "kan inte ändra till sudoers-gid" @@ -1422,7 +1495,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "kan inte hitta symbol ”%s” i %s" -#: plugins/sudoers/sssd.c:1492 +#: plugins/sudoers/sssd.c:1541 #, c-format msgid "" "\n" @@ -1431,7 +1504,7 @@ "\n" "SSSD-roll: %s\n" -#: plugins/sudoers/sssd.c:1497 +#: plugins/sudoers/sssd.c:1546 #, c-format msgid "" "\n" @@ -1460,240 +1533,229 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Användaren %s tillåts inte att köra sudo på %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:244 -#: plugins/sudoers/visudo.c:231 plugins/sudoers/visudo.c:578 -#: plugins/sudoers/visudo.c:921 +#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 +#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 +#: plugins/sudoers/visudo.c:955 msgid "unable to initialize sudoers default values" msgstr "kunde inte initiera sudoers standardvärden" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:843 +#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 msgid "problem with defaults entries" msgstr "problem med standardposter" -#: plugins/sudoers/sudoers.c:204 +#: plugins/sudoers/sudoers.c:203 msgid "no valid sudoers sources found, quitting" msgstr "inga giltiga sudoers-källor hittades, avslutar" -#: plugins/sudoers/sudoers.c:243 +#: plugins/sudoers/sudoers.c:242 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers anger att root inte tillåts att använda sudo" -#: plugins/sudoers/sudoers.c:300 +#: plugins/sudoers/sudoers.c:299 msgid "you are not permitted to use the -C option" msgstr "du tillåts inte att använda flaggan -C" -#: plugins/sudoers/sudoers.c:386 +#: plugins/sudoers/sudoers.c:387 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tidsstämpelägare (%s): Det finns ingen sådan användare" -#: plugins/sudoers/sudoers.c:400 +#: plugins/sudoers/sudoers.c:401 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:402 msgid "sorry, you must have a tty to run sudo" msgstr "tyvärr, du måste ha en tty för att köra sudo" -#: plugins/sudoers/sudoers.c:456 +#: plugins/sudoers/sudoers.c:463 msgid "command in current directory" msgstr "kommando i aktuell katalog" -#: plugins/sudoers/sudoers.c:476 +#: plugins/sudoers/sudoers.c:483 msgid "sorry, you are not allowed to preserve the environment" msgstr "tyvärr, du tillåts inte att behålla miljövariabler" -#: plugins/sudoers/sudoers.c:788 +#: plugins/sudoers/sudoers.c:804 msgid "command too long" msgstr "kommandot för långt" -#: plugins/sudoers/sudoers.c:896 plugins/sudoers/timestamp.c:176 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:681 -#, c-format -msgid "unable to stat %s" -msgstr "kunde inte ta status på %s" - -#: plugins/sudoers/sudoers.c:900 +#: plugins/sudoers/sudoers.c:916 #, c-format msgid "%s is not a regular file" msgstr "%s är inte en vanlig fil" -#: plugins/sudoers/sudoers.c:904 plugins/sudoers/timestamp.c:237 toke.l:949 +#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s ägs av uid %u, ska vara %u" -#: plugins/sudoers/sudoers.c:908 toke.l:954 +#: plugins/sudoers/sudoers.c:924 toke.l:957 #, c-format msgid "%s is world writable" msgstr "%s är skrivbar för alla" -#: plugins/sudoers/sudoers.c:912 toke.l:957 +#: plugins/sudoers/sudoers.c:928 toke.l:960 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s ägs av gid %u, ska vara %u" -#: plugins/sudoers/sudoers.c:945 +#: plugins/sudoers/sudoers.c:961 #, c-format -msgid "only root can use `-c %s'" +msgid "only root can use \"-c %s\"" msgstr "endast root kan använda ”-c %s”" -#: plugins/sudoers/sudoers.c:964 +#: plugins/sudoers/sudoers.c:980 #, c-format msgid "unknown login class: %s" msgstr "okänd inloggningsklass: %s" -#: plugins/sudoers/sudoers.c:1047 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 #, c-format msgid "unable to resolve host %s" msgstr "kunde inte slå upp värddatorn %s" -#: plugins/sudoers/sudoers.c:1142 plugins/sudoers/testsudoers.c:387 -#, c-format -msgid "unknown group: %s" -msgstr "okänd grupp: %s" - -#: plugins/sudoers/sudoreplay.c:232 +#: plugins/sudoers/sudoreplay.c:236 #, c-format msgid "invalid filter option: %s" msgstr "ogiltig filterflagga: %s" -#: plugins/sudoers/sudoreplay.c:245 +#: plugins/sudoers/sudoreplay.c:249 #, c-format msgid "invalid max wait: %s" msgstr "ogiltig största väntan: %s" -#: plugins/sudoers/sudoreplay.c:251 +#: plugins/sudoers/sudoreplay.c:255 #, c-format msgid "invalid speed factor: %s" msgstr "ogiltig hastighetsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: plugins/sudoers/sudoreplay.c:286 +#: plugins/sudoers/sudoreplay.c:290 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/tidsmätning: %s" -#: plugins/sudoers/sudoreplay.c:292 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/tidsmätning: %s" -#: plugins/sudoers/sudoreplay.c:308 +#: plugins/sudoers/sudoreplay.c:312 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Spelar upp sudo-session: %s\n" -#: plugins/sudoers/sudoreplay.c:314 +#: plugins/sudoers/sudoreplay.c:318 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Varning: din terminal är för liten för att korrekt spela upp loggen.\n" -#: plugins/sudoers/sudoreplay.c:315 +#: plugins/sudoers/sudoreplay.c:319 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Logg-geometri är %d x %d, din terminals geometri är %d x %d." -#: plugins/sudoers/sudoreplay.c:406 +#: plugins/sudoers/sudoreplay.c:410 msgid "unable to set tty to raw mode" msgstr "kan inte ställa in tty i råläge" -#: plugins/sudoers/sudoreplay.c:435 +#: plugins/sudoers/sudoreplay.c:439 #, c-format msgid "invalid timing file line: %s" msgstr "ogiltig rad i tidsmätningsfil: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:659 plugins/sudoers/sudoreplay.c:684 #, c-format msgid "ambiguous expression \"%s\"" msgstr "tvetydigt uttryck ”%s”" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:706 msgid "unmatched ')' in expression" msgstr "omatchat ”)” i uttryck" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:710 #, c-format msgid "unknown search term \"%s\"" msgstr "okänt sökvillkor ”%s”" -#: plugins/sudoers/sudoreplay.c:721 +#: plugins/sudoers/sudoreplay.c:725 #, c-format msgid "%s requires an argument" msgstr "%s kräver ett argument" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1104 +#: plugins/sudoers/sudoreplay.c:728 plugins/sudoers/sudoreplay.c:1108 #, c-format msgid "invalid regular expression: %s" msgstr "ogiltigt reguljärt uttryck: %s" -#: plugins/sudoers/sudoreplay.c:728 +#: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" msgstr "kunde inte tolka datumet ”%s”" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" msgstr "omatchat ”(” i uttryck" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:743 msgid "illegal trailing \"or\"" msgstr "ogiltigt avslutande ”or”" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:745 msgid "illegal trailing \"!\"" msgstr "ogiltigt efterföljande ”!”" -#: plugins/sudoers/sudoreplay.c:790 +#: plugins/sudoers/sudoreplay.c:794 #, c-format msgid "unknown search type %d" msgstr "okänd söktyp %d" -#: plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:832 #, c-format msgid "%s: invalid log file" msgstr "%s: ogiltig loggfil" -#: plugins/sudoers/sudoreplay.c:846 +#: plugins/sudoers/sudoreplay.c:850 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: tidsstämpelfält saknas" -#: plugins/sudoers/sudoreplay.c:853 +#: plugins/sudoers/sudoreplay.c:857 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: tidsstämpel %s: %s" -#: plugins/sudoers/sudoreplay.c:860 +#: plugins/sudoers/sudoreplay.c:864 #, c-format msgid "%s: user field is missing" msgstr "%s: användarfältet saknas" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:873 #, c-format msgid "%s: runas user field is missing" msgstr "%s: runas-användarfältet saknas" -#: plugins/sudoers/sudoreplay.c:878 +#: plugins/sudoers/sudoreplay.c:882 #, c-format msgid "%s: runas group field is missing" msgstr "%s: runas-gruppfältet saknas" -#: plugins/sudoers/sudoreplay.c:1241 +#: plugins/sudoers/sudoreplay.c:1245 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "användning: %s [-h] [-d kat] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1248 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "användning: %s [-h] [-d kat] -l [sökuttryck]\n" -#: plugins/sudoers/sudoreplay.c:1253 +#: plugins/sudoers/sudoreplay.c:1257 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1702,7 +1764,7 @@ "%s - spela upp loggar från sudo-session\n" "\n" -#: plugins/sudoers/sudoreplay.c:1255 +#: plugins/sudoers/sudoreplay.c:1259 msgid "" "\n" "Options:\n" @@ -1724,11 +1786,11 @@ " -s, --speed=num påskynda eller fördröj utmatning\n" " -V, --version visa versionsinformation och avsluta" -#: plugins/sudoers/testsudoers.c:326 +#: plugins/sudoers/testsudoers.c:328 msgid "\thost unmatched" msgstr "\tvärd omatchad" -#: plugins/sudoers/testsudoers.c:329 +#: plugins/sudoers/testsudoers.c:331 msgid "" "\n" "Command allowed" @@ -1736,7 +1798,7 @@ "\n" "Kommandot tillåts" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command denied" @@ -1744,7 +1806,7 @@ "\n" "Kommandot nekades" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command unmatched" @@ -1752,130 +1814,130 @@ "\n" "Kommando omatchat" -#: plugins/sudoers/timestamp.c:245 +#: plugins/sudoers/timestamp.c:217 #, c-format msgid "%s is group writable" msgstr "%s är skrivbar för gruppen" -#: plugins/sudoers/timestamp.c:321 +#: plugins/sudoers/timestamp.c:293 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "kunde inte trunkera tidsstämpelfil till %lld byte" -#: plugins/sudoers/timestamp.c:758 plugins/sudoers/timestamp.c:825 -#: plugins/sudoers/visudo.c:499 plugins/sudoers/visudo.c:505 +#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 +#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 msgid "unable to read the clock" msgstr "kunde inte läsa klockan" -#: plugins/sudoers/timestamp.c:772 +#: plugins/sudoers/timestamp.c:752 msgid "ignoring time stamp from the future" msgstr "ignorerar tidsstämpel från framtiden" -#: plugins/sudoers/timestamp.c:784 +#: plugins/sudoers/timestamp.c:764 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tidsstämpel är för långt in i framtiden: %20.20s" -#: plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:859 #, c-format msgid "unable to lock time stamp file %s" msgstr "kunde inte låsa tidsstämpelfil %s" -#: plugins/sudoers/timestamp.c:923 plugins/sudoers/timestamp.c:943 +#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 #, c-format msgid "lecture status path too long: %s/%s" msgstr "sökväg för lektionsstatus för lång: %s/%s" -#: plugins/sudoers/visudo.c:186 +#: plugins/sudoers/visudo.c:187 #, c-format msgid "%s grammar version %d\n" msgstr "%s grammatikversion %d\n" -#: plugins/sudoers/visudo.c:264 plugins/sudoers/visudo.c:633 +#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 #, c-format msgid "press return to edit %s: " msgstr "tryck på retur för att redigera %s: " -#: plugins/sudoers/visudo.c:330 +#: plugins/sudoers/visudo.c:331 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "angiven redigerare (%s) finns inte" -#: plugins/sudoers/visudo.c:348 +#: plugins/sudoers/visudo.c:349 #, c-format msgid "no editor found (editor path = %s)" msgstr "ingen textredigerare hittad (sökväg för textredigerare = %s)" -#: plugins/sudoers/visudo.c:458 plugins/sudoers/visudo.c:466 +#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 msgid "write error" msgstr "skrivfel" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "kan inte hämta filinformation för temporärfil (%s), %s oförändrad" # sebras: not an exact translation, but I think it captures the meaning of the original text. -#: plugins/sudoers/visudo.c:519 +#: plugins/sudoers/visudo.c:520 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "temporärfil tom (%s), %s oförändrad" -#: plugins/sudoers/visudo.c:525 +#: plugins/sudoers/visudo.c:526 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redigeraren (%s) misslyckades, %s är oförändrad" -#: plugins/sudoers/visudo.c:547 +#: plugins/sudoers/visudo.c:548 #, c-format msgid "%s unchanged" msgstr "%s oförändrad" -#: plugins/sudoers/visudo.c:573 +#: plugins/sudoers/visudo.c:607 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "kunde inte återöppna temporärfil (%s), %s är oförändrad." -#: plugins/sudoers/visudo.c:585 +#: plugins/sudoers/visudo.c:619 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "kunde inte tolka temporärfil (%s), okänt fel" -#: plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:656 #, c-format msgid "internal error, unable to find %s in list!" msgstr "internt fel, kunde inte hitta %s i listan!" -#: plugins/sudoers/visudo.c:683 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kunde inte ställa in (uid, gid) för %s till (%u, %u)" -#: plugins/sudoers/visudo.c:687 plugins/sudoers/visudo.c:697 +#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "kan inte ändra läge för %s till 0%o" -#: plugins/sudoers/visudo.c:714 +#: plugins/sudoers/visudo.c:748 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s och %s finns inte på samma filsystem, använder mv för att byta namn" -#: plugins/sudoers/visudo.c:728 +#: plugins/sudoers/visudo.c:762 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "kommandot misslyckades: ”%s %s %s”, %s är oförändrad" -#: plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:772 #, c-format msgid "error renaming %s, %s unchanged" msgstr "fel vid namnbyte för %s, %s är oförändrad" -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:834 msgid "What now? " msgstr "Nu då? " -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:848 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1887,72 +1949,62 @@ " avsluta (x) utan att spara ändringar i sudoers-filen\n" " Avsluta (Q) och spara ändringar i sudoers-filen (FARLIGT!)\n" -#: plugins/sudoers/visudo.c:860 +#: plugins/sudoers/visudo.c:894 #, c-format msgid "unable to run %s" msgstr "kunde inte köra %s" -#: plugins/sudoers/visudo.c:890 +#: plugins/sudoers/visudo.c:924 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: felaktig ägare (uid, gid) ska vara (%u, %u)\n" -#: plugins/sudoers/visudo.c:897 +#: plugins/sudoers/visudo.c:931 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: felaktiga rättigheter, bör vara läge 0%o\n" -#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 #, c-format msgid "failed to parse %s file, unknown error" msgstr "misslyckades med att tolka %s-filen, okänt fel" -#: plugins/sudoers/visudo.c:944 plugins/sudoers/visudo_json.c:1040 +#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 #, c-format msgid "parse error in %s near line %d\n" msgstr "tolkningsfel i %s nära rad %d\n" -#: plugins/sudoers/visudo.c:947 plugins/sudoers/visudo_json.c:1043 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 #, c-format msgid "parse error in %s\n" msgstr "tolkningsfel i %s\n" -#: plugins/sudoers/visudo.c:955 plugins/sudoers/visudo.c:962 +#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 #, c-format msgid "%s: parsed OK\n" msgstr "%s: tolkad OK\n" -#: plugins/sudoers/visudo.c:1009 +#: plugins/sudoers/visudo.c:1041 #, c-format msgid "%s busy, try again later" msgstr "%s är upptagen, försök igen senare" -#: plugins/sudoers/visudo.c:1105 -#, c-format -msgid "Error: cycle in %s `%s'" -msgstr "Fel: cykel i %s ”%s”" - -#: plugins/sudoers/visudo.c:1106 +#: plugins/sudoers/visudo.c:1137 #, c-format -msgid "Warning: cycle in %s `%s'" -msgstr "Varning: cykel i %s ”%s”" +msgid "%s:%d cycle in %s \"%s\"" +msgstr "%s:%d cykel i %s ”%s”" -#: plugins/sudoers/visudo.c:1110 +#: plugins/sudoers/visudo.c:1140 #, c-format -msgid "Error: %s `%s' referenced but not defined" -msgstr "Fel: %s ”%s” refererad till men inte definierad" +msgid "%s:%d %s \"%s\" referenced but not defined" +msgstr "%s:%d %s ”%s” refererad till men inte definierad" -#: plugins/sudoers/visudo.c:1111 +#: plugins/sudoers/visudo.c:1292 #, c-format -msgid "Warning: %s `%s' referenced but not defined" -msgstr "Varning: %s ”%s” refererad till men inte definierad" +msgid "%s:%d unused %s \"%s\"" +msgstr "%s:%d oanvänd %s ”%s”" -#: plugins/sudoers/visudo.c:1254 -#, c-format -msgid "Warning: unused %s `%s'" -msgstr "Varning: oanvänd %s ”%s”" - -#: plugins/sudoers/visudo.c:1365 +#: plugins/sudoers/visudo.c:1403 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1961,7 +2013,7 @@ "%s - redigera sudoers-filen på ett säkert sätt\n" "\n" -#: plugins/sudoers/visudo.c:1367 +#: plugins/sudoers/visudo.c:1405 msgid "" "\n" "Options:\n" @@ -1983,15 +2035,26 @@ " -V, --version visa versionsinformation och avsluta\n" " -x, --export=utfil skriv sudoers i JSON-format till utfil" +#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#, c-format +msgid "unknown defaults entry \"%s\"" +msgstr "okänd standardpost ”%s”" + #: plugins/sudoers/visudo_json.c:1017 #, c-format msgid "%s: input and output files must be different" msgstr "%s: in- och utmatningsfiler måste vara olika" -#: toke.l:923 +#: toke.l:926 msgid "too many levels of includes" msgstr "för många nivåer av inkluderingar" +#~ msgid "Warning: cycle in %s `%s'" +#~ msgstr "Varning: cykel i %s ”%s”" + +#~ msgid "Warning: %s `%s' referenced but not defined" +#~ msgstr "Varning: %s ”%s” refererad till men inte definierad" + #~ msgid "getaudit: failed" #~ msgstr "getaudit: misslyckades" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/uk.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/uk.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/uk.po sudo-1.8.20p2/plugins/sudoers/po/uk.po --- sudo-1.8.19p1/plugins/sudoers/po/uk.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/uk.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,13 @@ # Ukrainian translation for sudoers. # This file is put in the public domain. # -# Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016. +# Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-05 14:32+0200\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 12:10+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -42,148 +42,172 @@ msgid "Sorry, try again." msgstr "Вибачте, повторіть спробу." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "не вдалося отримати потрібний об’єм пам’яті" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "для контрольної суми слід вказати шлях" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "некоректне значення notbefore" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "некоректне значення notafter" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "значення часу очікування є надто великим" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "некоректне значення часу очікування" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -307,7 +331,7 @@ msgid "PAM authentication error: %s" msgstr "Помилка розпізнавання PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "вас немає у базі даних %s" @@ -401,536 +425,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "невідоме значення uid: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "невідомий користувач: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Інструмент ведення журналу, якщо використано syslog: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Пріоритетність, яка використовуватиметься у syslog для успішних розпізнавань: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Пріоритетність, яка використовуватиметься у syslog для неуспішних розпізнавань: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Розташовувати запит щодо OTP у окремому рядку" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Ігнорувати «.» у $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Завжди надсилати листа, коли викликано sudo" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Надсилати листа, якщо користувачу не вдалося пройти розпізнавання" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Надсилати листа, якщо користувача немає серед sudoers" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Надсилати листа, якщо користувача немає у списку sudoers цього вузла" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Надсилати листа, якщо користувачеві заборонено виконувати команду" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Надсилати листа, якщо користувач намагається віддати команду" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Окремий часовий штамп для кожної комбінації користувач/tty" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Показувати настанови користувачеві під час першого запуску sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Файл з настановами щодо sudo: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Типово, вимагати розпізнавання" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Root може виконувати sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Записувати назву вузла до файла журналу (не syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Записувати рік до файла журналу (не syslog)" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Якщо sudo викликано без параметрів, запускати командну оболонку" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Встановлювати $HOME відповідно до вказаного користувача для запуску оболонки з -s" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Завжди встановлювати значенням $HOME домашній каталог вказаного користувача" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Дозволити збирання даних з метою формування зрозумілих повідомлень про помилки" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "У файлі sudoers слід вказати повні назви вузлів" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Знущатися з користувача, якщо введено помилковий пароль" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозволяти користувачеві виконувати sudo, лише якщо з ним пов’язано tty" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo зважатимwill honor the EDITOR environment variable" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Надсилати запит на пароль root, а не користувача" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Надсилати запит щодо пароля runas_default, але пароля самого користувача" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Надсилати запит щодо пароля потрібного користувача, але пароля самого користувача" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Застосовувати типові параметри у класі вказаного користувача, якщо такий клас є" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Встановити значення змінних середовища LOGNAME і USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Встановлювати для потрібного користувача ефективний uid, а не справжній uid" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Не ініціалізувати вектор групи відповідно до вказаного користувача" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Позиція, на якій слід переносити рядки файла журналу (0 — без перенесення): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Час очікування на часовий штамп розпізнавання: %.1f хвилина" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Час очікування на введення пароля: %.1f хвилина" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Кількість спроб введення пароля: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Потрібне значення umask або 0777 для користувачевого: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Шлях до файла журналу: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Шлях до програми ел. пошти: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Параметри програми ел. пошти: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса, на яку надсилатимуться листи: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса, з якої надсилатимуться листи: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Тема листів: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Повідомлення про помилковий пароль: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Шлях до каталогу стану отримання настанов: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Шлях до каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Користувачів цієї групи звільнено від потреби у введенні пароля і PATH: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Типовий запит пароля: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Якщо встановлено, запит щодо паролю замінюватиме запит системи." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Типовий користувач для запуску команд: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Значення для заміни $PATH користувача: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Шлях до редактора, який використовуватиме visudo: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «list»: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «verify»: %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Попередньо завантажувати фіктивні функції виконання з бібліотеки sudo_noexec" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Чи слід ігнорувати локальний файл sudoers, якщо є доступ до каталогу LDAP" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Дескриптори файлів >= %d буде закрито перед виконанням команди" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Якщо встановлено, користувачі можуть перевизначати значення «closefrom» за допомогою параметра -C" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Дозволити користувачам встановлювати значення довільних змінних середовища" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Відновити типовий набір змінних середовища" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Змінні середовища, коректність яких слід перевіряти:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Змінні середовища, які слід вилучити:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Змінні середовища, які слід зберегти:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Роль SELinux, яку слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Тип SELinux, який слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Шлях до специфічного для sudo файла середовища: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Шлях до специфічного для sudo файла середовища з обмеженим доступом: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Локаль, яку слід використати під час обробки sudoers: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозволити sudo надсилати запит щодо пароля, навіть якщо цей пароль буде видимим" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Супроводжувати введення користувачем пароля показом замінників символів пароля" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Швидше встановлення відповідності, менш точне, але без доступу до файлової системи" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 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:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Записувати дані, вказані користувачем під час виконання команди" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Записувати дані, виведені командою під час виконання" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Стискати журнали за допомогою zlib" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Завжди запускати команди у псевдо-tty" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Додаток для підтримки не-Unix груп: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Каталог, у якому слід зберігати журнали введення/виведення: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Файл, у якому слід зберігати журнал введення/виведення даних: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додати запис до файла utmp/utmpx під час розміщення pty" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Встановити користувача у utmp у значення користувача, від імені якого виконується команда" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Набір дозвільних прав доступу" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Набір обмежувальних прав доступу" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Виконувати команди у pty у фоновому режимі" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Назва служби PAM, якою слід скористатися" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Назва служби PAM, якою слід скористатися для оболонок входу до системи" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Спробувати встановити реєстраційні дані PAM для користувача, від імені якого виконуватимуться дії" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Створити сеанс PAM для виконання команди" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Максимальний номер у послідовності журналу введення-виведення: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Увімкнути підтримку мережевих груп у sudoers" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Перевіряти можливість запису до батьківського каталогу під час редагування фалів за допомогою sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Переходити за символічними посиланнями під час редагування файлів за допомогою sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Надсилати запит до додатка груп щодо невідомих груп системи" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Встановлювати відповідність мережевим групам за усім кортежем даних: користувачем, вузлом і доменом" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до журналу аудиту" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до журналу введення-виведення" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до файла журналу" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Визначати групи у sudoers і встановлювати відповідність не назві, а ідентифікатору групи" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Записи журналу, які виявляться довшими за це значення, буде поділено на декілька повідомлень журналу системи" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Записи журналу, які виявляться довшими за це значення, буде поділено на декілька повідомлень журналу системи: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Користувач, який буде власником усіх файлів журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Група, яка буде власником усіх файлів журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Режим доступу до файлів, яким слід скористатися для файлів журналу введення-виведення: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Виконати команди за дескриптором файла замість виконання за шляхом: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Ігнорувати невідомі записи Defaults у sudoers замість показу попередження" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Час у секундах, який має минути, щоб команду буде перервано: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Надати змогу користувачеві встановлювати час очікування у командному рядку" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Скидати дані журналу введення-виведення на диск негайно, без буферизації" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d невідомий запис типових параметрів, «%s»" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: невідомий запис типових параметрів, «%s»" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d не вказано значення для «%s»" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: не вказано значення для «%s»" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d значення для «%s» має починатися з «/»" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: значення для «%s» має починатися з «/»" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d параметру «%s» не потрібно передавати значення" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: параметру «%s» не потрібно передавати значення" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d некоректний тип Defaults, 0x%x, для параметра «%s»" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: некоректний тип Defaults, 0x%x, для параметра «%s»" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d значення «%s» є некоректним для параметра «%s»" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: значення «%s» є некоректним для параметра «%s»" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "внутрішня помилка, переповнення %s" @@ -939,15 +991,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: помилкове значення envp, невідповідність довжин" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "не вдалося перебудувати середовище" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "вибачте, вам не дозволено встановлювати такі змінні середовища: %s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "непідтримуваний тип контрольної суми, %d, для %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: помилка читання" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -987,82 +1051,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Пари локальних IP-адрес і масок мережі:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s існує, але не є каталогом (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "не вдалося створити каталог %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "не вдалося змінити режим доступу до %s на значення 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "невідома група: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "не вдалося прочитати %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "не вдалося створити %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не вдалося здійснити запис до файла журналу введення-виведення: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: внутрішня помилка, не вдалося відкрити файл з індексом %d" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: занадто великий номер порту" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "непідтримуваний тип адреси LDAP: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "не можна використовувати суміш з адрес ldap і ldaps" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "підтримки starttls, якщо використовується ldaps, не передбачено" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не вдалося ініціалізувати базу даних сертифікатів і ключів SSL: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "щоб скористатися SSL, вам слід встановити для TLS_CERT значення %s" @@ -1080,7 +1150,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1089,7 +1159,7 @@ "\n" "Роль LDAP: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1098,27 +1168,27 @@ "\n" "Роль у LDAP: НЕВІДОМА\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Порядок: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Команди:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не вдалося ініціалізувати LDAP: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 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:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "некоректний атрибут sudoOrder: %s" @@ -1196,15 +1266,15 @@ 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:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: команду не знайдено" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1254,38 +1324,28 @@ msgid "unable to execute %s: %m" msgstr "не вдалося виконати %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "непідтримуваний тип контрольної суми, %d, для %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: помилка читання" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "контрольну суму для %s (%s) подано не у формі %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "не вдалося виконати stat для %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "помилка обробки у %s поблизу рядка %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "помилка обробки у %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1294,41 +1354,41 @@ "\n" "Запис sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " Користувачі для запуску: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " Групи для запуску: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Параметри: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "не вдалося обробити список мережевих адрес" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Додаток правил sudoers версії %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматична перевірка файла sudoers версії %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1337,22 +1397,22 @@ "\n" "Шлях до sudoers: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "Шлях до nsswitch: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "Шлях до ldap.conf: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "Шлях до ldap.secret: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "неможливо зареєструвати процедуру перехоплення типу %d (версія %d.%d)" @@ -1421,48 +1481,48 @@ msgid "unable to parse gids for %s" msgstr "не вдалося обробити записи ідентифікаторів груп %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "переповнення стека доступу" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "вичерпання стека доступу" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "не вдалося змінити ідентифікатор групи (gid) root" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "не вдалося змінити gid на runas" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "не вдалося встановити вектор групи виконання" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "не вдалося змінити uid на runas" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "не вдалося змінити gid на sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "забагато процесів" @@ -1495,7 +1555,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "не вдалося знайти символ «%s» у %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1504,7 +1564,7 @@ "\n" "Роль SSSD: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1533,84 +1593,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Користувач %s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "не вдалося ініціалізувати типові значення sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "проблема з типовими записами" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "не знайдено коректних джерел даних sudoers, завершення роботи" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers вказує, що sudo не можна користуватися для виконання команд від root" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "вам не дозволено використовувати параметр -C" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник часового штампа (%s): не знайдено користувача з таким іменем" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "немає tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "вибачте, для виконання sudo вашому користувачеві потрібен tty" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "команда у поточному каталозі" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "вибачте, вам не дозволено встановлювати час очікування на виконання команди" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "вибачте, вам не дозволено зберігати середовище" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "надто довга команда" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s належить gid %u, має належати %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "використовувати «-c %s» може лише root" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "невідомий клас входу: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "не вдалося визначити адресу вузла %s" @@ -1630,7 +1694,7 @@ msgid "invalid speed factor: %s" msgstr "некоректний коефіцієнт швидкості: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s, версія %s\n" @@ -1786,11 +1850,11 @@ " -s, --speed=коеф_швидк коефіцієнт прискорення або сповільнення виводу даних\n" " -V, --version показати дані щодо версії і завершити роботу" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tвідповідника вузла не знайдено" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1798,7 +1862,7 @@ "\n" "Команду дозволено" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1806,7 +1870,7 @@ "\n" "Команду заборонено" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1814,129 +1878,124 @@ "\n" "Не знайдено відповідника команди" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s доступний до запису учасниками групи" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "не вдалося обрізати файл часової позначки до %lld байтів" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "не вдалося прочитати час на годиннику" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ігноруємо часову позначку з майбутнього" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "занадто далека часова позначка у майбутньому: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "не вдалося заблокувати файл часової позначки %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "шлях до даних щодо стану отримання настанов є занадто довгим: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "Граматична перевірка %s, версія %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "натисніть Enter для редагування %s: " -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "вказаного редактора (%s) не існує" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "не знайдено жодного редактора (шлях до редактора = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "помилка запису" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не вдалося обробити stat файл тимчасових даних (%s), %s не змінено" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "файл тимчасових даних має нульовий об’єм (%s), %s не змінено" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "помилка редактора (%s), %s не змінено" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s не змінено" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не вдалося повторно відкрити файл тимчасових даних (%s), %s не змінено." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "не вдалося обробити файл тимчасових даних (%s), невідома помилка" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "внутрішня помилка, не вдалося знайти %s у списку!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не вдалося встановити (uid, gid) %s у значення (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "не вдалося змінити режим доступу до %s на значення 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s і %s не перебувають у одній файловій системі, використовуємо mv для перейменування" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "помилка команди: «%s %s %s», %s не змінено" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "помилка перейменування %s, %s не змінено" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "А зараз що? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1948,62 +2007,72 @@ " (x) — вийти без внесення змін до файла sudoers\n" " (Q) — вийти зі збереженням файла sudoers (НЕБЕЗПЕЧНО!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: помилковий власник (uid, gid), має бути (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: помилкові права доступу, режим доступу має бути 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "не вдалося обробити файл %s, невідома помилка" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "помилка обробки у %s поблизу рядка %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "помилка обробки у %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: вдала обробка\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s зайнято, повторіть спробу пізніше" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Помилка: %s:%d цикл у %s «%s»" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Попередження: %s:%d цикл у %s «%s»" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d цикл у %s «%s»" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Помилка: виявлено посилання %s:%d %s «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d %s «%s» має посилання, але його не визначено" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Попередження: виявлено посилання %s:%d %s «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d невикористані %s «%s»" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Попердження: %s:%d не використано %s «%s»" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2012,7 +2081,7 @@ "%s — безпечне редагування файла sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2034,17 +2103,17 @@ " -V, --version показати дані щодо версії і завершити роботу\n" " -x, --export=файл експортувати sudoers у форматі JSON до файла" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "невідомий запис типових параметрів «%s»" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: файли вхідних і вихідних даних мають бути різними файлами" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "занадто високий рівень вкладеності" @@ -2102,9 +2171,6 @@ #~ msgid "unable to reset %s to the Unix epoch" #~ msgstr "не вдалося скинути час %s до епохи UNIX" -#~ msgid "invalid value" -#~ msgstr "некоректне значення" - #~ msgid "value out of range" #~ msgstr "значення поза припустимим діапазоном" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/vi.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/vi.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/vi.po sudo-1.8.20p2/plugins/sudoers/po/vi.po --- sudo-1.8.19p1/plugins/sudoers/po/vi.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/vi.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,14 +1,14 @@ # Vietnamese translation for sudo. # Bản dịch tiếng Việt dành cho sudo. # This file is put in the public domain. -# Trần Ngọc Quân , 2012-2014, 2015, 2016. +# Trần Ngọc Quân , 2012-2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-06 08:36+0700\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-28 13:59+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -45,148 +45,172 @@ msgid "Sorry, try again." msgstr "Rất tiếc, hãy thử lại." -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "không thể cấp phát bộ nhớ" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "tóm lược yêu cầu một đối số là tên đường dẫn" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "giá trị notbefore không hợp lệ" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "giá trị notafter không hợp lệ" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "giá trị timeout quá lớn" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "giá trị timeout không hợp lệ" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -232,7 +256,7 @@ "authentication server error:\n" "%s" msgstr "" -"lỗi máy phục vụ xác thực:\n" +"lỗi máy phục vụ xác thực:\n" "%s" #: plugins/sudoers/auth/kerb5.c:111 @@ -310,7 +334,7 @@ msgid "PAM authentication error: %s" msgstr "lỗi xác thực PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "bạn không tồn tại trong cơ sở dữ liệu %s" @@ -404,536 +428,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "không biết mã số người dùng: %u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "không biết người dùng: %s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Trang bị Syslog nếu syslog được sử dụng cho việc ghi nhật ký: %s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Mức ưu tiên Syslog sẽ sử dụng khi người dùng đăng nhập thành công: %s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Mức ưu tiên Syslog sẽ sử dụng khi người dùng đăng nhập không thành công: %s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "Đặt nhắc OTP (mật khẩu dùng một lần) tại dòng nó sở hữu" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "Bỏ qua “.” trong biến $PATH" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "Luôn gửi thư mỗi khi chạy lệnh sudo" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "Gửi thư nếu xác thực người dùng gặp lỗi" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "Gửi thư nếu người dùng không ở trong sudoers" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "Gửi thư nếu người dùng không có trong sudoers cho máy chủ này" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "Gửi thư nếu người dùng không được phép chạy lệnh nào đó" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "Gửi thư nếu người cố chạy lệnh nào đó" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "Sử dụng dấu vết thời gian riêng rẽ cho từng cặp tkhoản/tty" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "Hướng dẫn người dùng lần đầu tiên họ chạy lệnh sudo" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "TẬP-TIN chứa thuyết trình về “sudo”: %s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "Yêu cầu người dùng chứng thực theo mặc định" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "Siêu người dùng (root) có thể chạy lệnh sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "Ghi nhật ký tên-máy-chủ vào tập tin nhật ký (không dùng syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "Ghi nhật ký năm vào tập tin nhật ký (không dùng syslog)" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Nếu lệnh sudo được triệu gọi mà không đưa ra tham số thì khởi chạy hệ vỏ" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Đặt biến $HOME cho người dùng đích khi sử dụng hệ vỏ (shell) với tùy chọn -s" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "Luôn đặt biến $HOME cho thư mục cá nhân của người dùng đích" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "Cho phép một số thông tin được thu thập để đưa ra các thông tin về lỗi hữu dụng" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Yêu cầu tên máy chủ dạng đầy đủ trong tập tin sudoers" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "Lăng mạ người dùng khi họ nhập vào mật khẩu sai" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "Chỉ cho phép người dùng chạy lệnh sudo nếu họ có tty" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo sẽ tôn trọng biến môi trường EDITOR" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "Hỏi mật khẩu của siêu người dùng, chứ không phải của người dùng" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Nhắc mật khẩu của người dùng runas_mặc_định, không phải của người dùng" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "Nhắc mật khẩu của người dùng đích, không phải cái hiện tại" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "Áp dụng mặc định trong lớp đăng nhập người dùng đích nếu ở đây có một" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "Đặt biến môi trường LOGNAME và USER" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Chỉ đặt uid đang có hiệu lực cho người dùng đích, không sử dụng uid thật" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "Không khởi tạo véc-tơ nhóm cho người dùng đích" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Độ dài mà tại đó các dòng trong tập tin nhật ký được ngắt dòng (0 là không ngắt dòng): %u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" -msgstr "Thời gian chờ dấu vết thời gian xác thực tối đa: %.1f phút" +msgstr "Thời gian chờ dấu vết thời gian xác thực tối đa: %.1f phút" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Thời gian chờ nhắc mật khẩu tối đa: %.1f phút" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Số lần nhập mật khẩu: %u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask để sử dụng hoặc 0777 để sử dụng của người dùng: 0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "Đường dẫn tới tập tin nhật ký: “%s”" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "Đường dẫn tới chương trình gửi thư (mail) %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "Các cờ dành cho chương trình gửi thư (mail): %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "Địa chỉ để gửi thư đến: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "Địa chỉ dùng để gửi thư từ: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "Chủ đề cho thư: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "Mật khẩu không đúng: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "Đường dẫn đến thư mục trạng thái thuyết trình: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Đường dẫn thư mục dấu vết thời gian xác thực: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Chủ sở hữu đường dẫn thư mục dấu vết thời gian xác thực: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Những tài khoản trong nhóm này được miễn mật khẩu và yêu cầu PATH: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "Lời nhắc nhập mật khẩu mặc định: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "Nếu được đặt, lời nhắc mật khẩu sẽ đè lên dấu nhắc hệ thống trong mọi trường hợp." -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "Tài khoản mặc định chạy lệnh như là: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Giá trị dùng để ghi đè lên $PATH của người dùng: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Đường dẫn tới trình biên soạn để sử dụng cho lệnh visudo: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Khi được yêu cầu mật khẩu cho “liệt kê” lệnh-giả: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Khi được yêu cầu mật khẩu cho lệnh-giả “verify” (“thẩm tra”): %s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Tải trước các hàm thi hành giả được chứa trong thư viện sudo_noexec" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Nếu thư mục LDAP đã bật, chúng tôi sẽ lờ đi tập tin sudoers phải không" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Các bộ mô tả tập tin >= %d sẽ bị đóng trước khi chạy một lệnh" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Nếu được đặt, người dùng có thể ghi đè lên giá trị của “closefrom” bằng tùy chọn -C" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "Cho phép người dùng đặt biến môi trường tùy ý" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "Đặt lại biến môi trường thành giá trị mặc định của chúng" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "Các biến môi trường được kiểm tra xem có đúng mực không:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "Các biến môi trường bị gỡ bỏ:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "Các biến môi trường được giữ lại:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Vai trò SELinux được dùng trong ngữ cảnh an ninh mới: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Kiểu SELinux được dùng trong ngữ cảnh an ninh mới: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Đường dẫn tới tập tin môi trường đặc-tả-sudo: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "Đường dẫn tới tập tin môi trường đặc-tả-sudo-hạn-chế: %s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Miền địa phương sẽ sử dụng khi phân tích sudoers: %s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Cho phép sudo hỏi mật khẩu thậm chí ngay cả khi nó đã rõ ràng" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Cung cấp phản hồi ảo lúc nhắc mật khẩu khi đây là đầu nhập người dùng" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Sử dụng globbing kiểu nhanh hơn mà nó thì kém chính xác hơn nhưng lại không cần truy cập hệ thống tập tin" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Giá trị umask được chỉ định trong sudoers sẽ ghi đè lên giá trị này của người dùng, thậm chí nó còn dễ dãi hơn" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "Ghi nhật ký kết xuất từ người dùng cho lệnh đang chạy" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "Ghi lại nhật ký kết xuất của lệnh đang chạy" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "Nén nhật ký V/R sử dụng định dạng zlib" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "Luôn chạy lệnh ở tty-giả" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Phần bổ sung cho hỗ trợ nhóm không-Unix: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Thư mục mà nó sẽ lưu nhật ký vào/ra: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Tập tin mà nó sẽ lưu nhật ký vào/ra: %s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Thêm một mục vào tập tin utmp/utmpx khi phân bổ một pty" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Đặt người dùng trong utmp thành người dùng runasr, không phải người dùng gọi" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "Tập hợp các đặc quyền được phép" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "Tập hợp các quyền bị giới hạn" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "Chạy các câu lệnh trên một pty trong nền hệ thống" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "Tên dịch vụ PAM được dùng" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "Tên dịch vụ PAM được dùng cho các hệ vỏ đăng nhập" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "Thử thiết lập ủy nhiệm PAM cho người dùng đích" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "Tạo một phiên PAM mới để lệnh chạy với nó" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Số lượng nhật ký I/O tối đa: %u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "Bật hỗ trợ nhóm-mạng “sudoers”" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Kiểm tra xem các thư mục cha có ghi được hay không khi sửa các tập tin bằng sudoedit" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Theo các liên kết mềm khi sửa các tập tin bằng sudoedit" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "Truy vấn các phần bổ sung nhóm cho các nhóm hệ thống chưa biết" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Khớp nhóm mạng trên cơ sở toàn thể bộ dữ liệu : tài khoản, tên máy và tên miền" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Cho phép các lệnh có thể chạy ngay cả khi sudo không thể ghi vào nhật ký audit" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Cho phép các lệnh có thể chạy ngay cả khi sudo không thể ghi vào nhật ký V/R" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Cho phép các lệnh có thể chạy ngay cả khi sudo không thể ghi vào tập tin nhật ký" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Phân giải các nhóm trong sudoers và khớp dựa trên mã số nhóm, không phải là tên" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "Các mục tin của nhật ký lớn hơn giá trị này sẽ được chia thành nhiều chuỗi syslog nhỏ" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "Các mục tin của nhật ký lớn hơn giá trị này sẽ được chia thành nhiều chuỗi syslog nhỏ: %u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Người mà sẽ sở hữu tập tin nhật ký V/R: %s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Nhóm mà sẽ sở hữu tập tin nhật ký V/R: %s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Chế độ tập tin được dùng cho tập tin nhật ký V/R: 0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "Thực thi các lệnh theo bộ mô tả tập tin thay cho đường dẫn: %s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "Bỏ qua các mục tin Mặc định chưa biết trong sudoers thay vì đưa ra cảnh báo" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "Thời gian theo giây sau đó thì lệnh sẽ bị chấm dứt: %u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "Cho phép người dùng chỉ định thời gian chờ dòng lệnh tối đa" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "Đẩy dữ liệu nhật ký V/R lên đĩa ngay lập tức thay vì nhớ đệm nó" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d không hiểu mục tin mặc định “%s”" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: không hiểu mục tin mặc định “%s”" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d chưa chỉ ra giá trị cho “%s”" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: chưa chỉ ra giá trị cho “%s”" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d giá trị cho “%s” phải bắt đầu bằng dấu “/”" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: giá trị cho “%s” phải bắt đầu bằng dấu “/”" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d tùy chọn “%s” không nhận giá trị" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: tùy chọn “%s” không nhận giá trị" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d kiểu Defaults không hợp lệ 0x%x cho tùy chọn “%s”" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: kiểu Defaults không hợp lệ 0x%x cho tùy chọn “%s”" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d giá trị “%s” là không hợp lệ đối với tùy chọn “%s”" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: giá trị “%s” là không hợp lệ đối với tùy chọn “%s”" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "lỗi nội bộ, %s bị tràn" @@ -942,15 +994,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp sai hỏng, chiều dài không khớp" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "không thể xây dựng lại môi trường" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "rất tiếc, bạn không được phép đặt các biến môi trường sau đây: %1s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "không hỗ trợ kiểu tóm lược %d dành cho %s" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s: lỗi đọc" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -990,82 +1054,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "Cặp địa chỉ IP và mặt nạ cục bộ:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s có tồn tại nhưng nó không phải là một thư mục (0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "không thể tạo thư mục “%s”" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "không thể chuyển đổi chế độ của %s thành 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "không nhận ra nhóm: %s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "không thể mở “%s”" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "không thể đọc %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "không thể ghi vào %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "không thể tạo “%s”" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "không thể ghi vào tập tin nhật ký V/R: %s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s: lỗi hệ thống, tập tin mục lục %d chưa được mở" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: cổng quá lớn" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "không hỗ trợ kiểu “LDAP uri”: %s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "không thể trộn ldap và ldaps URIs" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "“starttls” chỉ được hỗ trợ khi dùng với “ldaps”" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "không thể khởi tạo chứng nhận SSL và csdl khóa: %s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "bạn phải đặt TLS_CERT trong %s để sử dụng SSL" @@ -1083,7 +1153,7 @@ msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1092,7 +1162,7 @@ "\n" "Vai trò LDAP: %s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1101,27 +1171,27 @@ "\n" "Vai trò LDAP: KHÔNG HIỂU\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " Thứ tự: %s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " Lệnh:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "không thể khởi tạo LDAP: %s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls được chỉ ra nhưng thư viện LDAP không hỗ trợ ldap_start_tls_s() hoặc ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "thuộc tính sudoOrder không hợp lệ: %s" @@ -1182,12 +1252,12 @@ #: plugins/sudoers/logging.c:281 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" -msgstr "%s không trong tập tin sudoers. Sự việc này sẽ được báo cáo.\n" +msgstr "%s không trong tập tin sudoers. Sự việc này sẽ được báo cáo.\n" #: plugins/sudoers/logging.c:284 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" -msgstr "%s không được phép chạy lệnh sudo trên %s. Sự việc này sẽ được báo cáo.\n" +msgstr "%s không được phép chạy lệnh sudo trên %s. Sự việc này sẽ được báo cáo.\n" #: plugins/sudoers/logging.c:288 #, c-format @@ -1199,15 +1269,15 @@ msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Rất tiếc, tài khoản %s không được phép thi hành “%s%s%s” như là %s%s%s trên %s.\n" -#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s: không tìm thấy lệnh" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1254,38 +1324,28 @@ msgid "unable to execute %s: %m" msgstr "không thể thực thi %s: %m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "không hỗ trợ kiểu tóm lược %d dành cho %s" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s: lỗi đọc" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "tóm lược cho %s (%s) không ở dạng thức %s" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "không thể lấy thống kê %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "lỗi phân tích trong %s gần dòng %d" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "gặp lỗi phân tích trong %s" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1294,41 +1354,41 @@ "\n" "Mục Sudoers:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " ChạyVớiTưCáchNgườiDùng: " -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " ChạyVớiTưCáchNhóm: " -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " Tùy chọn: " -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "không thể phân tích danh sách địa chỉ mạng" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "không thể thực thi %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Phiên bản của phần bổ sung chính sách Sudoers %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Phiên bản ngữ pháp tập tin Sudoers %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1337,22 +1397,22 @@ "\n" "Đường dẫn Sudoers: %s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "đường dẫn nsswitch: %s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "đường dẫn ldap.conf: %s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "đường dẫn ldap.secret: %s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "không thể đăng ký móc kiểu %d (phiên bản %d.%d)" @@ -1421,48 +1481,48 @@ msgid "unable to parse gids for %s" msgstr "không thể phân tích mã số nhóm cho %s" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "ngăn xếp perm bị tràn" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "ngăn xếp stack tràn ngầm" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "không thể thay đổi mã số nhóm của siêu người dùng root" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "không thể thay đổi thành runas gid" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "không thể đặt véc-tơ nhóm runas" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "không thể thay đổi thành runas uid" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "không thể thay đổi thành mã số nhóm sudoers" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "quá nhiều tiến trình" @@ -1495,7 +1555,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "không thể tìm thấy ký hiệu “%s” trong %s" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1504,7 +1564,7 @@ "\n" "Vai trò SSSD: %s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1533,84 +1593,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Tài khoản %s không được phép thi hành sudo trên %s.\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "không thể khởi giá trị mặc định sudoers" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "trục trặc với các mục mặc định" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "không có người dùng hợp lệ nào được tìm thấy, đang thoát ra" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers đã ghi rõ là siêu người dùng (root) không được phép chạy sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "bạn không được phép sử dụng tùy chọn -C" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "người sở hữu dấu vết thời gian (%s): Không có người dùng nào như vậy" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "không có tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "rất tiếc, bạn phải có tty mới có thể chạy sudo" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "lệnh trong thư mục hiện hành" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "rất tiếc, bạn không được phép đặt thời gian chờ lệnh tối đa" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "rất tiếc, bạn không được phép giữ lại môi trường" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "lệnh quá dài" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s không phải tập tin thường" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s được sở hữu bởi người dùng mang mã số %u, nên là %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s ai ghi cũng được" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s được sở hữu bởi nhóm mang mã số %u, nên là %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "chỉ có siêu người dùng (root) mới có thể sử dụng “-c %s”" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "không rõ lớp đăng nhập: %s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "không thể phân giải địa chỉ của máy %s" @@ -1630,7 +1694,7 @@ msgid "invalid speed factor: %s" msgstr "sai hệ số nhân tốc độ: %s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s phiên bản %s\n" @@ -1696,7 +1760,7 @@ #: plugins/sudoers/sudoreplay.c:732 #, c-format msgid "could not parse date \"%s\"" -msgstr "không thể phân tích ngày tháng “%s”" +msgstr "không thể phân tích ngày tháng “%s”" #: plugins/sudoers/sudoreplay.c:741 msgid "unmatched '(' in expression" @@ -1786,11 +1850,11 @@ " -s, --speed=số tăng hoặc giảm tốc độ kết xuất\n" " -V, --version hiển thị thông tin về phiên bản rồi thoát" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\tmáy chủ không khớp" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1798,7 +1862,7 @@ "\n" "Lệnh được phép" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1806,7 +1870,7 @@ "\n" "Lệnh bị cấm" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1814,129 +1878,124 @@ "\n" "Lệnh không khớp" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s là người cùng nhóm được ghi" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "không thể cắt ngắn tập tin dấu-vết-thời-gian thành %lld byte" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "không thể đọc khóa" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "bỏ qua dấu vết thời gian nằm ở thì tương lai" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "dấu vết thời gian nằm ở thì tương lai: %20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "không thể khóa tập tin dấu-vết-thời-gian %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "đường dẫn đến thư mục thuyết trình quá dài: %s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "Ngữ pháp %s phiên bản %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "bấm phím để trở về chỉnh sửa %s:" -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "trình biên soạn đã chỉ ra (%s) không tồn tại" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "không tìm thấy trình biên soạn (đường dẫn của nó = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "lỗi ghi" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "không thể lấy thống kê tập tin tạm (%s), %s không thay đổi gì." -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "tập tin tạm (%s) có kích cỡ bằng không, %s không thay đổi gì" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "trình biên soạn (%s) gặp lỗi, %s không thay đổi gì" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s không thay đổi" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "không thể mở lại tập tin tạm (%s), %s không thay đổi gì." -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "không thể phân tích tập tin tạm (%s), lỗi chưa được biết" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "lỗi hệ thống, không thể tìm thấy %s trong danh sách!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "không thể đặt (uid, gid) của %s thành (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "không thể chuyển đổi chế độ của %s thành 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s và %s không ở trên cùng một hệ thống tập tin, sử dụng lệnh mv để đổi tên" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "thực hiện lệnh gặp lỗi: “%s %s %s”, %s không thay đổi" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "gặp lỗi khi đổi tên %s, %s không thay đổi" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "Vậy làm gì bây giờ? " -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1948,62 +2007,72 @@ " (x) thoát ra mà không ghi lại tập tin sudoerse\n" " (q) thoát ra và ghi lại tập tin sudoers (NGUY HIỂM!)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "không thể chạy %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: sai sở hữu (uid, gid) đáng lẽ là (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: phân quyền sai, phải ở chế độ 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "gặp lỗi khi phân tích tập tin %s, không rõ bị lỗi gì" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "lỗi cú pháp trong %s gần dòng %d\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "lỗi cú pháp trong %s\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s: vượt qua kiểm duyệt\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s đang bận, hãy thử lại sau" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "Lỗi: %s:%d bị quẩn tròn trong %s “%s”" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "Cảnh báo: %s:%d bị quẩn tròn trong %s “%s”" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d bị quẩn tròn trong %s “%s”" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "Lỗi: %s:%d %s “%s” được tham chiếu nhưng chưa được định nghĩa" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d %s “%s” được tham chiếu nhưng chưa được định nghĩa" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "Cảnh báo: %s:%d %s “%s” được tham chiếu nhưng chưa được định nghĩa" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d không dùng %s “%s”" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "Cảnh báo: %s:%d không dùng %s “%s”" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2012,7 +2081,7 @@ "%s - sửa tập tin sudoers một cách an toàn\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2034,17 +2103,17 @@ " -V, --version hiển thị thông tin về phiên bản rồi thoát\n" " -x, --export=tập-tin-ra xuất sudoers theo định dạng JSON" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "không hiểu mục tin mặc định “%s”" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s: các tập tin đầu vào và đầu ra phải khác nhau" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "quá nhiều cấp bao gồm (include)" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/plugins/sudoers/po/zh_CN.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/plugins/sudoers/po/zh_CN.mo differ diff -Nru sudo-1.8.19p1/plugins/sudoers/po/zh_CN.po sudo-1.8.20p2/plugins/sudoers/po/zh_CN.po --- sudo-1.8.19p1/plugins/sudoers/po/zh_CN.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/po/zh_CN.po 2017-05-10 15:38:43.000000000 +0000 @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.19b2\n" +"Project-Id-Version: sudoers 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-12-03 19:24-0700\n" -"PO-Revision-Date: 2016-12-06 11:17+0800\n" +"POT-Creation-Date: 2017-03-24 15:36-0600\n" +"PO-Revision-Date: 2017-03-26 19:24+0800\n" "Last-Translator: Wylmer Wang \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" @@ -41,148 +41,172 @@ msgid "Sorry, try again." msgstr "对不起,请重试。" -#: gram.y:186 gram.y:234 gram.y:241 gram.y:248 gram.y:255 gram.y:262 -#: gram.y:278 gram.y:301 gram.y:308 gram.y:315 gram.y:322 gram.y:329 -#: gram.y:384 gram.y:392 gram.y:402 gram.y:432 gram.y:439 gram.y:446 -#: gram.y:453 gram.y:565 gram.y:572 gram.y:581 gram.y:590 gram.y:607 -#: gram.y:663 gram.y:670 gram.y:677 gram.y:685 gram.y:781 gram.y:788 -#: gram.y:795 gram.y:802 gram.y:809 gram.y:835 gram.y:842 gram.y:849 -#: gram.y:972 gram.y:1148 gram.y:1155 plugins/sudoers/alias.c:124 +#: gram.y:192 gram.y:240 gram.y:247 gram.y:254 gram.y:261 gram.y:268 +#: gram.y:284 gram.y:307 gram.y:314 gram.y:321 gram.y:328 gram.y:335 +#: gram.y:398 gram.y:406 gram.y:416 gram.y:449 gram.y:456 gram.y:463 +#: gram.y:470 gram.y:552 gram.y:559 gram.y:568 gram.y:577 gram.y:594 +#: gram.y:706 gram.y:713 gram.y:720 gram.y:728 gram.y:824 gram.y:831 +#: gram.y:838 gram.y:845 gram.y:852 gram.y:878 gram.y:885 gram.y:892 +#: gram.y:1015 gram.y:1195 gram.y:1202 plugins/sudoers/alias.c:124 #: plugins/sudoers/alias.c:139 plugins/sudoers/auth/bsdauth.c:141 #: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:618 -#: plugins/sudoers/defaults.c:873 plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:631 +#: plugins/sudoers/defaults.c:886 plugins/sudoers/defaults.c:1057 #: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 #: plugins/sudoers/editor.c:93 plugins/sudoers/env.c:234 -#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 -#: plugins/sudoers/interfaces.c:71 plugins/sudoers/iolog.c:805 -#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:447 -#: plugins/sudoers/ldap.c:478 plugins/sudoers/ldap.c:530 -#: plugins/sudoers/ldap.c:563 plugins/sudoers/ldap.c:961 -#: plugins/sudoers/ldap.c:1157 plugins/sudoers/ldap.c:1168 -#: plugins/sudoers/ldap.c:1184 plugins/sudoers/ldap.c:1471 -#: plugins/sudoers/ldap.c:1631 plugins/sudoers/ldap.c:1713 -#: plugins/sudoers/ldap.c:1853 plugins/sudoers/ldap.c:1877 -#: plugins/sudoers/ldap.c:1966 plugins/sudoers/ldap.c:1981 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap.c:2110 -#: plugins/sudoers/ldap.c:2263 plugins/sudoers/ldap.c:2360 -#: plugins/sudoers/ldap.c:3178 plugins/sudoers/ldap.c:3210 -#: plugins/sudoers/ldap.c:3519 plugins/sudoers/ldap.c:3547 -#: plugins/sudoers/ldap.c:3563 plugins/sudoers/ldap.c:3653 -#: plugins/sudoers/ldap.c:3669 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/filedigest.c:120 plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 +#: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 +#: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 +#: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 +#: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2191 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3572 +#: plugins/sudoers/ldap.c:3588 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 #: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 #: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:683 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:501 -#: plugins/sudoers/match.c:535 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:828 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:405 plugins/sudoers/policy.c:632 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:139 -#: plugins/sudoers/pwutil.c:210 plugins/sudoers/pwutil.c:286 -#: plugins/sudoers/pwutil.c:457 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:591 plugins/sudoers/pwutil.c:749 -#: plugins/sudoers/pwutil.c:806 plugins/sudoers/pwutil.c:851 -#: plugins/sudoers/pwutil.c:908 plugins/sudoers/sssd.c:162 -#: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 -#: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1234 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:107 -#: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 -#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 -#: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 -#: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 -#: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 -#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:617 +#: plugins/sudoers/match.c:664 plugins/sudoers/match.c:714 +#: plugins/sudoers/match.c:738 plugins/sudoers/match.c:826 +#: plugins/sudoers/match.c:915 plugins/sudoers/parse.c:248 +#: plugins/sudoers/parse.c:260 plugins/sudoers/parse.c:275 +#: plugins/sudoers/parse.c:287 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 +#: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 +#: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 +#: plugins/sudoers/sssd.c:162 plugins/sudoers/sssd.c:194 +#: plugins/sudoers/sssd.c:237 plugins/sudoers/sssd.c:244 +#: plugins/sudoers/sssd.c:280 plugins/sudoers/sssd.c:390 +#: plugins/sudoers/sssd.c:462 plugins/sudoers/sssd.c:1054 +#: plugins/sudoers/sssd.c:1233 plugins/sudoers/sssd.c:1247 +#: plugins/sudoers/sssd.c:1263 plugins/sudoers/sudoers.c:262 +#: plugins/sudoers/sudoers.c:272 plugins/sudoers/sudoers.c:280 +#: plugins/sudoers/sudoers.c:364 plugins/sudoers/sudoers.c:680 +#: plugins/sudoers/sudoers.c:795 plugins/sudoers/sudoers.c:839 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:517 +#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:868 plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:887 plugins/sudoers/sudoreplay.c:895 +#: plugins/sudoers/sudoreplay.c:899 plugins/sudoers/sudoreplay.c:1055 +#: plugins/sudoers/sudoreplay.c:1059 plugins/sudoers/testsudoers.c:131 +#: plugins/sudoers/testsudoers.c:217 plugins/sudoers/testsudoers.c:234 +#: plugins/sudoers/timestamp.c:378 plugins/sudoers/timestamp.c:422 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:146 +#: plugins/sudoers/visudo.c:153 plugins/sudoers/visudo.c:310 +#: plugins/sudoers/visudo.c:316 plugins/sudoers/visudo.c:447 +#: plugins/sudoers/visudo.c:625 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:1033 plugins/sudoers/visudo.c:1077 +#: plugins/sudoers/visudo.c:1179 plugins/sudoers/visudo_json.c:1025 toke.l:849 +#: toke.l:949 toke.l:1106 msgid "unable to allocate memory" msgstr "无法分配内存" -#: gram.y:464 +#: gram.y:481 msgid "a digest requires a path name" msgstr "摘要需要路径参数" -#: gram.y:1148 gram.y:1155 plugins/sudoers/auth/pam.c:320 +#: gram.y:607 +msgid "invalid notbefore value" +msgstr "无效的 notbefore 值" + +#: gram.y:615 +msgid "invalid notafter value" +msgstr "无效的 notafter 值" + +#: gram.y:624 plugins/sudoers/policy.c:265 +msgid "timeout value too large" +msgstr "超时值过大" + +#: gram.y:626 plugins/sudoers/policy.c:267 +msgid "invalid timeout value" +msgstr "无效的超时值" + +#: gram.y:1195 gram.y:1202 plugins/sudoers/auth/pam.c:320 #: plugins/sudoers/auth/pam.c:443 plugins/sudoers/auth/rfc1938.c:109 -#: plugins/sudoers/defaults.c:618 plugins/sudoers/defaults.c:873 -#: plugins/sudoers/defaults.c:1025 plugins/sudoers/editor.c:64 +#: plugins/sudoers/defaults.c:631 plugins/sudoers/defaults.c:886 +#: plugins/sudoers/defaults.c:1057 plugins/sudoers/editor.c:64 #: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:93 -#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/env.c:234 plugins/sudoers/filedigest.c:120 +#: plugins/sudoers/filedigest_gcrypt.c:72 +#: plugins/sudoers/filedigest_gcrypt.c:90 +#: plugins/sudoers/filedigest_openssl.c:111 plugins/sudoers/gc.c:52 #: plugins/sudoers/group_plugin.c:134 plugins/sudoers/interfaces.c:71 -#: plugins/sudoers/iolog.c:805 plugins/sudoers/iolog_path.c:167 -#: plugins/sudoers/ldap.c:447 plugins/sudoers/ldap.c:478 -#: plugins/sudoers/ldap.c:530 plugins/sudoers/ldap.c:563 -#: plugins/sudoers/ldap.c:961 plugins/sudoers/ldap.c:1157 +#: plugins/sudoers/iolog.c:909 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:449 plugins/sudoers/ldap.c:480 +#: plugins/sudoers/ldap.c:532 plugins/sudoers/ldap.c:565 +#: plugins/sudoers/ldap.c:963 plugins/sudoers/ldap.c:1157 #: plugins/sudoers/ldap.c:1168 plugins/sudoers/ldap.c:1184 #: plugins/sudoers/ldap.c:1471 plugins/sudoers/ldap.c:1631 #: plugins/sudoers/ldap.c:1713 plugins/sudoers/ldap.c:1853 #: plugins/sudoers/ldap.c:1877 plugins/sudoers/ldap.c:1966 #: plugins/sudoers/ldap.c:1981 plugins/sudoers/ldap.c:2077 -#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2263 -#: plugins/sudoers/ldap.c:2360 plugins/sudoers/ldap.c:3178 -#: plugins/sudoers/ldap.c:3210 plugins/sudoers/ldap.c:3519 -#: plugins/sudoers/ldap.c:3546 plugins/sudoers/ldap.c:3562 -#: plugins/sudoers/ldap.c:3653 plugins/sudoers/ldap.c:3669 -#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 -#: plugins/sudoers/logging.c:450 plugins/sudoers/logging.c:471 -#: plugins/sudoers/logging.c:941 plugins/sudoers/match.c:500 -#: plugins/sudoers/match.c:534 plugins/sudoers/match.c:572 -#: plugins/sudoers/match.c:770 plugins/sudoers/match.c:827 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:248 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:275 -#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 -#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 -#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:278 -#: plugins/sudoers/policy.c:287 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/policy.c:354 plugins/sudoers/policy.c:405 -#: plugins/sudoers/policy.c:632 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/ldap.c:2110 plugins/sudoers/ldap.c:2190 +#: plugins/sudoers/ldap.c:2273 plugins/sudoers/ldap.c:2370 +#: plugins/sudoers/ldap.c:3203 plugins/sudoers/ldap.c:3235 +#: plugins/sudoers/ldap.c:3544 plugins/sudoers/ldap.c:3571 +#: plugins/sudoers/ldap.c:3587 plugins/sudoers/ldap.c:3678 +#: plugins/sudoers/ldap.c:3694 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:471 plugins/sudoers/logging.c:941 +#: plugins/sudoers/match.c:616 plugins/sudoers/match.c:663 +#: plugins/sudoers/match.c:714 plugins/sudoers/match.c:738 +#: plugins/sudoers/match.c:826 plugins/sudoers/match.c:914 +#: plugins/sudoers/parse.c:248 plugins/sudoers/parse.c:260 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse.c:287 +#: plugins/sudoers/policy.c:98 plugins/sudoers/policy.c:107 +#: plugins/sudoers/policy.c:116 plugins/sudoers/policy.c:140 +#: plugins/sudoers/policy.c:251 plugins/sudoers/policy.c:265 +#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:291 +#: plugins/sudoers/policy.c:300 plugins/sudoers/policy.c:339 +#: plugins/sudoers/policy.c:349 plugins/sudoers/policy.c:358 +#: plugins/sudoers/policy.c:367 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:652 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:139 plugins/sudoers/pwutil.c:210 #: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:457 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:591 #: plugins/sudoers/pwutil.c:749 plugins/sudoers/pwutil.c:806 #: plugins/sudoers/pwutil.c:851 plugins/sudoers/pwutil.c:908 -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:162 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 plugins/sudoers/sssd.c:162 #: plugins/sudoers/sssd.c:194 plugins/sudoers/sssd.c:237 #: plugins/sudoers/sssd.c:244 plugins/sudoers/sssd.c:280 #: plugins/sudoers/sssd.c:390 plugins/sudoers/sssd.c:462 -#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sssd.c:1233 -#: plugins/sudoers/sssd.c:1248 plugins/sudoers/sssd.c:1264 -#: plugins/sudoers/sudoers.c:261 plugins/sudoers/sudoers.c:271 -#: plugins/sudoers/sudoers.c:279 plugins/sudoers/sudoers.c:363 -#: plugins/sudoers/sudoers.c:660 plugins/sudoers/sudoers.c:775 -#: plugins/sudoers/sudoers.c:819 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sssd.c:1054 plugins/sudoers/sssd.c:1232 +#: plugins/sudoers/sssd.c:1247 plugins/sudoers/sssd.c:1263 +#: plugins/sudoers/sudoers.c:262 plugins/sudoers/sudoers.c:272 +#: plugins/sudoers/sudoers.c:280 plugins/sudoers/sudoers.c:364 +#: plugins/sudoers/sudoers.c:680 plugins/sudoers/sudoers.c:795 +#: plugins/sudoers/sudoers.c:839 plugins/sudoers/sudoers_debug.c:106 #: plugins/sudoers/sudoreplay.c:517 plugins/sudoers/sudoreplay.c:716 #: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:868 #: plugins/sudoers/sudoreplay.c:877 plugins/sudoers/sudoreplay.c:887 #: plugins/sudoers/sudoreplay.c:895 plugins/sudoers/sudoreplay.c:899 #: plugins/sudoers/sudoreplay.c:1055 plugins/sudoers/sudoreplay.c:1059 -#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:216 -#: plugins/sudoers/testsudoers.c:233 plugins/sudoers/timestamp.c:374 -#: plugins/sudoers/timestamp.c:418 plugins/sudoers/timestamp.c:834 +#: plugins/sudoers/testsudoers.c:131 plugins/sudoers/testsudoers.c:217 +#: plugins/sudoers/testsudoers.c:234 plugins/sudoers/timestamp.c:378 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:838 #: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 -#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:152 -#: plugins/sudoers/visudo.c:309 plugins/sudoers/visudo.c:315 -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:624 -#: plugins/sudoers/visudo.c:964 plugins/sudoers/visudo.c:1030 -#: plugins/sudoers/visudo.c:1074 plugins/sudoers/visudo.c:1171 -#: plugins/sudoers/visudo_json.c:1035 toke.l:832 toke.l:932 toke.l:1090 +#: plugins/sudoers/toke_util.c:146 plugins/sudoers/visudo.c:153 +#: plugins/sudoers/visudo.c:310 plugins/sudoers/visudo.c:316 +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:625 +#: plugins/sudoers/visudo.c:967 plugins/sudoers/visudo.c:1033 +#: plugins/sudoers/visudo.c:1077 plugins/sudoers/visudo.c:1179 +#: plugins/sudoers/visudo_json.c:1025 toke.l:849 toke.l:949 toke.l:1106 #, c-format msgid "%s: %s" msgstr "%s:%s" @@ -306,7 +330,7 @@ msgid "PAM authentication error: %s" msgstr "PAM 认证出错:%s" -#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:226 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:227 #, c-format msgid "you do not exist in the %s database" msgstr "%s 数据库中没有您" @@ -400,536 +424,564 @@ "\n" #: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 -#: plugins/sudoers/sudoers.c:696 plugins/sudoers/sudoers.c:738 +#: plugins/sudoers/sudoers.c:716 plugins/sudoers/sudoers.c:758 #, c-format msgid "unknown uid: %u" msgstr "未知的用户 ID:%u" -#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:235 -#: plugins/sudoers/policy.c:805 plugins/sudoers/sudoers.c:1127 -#: plugins/sudoers/testsudoers.c:207 plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/check.c:300 plugins/sudoers/iolog.c:246 +#: plugins/sudoers/policy.c:825 plugins/sudoers/sudoers.c:1147 +#: plugins/sudoers/testsudoers.c:208 plugins/sudoers/testsudoers.c:366 #, c-format msgid "unknown user: %s" msgstr "未知用户:%s" -#: plugins/sudoers/def_data.c:27 +#: plugins/sudoers/def_data.c:34 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "若使用了 syslog,用于记录日志的 syslog 设施:%s" -#: plugins/sudoers/def_data.c:31 +#: plugins/sudoers/def_data.c:38 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "用户认证成功时使用的 syslog 优先级:%s" -#: plugins/sudoers/def_data.c:35 +#: plugins/sudoers/def_data.c:42 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "用户认证不成功时使用的 syslog 优先级:%s" -#: plugins/sudoers/def_data.c:39 +#: plugins/sudoers/def_data.c:46 msgid "Put OTP prompt on its own line" msgstr "将 OPT 提示放在独自的行中" -#: plugins/sudoers/def_data.c:43 +#: plugins/sudoers/def_data.c:50 msgid "Ignore '.' in $PATH" msgstr "忽略 $PATH 中的“.”" -#: plugins/sudoers/def_data.c:47 +#: plugins/sudoers/def_data.c:54 msgid "Always send mail when sudo is run" msgstr "在运行 sudo 时总是发送邮件" -#: plugins/sudoers/def_data.c:51 +#: plugins/sudoers/def_data.c:58 msgid "Send mail if user authentication fails" msgstr "在用户认证失败时发送邮件" -#: plugins/sudoers/def_data.c:55 +#: plugins/sudoers/def_data.c:62 msgid "Send mail if the user is not in sudoers" msgstr "在用户不在 sudoers 列表中时发送邮件" -#: plugins/sudoers/def_data.c:59 +#: plugins/sudoers/def_data.c:66 msgid "Send mail if the user is not in sudoers for this host" msgstr "在用户不在此主机的 sudoers 列表中时发送邮件" -#: plugins/sudoers/def_data.c:63 +#: plugins/sudoers/def_data.c:70 msgid "Send mail if the user is not allowed to run a command" msgstr "在用户不允许执行某个命令时发送邮件" -#: plugins/sudoers/def_data.c:67 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if the user tries to run a command" msgstr "在用户尝试执行某个命令时发送邮件" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:78 msgid "Use a separate timestamp for each user/tty combo" msgstr "对每个用户/终端组合使用独立的时间戳" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:82 msgid "Lecture user the first time they run sudo" msgstr "在用户第一次运行 sudo 时向他致辞" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:86 #, c-format msgid "File containing the sudo lecture: %s" msgstr "包含 sudo 致辞的文件:%s" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:90 msgid "Require users to authenticate by default" msgstr "默认要求用户认证" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:94 msgid "Root may run sudo" msgstr "root 可以运行 sudo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:98 msgid "Log the hostname in the (non-syslog) log file" msgstr "将主机名记录在(非 syslog)的日志文件中" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:102 msgid "Log the year in the (non-syslog) log file" msgstr "将年份记录在(非 syslog)的日志文件中" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:106 msgid "If sudo is invoked with no arguments, start a shell" msgstr "如果不带参数调用 sudo,启动一个 shell" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:110 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "若使用 -s 选项启动 shell,将 $HOME 设为目标用户的主目录" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:114 msgid "Always set $HOME to the target user's home directory" msgstr "总是将 $HOME 设为目标用户的主目录" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:118 msgid "Allow some information gathering to give useful error messages" msgstr "允许收集一些信息,以提供有用的错误消息" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:122 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "要求 sudoers 文件中包含完全限定的主机名" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:126 msgid "Insult the user when they enter an incorrect password" msgstr "在用户输入错误密码时对他们进行(玩笑式的)嘲讽" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:130 msgid "Only allow the user to run sudo if they have a tty" msgstr "只允许拥有终端的用户执行 sudo" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:134 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo 将优先考虑 EDITOR 环境变量" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:138 msgid "Prompt for root's password, not the users's" msgstr "询问 root 用户的密码而非用户的密码" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:142 msgid "Prompt for the runas_default user's password, not the users's" msgstr "询问 runas_default 用户的密码,而非用户密码" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:146 msgid "Prompt for the target user's password, not the users's" msgstr "询问目标用户的密码,而非用户密码" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:150 msgid "Apply defaults in the target user's login class if there is one" msgstr "应用目标用户登录类别中的默认设置,如果没有设置的话" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:154 msgid "Set the LOGNAME and USER environment variables" msgstr "设置 LOGNAME 和 USER 环境变量" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:158 msgid "Only set the effective uid to the target user, not the real uid" msgstr "只将有效用户 ID 设为目标用户的,而不是实际用户 ID" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:162 msgid "Don't initialize the group vector to that of the target user" msgstr "不将组向量初始化为目标用户的" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:166 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "日志文件折行的长度(0 则不折行):%u" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:170 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "认证时间戳延时:%.1f 分钟" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:174 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "密码提示延时:%.1f 分钟" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:178 #, c-format msgid "Number of tries to enter a password: %u" msgstr "输入密码的尝试次数:%u" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "要使用的 umask,或 0777 使用用户的:0%o" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Path to log file: %s" msgstr "日志文件路径:%s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Path to mail program: %s" msgstr "邮件程序路径:%s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Flags for mail program: %s" msgstr "邮件程序标志:%s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Address to send mail to: %s" msgstr "发送邮件的地址:%s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Address to send mail from: %s" msgstr "接收邮件的地址:%s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Subject line for mail messages: %s" msgstr "邮件消息的主题行:%s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Incorrect password message: %s" msgstr "密码错误消息:%s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Path to lecture status dir: %s" msgstr "致辞(lecture)状态文件夹的路径:%s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "认证时间戳文件夹的路径:%s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "认证时间戳的所有者:%s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "此组的用户不要求密码和 PATH:%s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Default password prompt: %s" msgstr "默认密码提示:%s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:234 msgid "If set, passprompt will override system prompt in all cases." msgstr "如果设置,密码提示将覆盖各种情况下的系统提示。" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Default user to run commands as: %s" msgstr "运行命令的默认用户:%s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "覆盖用户的 $PATH 变量的值:%s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo 所使用的编辑器的路径:%s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:250 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "何时为“list”伪命令请求密码:%s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "何时为“verify”伪命令请求密码:%s" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:258 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "预加载“sudo_noexec”库中包含的哑 exec 函数" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:262 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "如果 LDAP 目录有效,是不是忽略本地的 sudoers 文件" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr ">= %d 的文件描述符将会在执行命令前关闭" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:270 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "如果设置,用户可以通过 -C 选项覆盖“closefrom”的值" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:274 msgid "Allow users to set arbitrary environment variables" msgstr "允许用户设置任意的环境变量" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:278 msgid "Reset the environment to a default set of variables" msgstr "将环境重设为默认的变量集" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:282 msgid "Environment variables to check for sanity:" msgstr "要检查完整性的环境变量:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:286 msgid "Environment variables to remove:" msgstr "要移除的环境变量:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:290 msgid "Environment variables to preserve:" msgstr "要保留的环境变量:" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:294 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "在新的安全环境中使用的 SELinux 角色:%s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:298 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "在新的安全环境中使用的 SELinux 类型:%s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:302 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 特定环境文件的路径:%s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:306 +#, c-format +msgid "Path to the restricted sudo-specific environment file: %s" +msgstr "受限的 sudo 特定环境文件的路径:%s" + +#: plugins/sudoers/def_data.c:310 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "解析 sudoers 时使用的区域设置:%s" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:314 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "允许 sudo 询问密码,即使它不可见" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:318 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "用户在询问密码窗口输入时提供视觉反馈" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:322 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "使用不太精确但不访问文件系统的较快通配方法" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:326 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:319 +#: plugins/sudoers/def_data.c:330 msgid "Log user's input for the command being run" msgstr "记录用户在所执行命令中的输入" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:334 msgid "Log the output of the command being run" msgstr "记录所执行命令的输出" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:338 msgid "Compress I/O logs using zlib" msgstr "使用 zlib 压缩 I/O 日志" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:342 msgid "Always run commands in a pseudo-tty" msgstr "总是在伪终端中运行命令" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:346 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "用于非 Unix 组支持的插件:%s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:350 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "用于保存输入/输出日志的目录:%s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:354 #, c-format msgid "File in which to store the input/output log: %s" msgstr "用于保存输入/输出日志的文件:%s" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:358 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "在分配伪终端时向 utmp/utmpx 文件中添加一条记录" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:362 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "将 utmp 中的用户设为 runas 用户,而不是调用用户" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:366 msgid "Set of permitted privileges" msgstr "允许权限的集合" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:370 msgid "Set of limit privileges" msgstr "限制权限的集合" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:374 msgid "Run commands on a pty in the background" msgstr "在后台的伪终端上运行命令" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:378 msgid "PAM service name to use" msgstr "要使用的 PAM 服务名称" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:382 msgid "PAM service name to use for login shells" msgstr "用于登录 shell 的 PAM 服务名称" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:386 msgid "Attempt to establish PAM credentials for the target user" msgstr "尝试为目标用户建立 PAM 凭据" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:390 msgid "Create a new PAM session for the command to run in" msgstr "创建一个新的 PAM 会话来运行该命令" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "最大 I/O 日志序列号:%u" -#: plugins/sudoers/def_data.c:387 +#: plugins/sudoers/def_data.c:398 msgid "Enable sudoers netgroup support" msgstr "启用 support netgroup 支持" -#: plugins/sudoers/def_data.c:391 +#: plugins/sudoers/def_data.c:402 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "在使用 sudoedit 编辑文件时检查上级目录是否可写" -#: plugins/sudoers/def_data.c:395 +#: plugins/sudoers/def_data.c:406 msgid "Follow symbolic links when editing files with sudoedit" msgstr "使用 sudoedit 编辑文件时循符号连接(定位到原文件)" -#: plugins/sudoers/def_data.c:399 +#: plugins/sudoers/def_data.c:410 msgid "Query the group plugin for unknown system groups" msgstr "通过 组 插件查询未知的系统组" -#: plugins/sudoers/def_data.c:403 +#: plugins/sudoers/def_data.c:414 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "基于整个元组(用户、主机和域)来匹配网络组" -#: plugins/sudoers/def_data.c:407 +#: plugins/sudoers/def_data.c:418 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "即使 sudo 无法写入审核日志也允许命令运行" -#: plugins/sudoers/def_data.c:411 +#: plugins/sudoers/def_data.c:422 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "即使 sudo 无法写入 I/O 日志也允许命令运行" -#: plugins/sudoers/def_data.c:415 +#: plugins/sudoers/def_data.c:426 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "即使 sudo 无法写入日志文件也允许命令允许" -#: plugins/sudoers/def_data.c:419 +#: plugins/sudoers/def_data.c:430 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "解析 sudoers 中的组并与 组 ID (而不是名字) 匹配" -#: plugins/sudoers/def_data.c:423 -msgid "Log entries larger than this value will be split into multiple syslog messages" -msgstr "大于此数值的日志条目会分为多条 syslog 消息" +#: plugins/sudoers/def_data.c:434 +#, c-format +msgid "Log entries larger than this value will be split into multiple syslog messages: %u" +msgstr "大于此数值的日志条目会分为多条 syslog 消息:%u" -#: plugins/sudoers/def_data.c:427 +#: plugins/sudoers/def_data.c:438 #, c-format msgid "User that will own the I/O log files: %s" msgstr "将拥有 I/O 日志文件的用户:%s" -#: plugins/sudoers/def_data.c:431 +#: plugins/sudoers/def_data.c:442 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "将拥有 I/O 日志文件的组:%s" -#: plugins/sudoers/def_data.c:435 +#: plugins/sudoers/def_data.c:446 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "I/O 日志文件要使用的文件模式:0%o" -#: plugins/sudoers/defaults.c:211 +#: plugins/sudoers/def_data.c:450 +#, c-format +msgid "Execute commands by file descriptor instead of by path: %s" +msgstr "根据文件描述符执行命令,而非根据路径:%s" + +#: plugins/sudoers/def_data.c:454 +msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" +msgstr "忽略 sudoers 中未知的 Defaults 条目而非产生警告" + +#: plugins/sudoers/def_data.c:458 +#, c-format +msgid "Time in seconds after which the command will be terminated: %u" +msgstr "超过指定时间后终止命令(秒):%u" + +#: plugins/sudoers/def_data.c:462 +msgid "Allow the user to specify a timeout on the command line" +msgstr "允许用户在命令行中指定超时时间" + +#: plugins/sudoers/def_data.c:466 +msgid "Flush I/O log data to disk immediately instead of buffering it" +msgstr "立即冲洗(flush) I/O 日志数据而非将其缓存" + +#: plugins/sudoers/defaults.c:220 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d 未知的默认条目“%s”" -#: plugins/sudoers/defaults.c:214 +#: plugins/sudoers/defaults.c:223 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s:未知的默认条目“%s”" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:246 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d 没有给“%s”指定值" -#: plugins/sudoers/defaults.c:240 +#: plugins/sudoers/defaults.c:249 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s:没有给“%s”指定值" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:268 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d “%s”的值必须以“/”开头" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:271 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s:“%s”的值必须以“/”开头" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:296 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d “%s”选项不带值" -#: plugins/sudoers/defaults.c:290 +#: plugins/sudoers/defaults.c:299 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s:“%s”选项不带值" -#: plugins/sudoers/defaults.c:309 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%1$s:%2$d 选项“%4$s”的默认类型 0x%3$x 无效" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:324 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%1$s:选项“%3$s”的默认类型 0x%2$x 无效" -#: plugins/sudoers/defaults.c:322 +#: plugins/sudoers/defaults.c:334 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%1$s:%2$d 值“%3$s”对选项“%4$s”无效" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:337 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s:值“%s”对选项“%s”无效" #: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 -#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:451 -#: plugins/sudoers/ldap.c:541 plugins/sudoers/ldap.c:1253 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:543 plugins/sudoers/ldap.c:1253 #: plugins/sudoers/ldap.c:1475 plugins/sudoers/ldap.c:1801 #: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:946 -#: plugins/sudoers/policy.c:523 plugins/sudoers/policy.c:533 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:841 -#: plugins/sudoers/testsudoers.c:237 plugins/sudoers/toke_util.c:158 +#: plugins/sudoers/policy.c:536 plugins/sudoers/policy.c:546 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:861 +#: plugins/sudoers/testsudoers.c:238 plugins/sudoers/toke_util.c:158 #, c-format msgid "internal error, %s overflow" msgstr "内部错误,%s 溢出" @@ -938,15 +990,27 @@ msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv:envp 损坏,长度不符" -#: plugins/sudoers/env.c:1082 +#: plugins/sudoers/env.c:1083 msgid "unable to rebuild the environment" msgstr "无法重建环境" -#: plugins/sudoers/env.c:1156 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "对不起,您无权设置以下环境变量:%s" +#: plugins/sudoers/filedigest.c:104 plugins/sudoers/filedigest_gcrypt.c:66 +#: plugins/sudoers/filedigest_openssl.c:95 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "%2$s 的摘要类型 %1$d 不支持" + +#: plugins/sudoers/filedigest.c:129 plugins/sudoers/filedigest_gcrypt.c:98 +#: plugins/sudoers/filedigest_openssl.c:120 +#, c-format +msgid "%s: read error" +msgstr "%s:写错误" + #: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" @@ -986,82 +1050,88 @@ msgid "Local IP address and netmask pairs:\n" msgstr "本地 IP 地址和网络掩码对:\n" -#: plugins/sudoers/iolog.c:99 plugins/sudoers/mkdir_parents.c:78 +#: plugins/sudoers/iolog.c:111 plugins/sudoers/mkdir_parents.c:70 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s 存在,但不是目录(0%o)" -#: plugins/sudoers/iolog.c:126 plugins/sudoers/iolog.c:170 -#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/timestamp.c:167 +#: plugins/sudoers/iolog.c:136 plugins/sudoers/iolog.c:173 +#: plugins/sudoers/mkdir_parents.c:59 plugins/sudoers/timestamp.c:170 #, c-format msgid "unable to mkdir %s" msgstr "无法创建目录 %s" -#: plugins/sudoers/iolog.c:269 plugins/sudoers/sudoers.c:1158 -#: plugins/sudoers/testsudoers.c:389 +#: plugins/sudoers/iolog.c:177 plugins/sudoers/visudo.c:722 +#: plugins/sudoers/visudo.c:732 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "无法将 %s 的模式更改为 0%o" + +#: plugins/sudoers/iolog.c:285 plugins/sudoers/sudoers.c:1178 +#: plugins/sudoers/testsudoers.c:390 #, c-format msgid "unknown group: %s" msgstr "未知组:%s" -#: plugins/sudoers/iolog.c:356 plugins/sudoers/sudoers.c:897 +#: plugins/sudoers/iolog.c:383 plugins/sudoers/sudoers.c:917 #: plugins/sudoers/sudoreplay.c:304 plugins/sudoers/sudoreplay.c:817 -#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:383 -#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo_json.c:1011 -#: plugins/sudoers/visudo_json.c:1024 +#: plugins/sudoers/sudoreplay.c:1021 plugins/sudoers/timestamp.c:387 +#: plugins/sudoers/visudo.c:954 plugins/sudoers/visudo_json.c:1001 +#: plugins/sudoers/visudo_json.c:1014 #, c-format msgid "unable to open %s" msgstr "无法打开 %s" -#: plugins/sudoers/iolog.c:399 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/iolog.c:433 plugins/sudoers/sudoers.c:921 #: plugins/sudoers/sudoreplay.c:1132 #, c-format msgid "unable to read %s" msgstr "无法读取 %s" -#: plugins/sudoers/iolog.c:435 plugins/sudoers/sudoreplay.c:598 -#: plugins/sudoers/timestamp.c:282 plugins/sudoers/timestamp.c:285 +#: plugins/sudoers/iolog.c:469 plugins/sudoers/sudoreplay.c:598 +#: plugins/sudoers/timestamp.c:286 plugins/sudoers/timestamp.c:289 #, c-format msgid "unable to write to %s" msgstr "无法写入 %s" -#: plugins/sudoers/iolog.c:509 plugins/sudoers/iolog.c:727 +#: plugins/sudoers/iolog.c:550 plugins/sudoers/iolog.c:775 #, c-format msgid "unable to create %s" msgstr "无法创建 %s" -#: plugins/sudoers/iolog.c:895 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1000 plugins/sudoers/iolog.c:1070 #, c-format msgid "unable to write to I/O log file: %s" msgstr "无法写入 I/O 日志文件:%s" -#: plugins/sudoers/iolog.c:927 +#: plugins/sudoers/iolog.c:1034 #, c-format msgid "%s: internal error, file index %d not open" msgstr "%s:内部错误,文件索引 %d 未打开" -#: plugins/sudoers/ldap.c:429 +#: plugins/sudoers/ldap.c:431 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports:端口太大" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:491 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "不支持的 LDAP URI 类型:%s" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:518 msgid "unable to mix ldap and ldaps URIs" msgstr "无法混合 ldap 和 ldaps URI" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:556 +#: plugins/sudoers/ldap.c:522 plugins/sudoers/ldap.c:558 msgid "starttls not supported when using ldaps" msgstr "使用 ldaps 时不支持 starttls" -#: plugins/sudoers/ldap.c:627 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "无法初始化 SSL 证书和密钥数据库:%s" -#: plugins/sudoers/ldap.c:630 +#: plugins/sudoers/ldap.c:632 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "要使用 SSL,您必须在 %s 中设置 TLS_CERT" @@ -1079,7 +1149,7 @@ msgid "%s: %s: %s: %s" msgstr "%s:%s:%s:%s" -#: plugins/sudoers/ldap.c:2504 +#: plugins/sudoers/ldap.c:2528 #, c-format msgid "" "\n" @@ -1088,7 +1158,7 @@ "\n" "LDAP 角色:%s\n" -#: plugins/sudoers/ldap.c:2506 +#: plugins/sudoers/ldap.c:2530 #, c-format msgid "" "\n" @@ -1097,27 +1167,27 @@ "\n" "LDAP 角色:未知\n" -#: plugins/sudoers/ldap.c:2562 +#: plugins/sudoers/ldap.c:2586 #, c-format msgid " Order: %s\n" msgstr " 顺序:%s\n" -#: plugins/sudoers/ldap.c:2570 plugins/sudoers/parse.c:556 -#: plugins/sudoers/sssd.c:1626 +#: plugins/sudoers/ldap.c:2594 plugins/sudoers/parse.c:614 +#: plugins/sudoers/sssd.c:1625 #, c-format msgid " Commands:\n" msgstr " 命令:\n" -#: plugins/sudoers/ldap.c:3130 +#: plugins/sudoers/ldap.c:3155 #, c-format msgid "unable to initialize LDAP: %s" msgstr "无法初始化 LDAP:%s" -#: plugins/sudoers/ldap.c:3166 +#: plugins/sudoers/ldap.c:3191 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:3415 +#: plugins/sudoers/ldap.c:3440 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "无效的 sudoOrder 属性:%s" @@ -1195,15 +1265,15 @@ 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:328 plugins/sudoers/sudoers.c:468 -#: plugins/sudoers/sudoers.c:470 plugins/sudoers/sudoers.c:472 -#: plugins/sudoers/sudoers.c:474 plugins/sudoers/sudoers.c:1247 -#: plugins/sudoers/sudoers.c:1249 +#: plugins/sudoers/logging.c:328 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1267 +#: plugins/sudoers/sudoers.c:1269 #, c-format msgid "%s: command not found" msgstr "%s:找不到命令" -#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/logging.c:330 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -1250,38 +1320,28 @@ msgid "unable to execute %s: %m" msgstr "无法执行 %s:%m" -#: plugins/sudoers/match.c:644 -#, c-format -msgid "unsupported digest type %d for %s" -msgstr "%2$s 的摘要类型 %1$d 不支持" - -#: plugins/sudoers/match.c:685 -#, c-format -msgid "%s: read error" -msgstr "%s:写错误" - -#: plugins/sudoers/match.c:720 +#: plugins/sudoers/match.c:771 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "%s(%s) 的摘要不是 %s 形式" -#: plugins/sudoers/mkdir_parents.c:72 plugins/sudoers/sudoers.c:912 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:715 +#: plugins/sudoers/mkdir_parents.c:65 plugins/sudoers/sudoers.c:932 +#: plugins/sudoers/visudo.c:440 plugins/sudoers/visudo.c:716 #, c-format msgid "unable to stat %s" msgstr "无法 stat %s" -#: plugins/sudoers/parse.c:114 +#: plugins/sudoers/parse.c:115 #, c-format msgid "parse error in %s near line %d" msgstr "%s 中第 %d 行附近有解析错误" -#: plugins/sudoers/parse.c:117 +#: plugins/sudoers/parse.c:118 #, c-format msgid "parse error in %s" msgstr "%s 中出现解析错误" -#: plugins/sudoers/parse.c:503 +#: plugins/sudoers/parse.c:540 #, c-format msgid "" "\n" @@ -1290,41 +1350,41 @@ "\n" "Sudoers 条目:\n" -#: plugins/sudoers/parse.c:504 +#: plugins/sudoers/parse.c:541 #, c-format msgid " RunAsUsers: " msgstr " RunAs 用户:" -#: plugins/sudoers/parse.c:518 +#: plugins/sudoers/parse.c:555 #, c-format msgid " RunAsGroups: " msgstr " RunAs 组:" -#: plugins/sudoers/parse.c:527 +#: plugins/sudoers/parse.c:564 #, c-format msgid " Options: " msgstr " 选项:" -#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:260 +#: plugins/sudoers/policy.c:241 plugins/sudoers/testsudoers.c:261 msgid "unable to parse network address list" msgstr "无法解析网络地址列表" -#: plugins/sudoers/policy.c:690 plugins/sudoers/visudo.c:889 +#: plugins/sudoers/policy.c:710 plugins/sudoers/visudo.c:892 #, c-format msgid "unable to execute %s" msgstr "无法执行 %s" -#: plugins/sudoers/policy.c:823 +#: plugins/sudoers/policy.c:843 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers 策略插件版本 %s\n" -#: plugins/sudoers/policy.c:825 +#: plugins/sudoers/policy.c:845 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers 文件语法版本 %d\n" -#: plugins/sudoers/policy.c:829 +#: plugins/sudoers/policy.c:849 #, c-format msgid "" "\n" @@ -1333,22 +1393,22 @@ "\n" "Sudoers 路径:%s\n" -#: plugins/sudoers/policy.c:832 +#: plugins/sudoers/policy.c:852 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch 路径:%s\n" -#: plugins/sudoers/policy.c:834 +#: plugins/sudoers/policy.c:854 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf 路径:%s\n" -#: plugins/sudoers/policy.c:835 +#: plugins/sudoers/policy.c:855 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret 路径:%s\n" -#: plugins/sudoers/policy.c:868 +#: plugins/sudoers/policy.c:888 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "无法注册类型为 %d 的钩子(hook)(版本 %d.%d)" @@ -1417,48 +1477,48 @@ msgid "unable to parse gids for %s" msgstr "无法解析 %s 的组 ID" -#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 -#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 -#: plugins/sudoers/set_perms.c:1430 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:469 +#: plugins/sudoers/set_perms.c:912 plugins/sudoers/set_perms.c:1234 +#: plugins/sudoers/set_perms.c:1551 msgid "perm stack overflow" msgstr "权限堆栈上溢" -#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 -#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 -#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 -#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 -#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:400 +#: plugins/sudoers/set_perms.c:477 plugins/sudoers/set_perms.c:779 +#: plugins/sudoers/set_perms.c:920 plugins/sudoers/set_perms.c:1163 +#: plugins/sudoers/set_perms.c:1242 plugins/sudoers/set_perms.c:1484 +#: plugins/sudoers/set_perms.c:1559 plugins/sudoers/set_perms.c:1649 msgid "perm stack underflow" msgstr "权限堆栈下溢" -#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:492 -#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:523 +#: plugins/sudoers/set_perms.c:1293 plugins/sudoers/set_perms.c:1591 msgid "unable to change to root gid" msgstr "无法切换为 root 组 ID" -#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:589 -#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:620 +#: plugins/sudoers/set_perms.c:1049 plugins/sudoers/set_perms.c:1370 msgid "unable to change to runas gid" msgstr "无法切换为 runas 组 ID" -#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:594 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:625 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1375 msgid "unable to set runas group vector" msgstr "无法设置 runas 组向量" -#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:605 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:636 +#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1384 msgid "unable to change to runas uid" msgstr "无法切换为 runas 用户 ID" -#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:623 -#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:654 +#: plugins/sudoers/set_perms.c:1079 plugins/sudoers/set_perms.c:1400 msgid "unable to change to sudoers gid" msgstr "无法切换为 sudoers 组 ID" -#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 -#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 -#: plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/set_perms.c:387 plugins/sudoers/set_perms.c:766 +#: plugins/sudoers/set_perms.c:1150 plugins/sudoers/set_perms.c:1471 +#: plugins/sudoers/set_perms.c:1636 msgid "too many processes" msgstr "进程过多" @@ -1491,7 +1551,7 @@ msgid "unable to find symbol \"%s\" in %s" msgstr "无法在 %s 中找到符号“%s”" -#: plugins/sudoers/sssd.c:1541 +#: plugins/sudoers/sssd.c:1540 #, c-format msgid "" "\n" @@ -1500,7 +1560,7 @@ "\n" "SSSD 角色:%s\n" -#: plugins/sudoers/sssd.c:1546 +#: plugins/sudoers/sssd.c:1545 #, c-format msgid "" "\n" @@ -1529,84 +1589,88 @@ msgid "User %s is not allowed to run sudo on %s.\n" msgstr "用户 %s 无权在 %s 上运行 sudo。\n" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/testsudoers.c:246 -#: plugins/sudoers/visudo.c:232 plugins/sudoers/visudo.c:612 -#: plugins/sudoers/visudo.c:955 +#: plugins/sudoers/sudoers.c:167 plugins/sudoers/testsudoers.c:247 +#: plugins/sudoers/visudo.c:233 plugins/sudoers/visudo.c:613 +#: plugins/sudoers/visudo.c:958 msgid "unable to initialize sudoers default values" msgstr "无法初始化 sudoers 默认值" -#: plugins/sudoers/sudoers.c:196 plugins/sudoers/sudoers.c:859 +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:879 msgid "problem with defaults entries" msgstr "默认条目有问题" -#: plugins/sudoers/sudoers.c:203 +#: plugins/sudoers/sudoers.c:204 msgid "no valid sudoers sources found, quitting" msgstr "没有找到有效的 sudoers 资源,退出" -#: plugins/sudoers/sudoers.c:242 +#: plugins/sudoers/sudoers.c:243 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers 指定 root 不允许执行 sudo" -#: plugins/sudoers/sudoers.c:299 +#: plugins/sudoers/sudoers.c:300 msgid "you are not permitted to use the -C option" msgstr "您无权使用 -C 选项" -#: plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:389 #, c-format msgid "timestamp owner (%s): No such user" msgstr "时间戳所有者(%s):无此用户" -#: plugins/sudoers/sudoers.c:401 +#: plugins/sudoers/sudoers.c:404 msgid "no tty" msgstr "无终端" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:405 msgid "sorry, you must have a tty to run sudo" msgstr "抱歉,您必须拥有一个终端来执行 sudo" -#: plugins/sudoers/sudoers.c:463 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "当前目录中的命令" -#: plugins/sudoers/sudoers.c:483 +#: plugins/sudoers/sudoers.c:485 +msgid "sorry, you are not allowed set a command timeout" +msgstr "抱歉,您无权设置超时时间" + +#: plugins/sudoers/sudoers.c:493 msgid "sorry, you are not allowed to preserve the environment" msgstr "抱歉,您无权保留环境" -#: plugins/sudoers/sudoers.c:804 +#: plugins/sudoers/sudoers.c:824 msgid "command too long" msgstr "命令过长" -#: plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/sudoers.c:936 #, c-format msgid "%s is not a regular file" msgstr "%s 不是常规文件" -#: plugins/sudoers/sudoers.c:920 plugins/sudoers/timestamp.c:209 toke.l:952 +#: plugins/sudoers/sudoers.c:940 plugins/sudoers/timestamp.c:213 toke.l:969 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s 属于用户 ID %u,应为 %u" -#: plugins/sudoers/sudoers.c:924 toke.l:957 +#: plugins/sudoers/sudoers.c:944 toke.l:974 #, c-format msgid "%s is world writable" msgstr "%s 可被任何人写" -#: plugins/sudoers/sudoers.c:928 toke.l:960 +#: plugins/sudoers/sudoers.c:948 toke.l:977 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s 属于组 ID %u,应为 %u" -#: plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:981 #, c-format msgid "only root can use \"-c %s\"" msgstr "只有 root 才能使用“-c %s”" -#: plugins/sudoers/sudoers.c:980 +#: plugins/sudoers/sudoers.c:1000 #, c-format msgid "unknown login class: %s" msgstr "未知的登录类别:%s" -#: plugins/sudoers/sudoers.c:1063 plugins/sudoers/sudoers.c:1091 +#: plugins/sudoers/sudoers.c:1083 plugins/sudoers/sudoers.c:1111 #, c-format msgid "unable to resolve host %s" msgstr "无法解析主机:%s" @@ -1626,7 +1690,7 @@ msgid "invalid speed factor: %s" msgstr "无法的速度系数:%s" -#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:185 +#: plugins/sudoers/sudoreplay.c:258 plugins/sudoers/visudo.c:186 #, c-format msgid "%s version %s\n" msgstr "%s 版本 %s\n" @@ -1782,11 +1846,11 @@ " -s, --speed=数值 加速或减慢输出\n" " -V, --version 显示版本信息并退出" -#: plugins/sudoers/testsudoers.c:328 +#: plugins/sudoers/testsudoers.c:329 msgid "\thost unmatched" msgstr "\t主机不匹配" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:332 msgid "" "\n" "Command allowed" @@ -1794,7 +1858,7 @@ "\n" "命令允许" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command denied" @@ -1802,7 +1866,7 @@ "\n" "命令被拒" -#: plugins/sudoers/testsudoers.c:332 +#: plugins/sudoers/testsudoers.c:333 msgid "" "\n" "Command unmatched" @@ -1810,129 +1874,124 @@ "\n" "命令不匹配" -#: plugins/sudoers/timestamp.c:217 +#: plugins/sudoers/timestamp.c:221 #, c-format msgid "%s is group writable" msgstr "%s 可被组写" -#: plugins/sudoers/timestamp.c:293 +#: plugins/sudoers/timestamp.c:297 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "无法将时间戳文件截短为 %lld 字节" -#: plugins/sudoers/timestamp.c:738 plugins/sudoers/timestamp.c:805 -#: plugins/sudoers/visudo.c:500 plugins/sudoers/visudo.c:506 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:501 plugins/sudoers/visudo.c:507 msgid "unable to read the clock" msgstr "无法读取时钟" -#: plugins/sudoers/timestamp.c:752 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "将忽略超前的时间戳" -#: plugins/sudoers/timestamp.c:764 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "时间戳太超前:%20.20s" -#: plugins/sudoers/timestamp.c:859 +#: plugins/sudoers/timestamp.c:863 #, c-format msgid "unable to lock time stamp file %s" msgstr "无法锁定时间戳文件 %s" -#: plugins/sudoers/timestamp.c:903 plugins/sudoers/timestamp.c:923 +#: plugins/sudoers/timestamp.c:907 plugins/sudoers/timestamp.c:927 #, c-format msgid "lecture status path too long: %s/%s" msgstr "致辞(lecture)状态路径过长:%s/%s" -#: plugins/sudoers/visudo.c:187 +#: plugins/sudoers/visudo.c:188 #, c-format msgid "%s grammar version %d\n" msgstr "%s 语法版本 %d\n" -#: plugins/sudoers/visudo.c:265 plugins/sudoers/visudo.c:665 +#: plugins/sudoers/visudo.c:266 plugins/sudoers/visudo.c:666 #, c-format msgid "press return to edit %s: " msgstr "按回车键编辑 %s:" -#: plugins/sudoers/visudo.c:331 +#: plugins/sudoers/visudo.c:332 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "指定的编辑器(%s)不存在" -#: plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:350 #, c-format msgid "no editor found (editor path = %s)" msgstr "未找到编辑器(编辑器路径 = %s)" -#: plugins/sudoers/visudo.c:459 plugins/sudoers/visudo.c:467 +#: plugins/sudoers/visudo.c:460 plugins/sudoers/visudo.c:468 msgid "write error" msgstr "写错误" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "无法 stat 临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:520 +#: plugins/sudoers/visudo.c:521 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "零长度的临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:526 +#: plugins/sudoers/visudo.c:527 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "编辑器(%s)失败,%s 未更改" -#: plugins/sudoers/visudo.c:548 +#: plugins/sudoers/visudo.c:549 #, c-format msgid "%s unchanged" msgstr "%s 未更改" -#: plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "无法重新打开临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:619 +#: plugins/sudoers/visudo.c:620 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "无法解析临时文件(%s),未知错误" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:657 #, c-format msgid "internal error, unable to find %s in list!" msgstr "内部错误,在列表中找不到 %s!" -#: plugins/sudoers/visudo.c:717 plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:718 plugins/sudoers/visudo.c:727 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "无法将 %s 的 (uid, gid) 设为 (%u, %u)" -#: plugins/sudoers/visudo.c:721 plugins/sudoers/visudo.c:731 -#, c-format -msgid "unable to change mode of %s to 0%o" -msgstr "无法将 %s 的模式更改为 0%o" - -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/visudo.c:749 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 和 %s 不在同一个文件系统,使用 mv 进行重命名" -#: plugins/sudoers/visudo.c:762 +#: plugins/sudoers/visudo.c:763 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "命令失败:“%s %s %s”,%s 未更改" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:773 #, c-format msgid "error renaming %s, %s unchanged" msgstr "重命名 %s 出错,%s 未更改" -#: plugins/sudoers/visudo.c:834 +#: plugins/sudoers/visudo.c:837 msgid "What now? " msgstr "现在做什么?" -#: plugins/sudoers/visudo.c:848 +#: plugins/sudoers/visudo.c:851 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1944,62 +2003,72 @@ " 退出,不保存对 sudoers 文件的更改(x)\n" " 退出并将更改保存到 sudoers 文件(危险!)(Q)\n" -#: plugins/sudoers/visudo.c:894 +#: plugins/sudoers/visudo.c:897 #, c-format msgid "unable to run %s" msgstr "无法运行 %s" -#: plugins/sudoers/visudo.c:924 +#: plugins/sudoers/visudo.c:927 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s:错误的所有者(uid, gid),应为 (%u, %u)\n" -#: plugins/sudoers/visudo.c:931 +#: plugins/sudoers/visudo.c:934 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s:权限不正确,模式应该是 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo.c:963 plugins/sudoers/visudo_json.c:1021 #, c-format msgid "failed to parse %s file, unknown error" msgstr "解析 %s 文件失败,未知错误" -#: plugins/sudoers/visudo.c:976 plugins/sudoers/visudo_json.c:1042 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s 中第 %d 行附近出现解析错误\n" -#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:982 plugins/sudoers/visudo_json.c:1035 #, c-format msgid "parse error in %s\n" msgstr "%s 中出现解析错误\n" -#: plugins/sudoers/visudo.c:987 plugins/sudoers/visudo.c:994 +#: plugins/sudoers/visudo.c:990 plugins/sudoers/visudo.c:997 #, c-format msgid "%s: parsed OK\n" msgstr "%s:解析正确\n" -#: plugins/sudoers/visudo.c:1041 +#: plugins/sudoers/visudo.c:1044 #, c-format msgid "%s busy, try again later" msgstr "%s 忙,请稍后重试" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1141 +#, c-format +msgid "Error: %s:%d cycle in %s \"%s\"" +msgstr "错误:%s:%d 在 %s “%s”中循环" + +#: plugins/sudoers/visudo.c:1142 +#, c-format +msgid "Warning: %s:%d cycle in %s \"%s\"" +msgstr "警告:%s:%d 在 %s “%s”中循环" + +#: plugins/sudoers/visudo.c:1146 #, c-format -msgid "%s:%d cycle in %s \"%s\"" -msgstr "%s:%d 在 %s “%s”中循环" +msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgstr "错误:%s:%d 引用了 %s “%s”但尚未定义" -#: plugins/sudoers/visudo.c:1140 +#: plugins/sudoers/visudo.c:1147 #, c-format -msgid "%s:%d %s \"%s\" referenced but not defined" -msgstr "%s:%d 引用了 %s “%s”但尚未定义" +msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgstr "警告:%s:%d 引用了 %s “%s”但尚未定义" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1300 #, c-format -msgid "%s:%d unused %s \"%s\"" -msgstr "%s:%d 未使用的 %s “%s”" +msgid "Warning: %s:%d unused %s \"%s\"" +msgstr "警告:%s:%d 未使用的 %s “%s”" -#: plugins/sudoers/visudo.c:1403 +#: plugins/sudoers/visudo.c:1412 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2008,7 +2077,7 @@ "%s - 安全地编辑 sudoers 文件\n" "\n" -#: plugins/sudoers/visudo.c:1405 +#: plugins/sudoers/visudo.c:1414 msgid "" "\n" "Options:\n" @@ -2030,17 +2099,17 @@ " -V, --version 显示版本信息并退出\n" " -x, --export=输出文件 以 JSON 格式将 sudoers 写入输出文件" -#: plugins/sudoers/visudo_json.c:632 plugins/sudoers/visudo_json.c:667 +#: plugins/sudoers/visudo_json.c:616 plugins/sudoers/visudo_json.c:651 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "未知的默认条目“%s”" -#: plugins/sudoers/visudo_json.c:1017 +#: plugins/sudoers/visudo_json.c:1007 #, c-format msgid "%s: input and output files must be different" msgstr "%s:输入和输出文件不能相同" -#: toke.l:926 +#: toke.l:943 msgid "too many levels of includes" msgstr "include 嵌套层数过多" @@ -2098,9 +2167,6 @@ #~ msgid "unable to reset %s to the Unix epoch" #~ msgstr "无法将 %s 重设为 Unix 戳记" -#~ msgid "invalid value" -#~ msgstr "值无效" - #~ msgid "value out of range" #~ msgstr "值超出范围" diff -Nru sudo-1.8.19p1/plugins/sudoers/policy.c sudo-1.8.20p2/plugins/sudoers/policy.c --- sudo-1.8.19p1/plugins/sudoers/policy.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/policy.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2016 Todd C. Miller + * Copyright (c) 2010-2017 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 @@ -35,6 +35,7 @@ #include "sudoers.h" #include "sudoers_version.h" #include "interfaces.h" +#include "parse.h" /* for parse_timeout() */ /* * Info passed in from the sudo front-end. @@ -256,6 +257,18 @@ remhost = *cur + sizeof("remote_host=") - 1; continue; } + if (MATCHES(*cur, "timeout=")) { + p = *cur + sizeof("timeout=") - 1; + user_timeout = parse_timeout(p); + if (user_timeout == -1) { + if (errno == ERANGE) + sudo_warnx(U_("%s: %s"), p, U_("timeout value too large")); + else + sudo_warnx(U_("%s: %s"), p, U_("invalid timeout value")); + goto bad; + } + continue; + } #ifdef ENABLE_SUDO_PLUGIN_API if (MATCHES(*cur, "plugin_dir=")) { path_plugin_dir = *cur + sizeof("plugin_dir=") - 1; @@ -580,6 +593,13 @@ if ((command_info[info_len++] = sudo_new_key_val("iolog_group", def_iolog_group)) == NULL) goto oom; } + if (def_command_timeout > 0 || user_timeout > 0) { + int timeout = def_command_timeout; + if (timeout <= 0 || user_timeout < timeout) + timeout = user_timeout; + if (asprintf(&command_info[info_len++], "timeout=%u", timeout) == -1) + goto oom; + } if (cmnd_umask != ACCESSPERMS) { if (asprintf(&command_info[info_len++], "umask=0%o", (unsigned int)cmnd_umask) == -1) goto oom; diff -Nru sudo-1.8.19p1/plugins/sudoers/rcstr.c sudo-1.8.20p2/plugins/sudoers/rcstr.c --- sudo-1.8.19p1/plugins/sudoers/rcstr.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/rcstr.c 2017-05-10 15:38:43.000000000 +0000 @@ -20,7 +20,11 @@ #include #include -#include +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -66,6 +70,7 @@ rcs->refcnt = 1; rcs->str[0] = '\0'; + /* cppcheck-suppress memleak */ debug_return_ptr(rcs->str); } diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/parser/check_digest.c sudo-1.8.20p2/plugins/sudoers/regress/parser/check_digest.c --- sudo-1.8.19p1/plugins/sudoers/regress/parser/check_digest.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/parser/check_digest.c 2017-05-10 15:38:43.000000000 +0000 @@ -30,58 +30,21 @@ #elif defined(HAVE_INTTYPES_H) # include #endif +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ +#include +#include #include "sudo_compat.h" - -#ifdef HAVE_SHA224UPDATE -# include -#else -# include "compat/sha2.h" -#endif +#include "sudo_fatal.h" +#include "sudo_queue.h" +#include "parse.h" __dso_public int main(int argc, char *argv[]); -static struct digest_function { - const char *digest_name; - const int digest_len; - void (*init)(SHA2_CTX *); -#ifdef SHA2_VOID_PTR - void (*update)(SHA2_CTX *, const void *, size_t); - void (*final)(void *, SHA2_CTX *); -#else - void (*update)(SHA2_CTX *, const unsigned char *, size_t); - void (*final)(unsigned char *, SHA2_CTX *); -#endif -} digest_functions[] = { - { - "SHA224", - SHA224_DIGEST_LENGTH, - SHA224Init, - SHA224Update, - SHA224Final - }, { - "SHA256", - SHA256_DIGEST_LENGTH, - SHA256Init, - SHA256Update, - SHA256Final - }, { - "SHA384", - SHA384_DIGEST_LENGTH, - SHA384Init, - SHA384Update, - SHA384Final - }, { - "SHA512", - SHA512_DIGEST_LENGTH, - SHA512Init, - SHA512Update, - SHA512Final - }, { - NULL - } -}; - #define NUM_TESTS 8 static const char *test_strings[NUM_TESTS] = { "", @@ -95,43 +58,79 @@ "012345678901234567890", }; +static unsigned char * +check_digest(int digest_type, const char *buf, size_t buflen, size_t *digest_len) +{ + char tfile[] = "digest.XXXXXX"; + unsigned char *digest = NULL; + int tfd; + + /* Write test data to temporary file. */ + tfd = mkstemp(tfile); + if (tfd == -1) { + sudo_warn_nodebug("mkstemp"); + goto done; + } + if ((size_t)write(tfd, buf, buflen) != buflen) { + sudo_warn_nodebug("write"); + goto done; + } + lseek(tfd, 0, SEEK_SET); + + /* Get file digest. */ + digest = sudo_filedigest(tfd, tfile, digest_type, digest_len); + if (digest == NULL) { + /* Warning (if any) printed by sudo_filedigest() */ + goto done; + } +done: + if (tfd != -1) { + close(tfd); + unlink(tfile); + } + return digest; +} + int main(int argc, char *argv[]) { - SHA2_CTX ctx; - int i, j; - struct digest_function *func; - unsigned char digest[SHA512_DIGEST_LENGTH]; static const char hex[] = "0123456789abcdef"; - unsigned char buf[1000]; + char buf[1000 * 1000]; + unsigned char *digest; + unsigned int i, j; + size_t digest_len; + int digest_type; - for (func = digest_functions; func->digest_name != NULL; func++) { + for (digest_type = 0; digest_type < SUDO_DIGEST_INVALID; digest_type++) { for (i = 0; i < NUM_TESTS; i++) { - func->init(&ctx); - func->update(&ctx, (unsigned char *)test_strings[i], - strlen(test_strings[i])); - func->final(digest, &ctx); - printf("%s (\"%s\") = ", func->digest_name, test_strings[i]); - for (j = 0; j < func->digest_len; j++) { - putchar(hex[digest[j] >> 4]); - putchar(hex[digest[j] & 0x0f]); + digest = check_digest(digest_type, test_strings[i], + strlen(test_strings[i]), &digest_len); + if (digest != NULL) { + printf("%s (\"%s\") = ", digest_type_to_name(digest_type), + test_strings[i]); + for (j = 0; j < digest_len; j++) { + putchar(hex[digest[j] >> 4]); + putchar(hex[digest[j] & 0x0f]); + } + putchar('\n'); + free(digest); } - putchar('\n'); } /* Simulate a string of a million 'a' characters. */ memset(buf, 'a', sizeof(buf)); - func->init(&ctx); - for (i = 0; i < 1000; i++) { - func->update(&ctx, buf, sizeof(buf)); - } - func->final(digest, &ctx); - printf("%s (one million 'a' characters) = ", func->digest_name); - for (j = 0; j < func->digest_len; j++) { - putchar(hex[digest[j] >> 4]); - putchar(hex[digest[j] & 0x0f]); + digest = check_digest(digest_type, buf, sizeof(buf), &digest_len); + if (digest != NULL) { + printf("%s (one million 'a' characters) = ", + digest_type_to_name(digest_type)); + for (j = 0; j < digest_len; j++) { + putchar(hex[digest[j] >> 4]); + putchar(hex[digest[j] & 0x0f]); + } + putchar('\n'); + free(digest); } - putchar('\n'); } - exit(0); + + return 0; } diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/parser/check_digest.out.ok sudo-1.8.20p2/plugins/sudoers/regress/parser/check_digest.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/parser/check_digest.out.ok 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/parser/check_digest.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -1,36 +1,36 @@ -SHA224 ("") = d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f -SHA224 ("a") = abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5 -SHA224 ("abc") = 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 -SHA224 ("message digest") = 2cb21c83ae2f004de7e81c3c7019cbcb65b71ab656b22d6d0c39b8eb -SHA224 ("abcdefghijklmnopqrstuvwxyz") = 45a5f72c39c5cff2522eb3429799e49e5f44b356ef926bcf390dccc2 -SHA224 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525 -SHA224 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = bff72b4fcb7d75e5632900ac5f90d219e05e97a7bde72e740db393d9 -SHA224 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = b50aecbe4e9bb0b57bc5f3ae760a8e01db24f203fb3cdcd13148046e -SHA224 (one million 'a' characters) = 20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67 -SHA256 ("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -SHA256 ("a") = ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb -SHA256 ("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad -SHA256 ("message digest") = f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650 -SHA256 ("abcdefghijklmnopqrstuvwxyz") = 71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 -SHA256 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1 -SHA256 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0 -SHA256 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e -SHA256 (one million 'a' characters) = cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0 -SHA384 ("") = 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b -SHA384 ("a") = 54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31 -SHA384 ("abc") = cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7 -SHA384 ("message digest") = 473ed35167ec1f5d8e550368a3db39be54639f828868e9454c239fc8b52e3c61dbd0d8b4de1390c256dcbb5d5fd99cd5 -SHA384 ("abcdefghijklmnopqrstuvwxyz") = feb67349df3db6f5924815d6c3dc133f091809213731fe5c7b5f4999e463479ff2877f5f2936fa63bb43784b12f3ebb4 -SHA384 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b -SHA384 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 1761336e3f7cbfe51deb137f026f89e01a448e3b1fafa64039c1464ee8732f11a5341a6f41e0c202294736ed64db1a84 -SHA384 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = b12932b0627d1c060942f5447764155655bd4da0c9afa6dd9b9ef53129af1b8fb0195996d2de9ca0df9d821ffee67026 -SHA384 (one million 'a' characters) = 9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985 -SHA512 ("") = cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e -SHA512 ("a") = 1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75 -SHA512 ("abc") = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f -SHA512 ("message digest") = 107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f3309e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c -SHA512 ("abcdefghijklmnopqrstuvwxyz") = 4dbff86cc2ca1bae1e16468a05cb9881c97f1753bce3619034898faa1aabe429955a1bf8ec483d7421fe3c1646613a59ed5441fb0f321389f77f48a879c7b1f1 -SHA512 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445 -SHA512 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 1e07be23c26a86ea37ea810c8ec7809352515a970e9253c26f536cfc7a9996c45c8370583e0a78fa4a90041d71a4ceab7423f19c71b9d5a3e01249f0bebd5894 -SHA512 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 72ec1ef1124a45b047e8b7c75a932195135bb61de24ec0d1914042246e0aec3a2354e093d76f3048b456764346900cb130d2a4fd5dd16abb5e30bcb850dee843 -SHA512 (one million 'a' characters) = e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b +sha224 ("") = d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f +sha224 ("a") = abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5 +sha224 ("abc") = 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 +sha224 ("message digest") = 2cb21c83ae2f004de7e81c3c7019cbcb65b71ab656b22d6d0c39b8eb +sha224 ("abcdefghijklmnopqrstuvwxyz") = 45a5f72c39c5cff2522eb3429799e49e5f44b356ef926bcf390dccc2 +sha224 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525 +sha224 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = bff72b4fcb7d75e5632900ac5f90d219e05e97a7bde72e740db393d9 +sha224 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = b50aecbe4e9bb0b57bc5f3ae760a8e01db24f203fb3cdcd13148046e +sha224 (one million 'a' characters) = 20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67 +sha256 ("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +sha256 ("a") = ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb +sha256 ("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad +sha256 ("message digest") = f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650 +sha256 ("abcdefghijklmnopqrstuvwxyz") = 71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 +sha256 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1 +sha256 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0 +sha256 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e +sha256 (one million 'a' characters) = cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0 +sha384 ("") = 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b +sha384 ("a") = 54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31 +sha384 ("abc") = cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7 +sha384 ("message digest") = 473ed35167ec1f5d8e550368a3db39be54639f828868e9454c239fc8b52e3c61dbd0d8b4de1390c256dcbb5d5fd99cd5 +sha384 ("abcdefghijklmnopqrstuvwxyz") = feb67349df3db6f5924815d6c3dc133f091809213731fe5c7b5f4999e463479ff2877f5f2936fa63bb43784b12f3ebb4 +sha384 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b +sha384 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 1761336e3f7cbfe51deb137f026f89e01a448e3b1fafa64039c1464ee8732f11a5341a6f41e0c202294736ed64db1a84 +sha384 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = b12932b0627d1c060942f5447764155655bd4da0c9afa6dd9b9ef53129af1b8fb0195996d2de9ca0df9d821ffee67026 +sha384 (one million 'a' characters) = 9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985 +sha512 ("") = cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e +sha512 ("a") = 1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75 +sha512 ("abc") = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f +sha512 ("message digest") = 107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f3309e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c +sha512 ("abcdefghijklmnopqrstuvwxyz") = 4dbff86cc2ca1bae1e16468a05cb9881c97f1753bce3619034898faa1aabe429955a1bf8ec483d7421fe3c1646613a59ed5441fb0f321389f77f48a879c7b1f1 +sha512 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445 +sha512 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 1e07be23c26a86ea37ea810c8ec7809352515a970e9253c26f536cfc7a9996c45c8370583e0a78fa4a90041d71a4ceab7423f19c71b9d5a3e01249f0bebd5894 +sha512 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 72ec1ef1124a45b047e8b7c75a932195135bb61de24ec0d1914042246e0aec3a2354e093d76f3048b456764346900cb130d2a4fd5dd16abb5e30bcb850dee843 +sha512 (one million 'a' characters) = e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/parser/check_gentime.c sudo-1.8.20p2/plugins/sudoers/regress/parser/check_gentime.c --- sudo-1.8.19p1/plugins/sudoers/regress/parser/check_gentime.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/parser/check_gentime.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2017 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 +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudoers_debug.h" +#include "parse.h" + +__dso_public int main(int argc, char *argv[]); + +struct gentime_test { + char *gentime; + time_t unixtime; +} tests[] = { + { "199412161032ZZ", -1 }, + { "199412161032Z", 787573920 }, + { "199412160532-0500", 787573920 }, + { "199412160532-05000", -1 }, + { "199412160532", 787573920 }, /* local time is EST */ + { "20170214083000-0500", 1487079000 }, + { "201702140830-0500", 1487079000 }, + { "201702140830", 1487079000 }, /* local time is EST */ + { "201702140830.3-0500", 1487079018 }, + { "201702140830,3-0500", 1487079018 }, + { "20170214083000.5Z", 1487061000 }, + { "20170214083000,5Z", 1487061000 }, + { "201702142359.4Z", 1487116764 }, + { "201702142359,4Z", 1487116764 }, + { "2017021408.5Z", 1487061000 }, + { "2017021408,5Z", 1487061000 }, + { "20170214Z", -1 }, + { NULL, -1 } +}; + +int +main(int argc, char *argv[]) +{ + int ntests, errors = 0; + time_t result; + + /* Do local time tests in Eastern Standard Time. */ + putenv("TZ=EST5EST5"); + tzset(); + + for (ntests = 0; tests[ntests].gentime != NULL; ntests++) { + result = parse_gentime(tests[ntests].gentime); + if (result != tests[ntests].unixtime) { + fprintf(stderr, "check_gentime[%d]: %s: expected %lld, got %lld\n", + ntests, tests[ntests].gentime, + (long long)tests[ntests].unixtime, (long long)result); + errors++; + } + } + printf("check_gentime: %d tests run, %d errors, %d%% success rate\n", + ntests, errors, (ntests - errors) * 100 / ntests); + exit(errors); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.in sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.in --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.in 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.in 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,13 @@ +# Test parsing of command_timeout and TIMEOUT syntax +Defaults command_timeout=2d8h10m59s +user0 ALL = TIMEOUT=7D4H10M30S /usr/bin/id, /usr/bin/who, TIMEOUT=0 /bin/ls +user1 ALL = TIMEOUT=7d4h10m30s /usr/bin/id +user2 ALL = TIMEOUT=4h10m30s /usr/bin/id +user3 ALL = TIMEOUT=10m30s /usr/bin/id +user4 ALL = TIMEOUT=14d /usr/bin/id +user5 ALL = TIMEOUT=5m /usr/bin/id +user6 ALL = TIMEOUT=30s /usr/bin/id +user7 ALL = TIMEOUT=45 /usr/bin/id +user8 ALL = TIMEOUT=7d4h10m30s /usr/bin/id, TIMEOUT=4h10m30s /usr/bin/id, \ + TIMEOUT=10m30s /usr/bin/id, TIMEOUT=14d /usr/bin/id, \ + TIMEOUT=5m /usr/bin/id, TIMEOUT=30s /usr/bin/id diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.json.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.json.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.json.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,180 @@ +{ + "Defaults": [ + { + "Options": [ + { "command_timeout": "2d8h10m59s" } + ] + } + ], + "User_Specs": [ + { + "User_List": [ + { "username": "user0" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 619830 } + ], + "Commands": [ + { "command": "/usr/bin/id" }, + { "command": "/usr/bin/who" }, + { "command": "/bin/ls" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user1" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 619830 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user2" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 15030 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user3" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 630 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user4" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 1209600 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user5" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 300 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user6" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 30 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user7" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 45 } + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user8" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "command_timeout": 619830 } + ], + "Commands": [ + { "command": "/usr/bin/id" }, + { "command": "/usr/bin/id" }, + { "command": "/usr/bin/id" }, + { "command": "/usr/bin/id" }, + { "command": "/usr/bin/id" }, + { "command": "/usr/bin/id" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.out.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,14 @@ +Parses OK. + +Defaults command_timeout=2d8h10m59s + + +user0 ALL = TIMEOUT=619830 /usr/bin/id, TIMEOUT=619830 /usr/bin/who, /bin/ls +user1 ALL = TIMEOUT=619830 /usr/bin/id +user2 ALL = TIMEOUT=15030 /usr/bin/id +user3 ALL = TIMEOUT=630 /usr/bin/id +user4 ALL = TIMEOUT=1209600 /usr/bin/id +user5 ALL = TIMEOUT=300 /usr/bin/id +user6 ALL = TIMEOUT=30 /usr/bin/id +user7 ALL = TIMEOUT=45 /usr/bin/id +user8 ALL = TIMEOUT=619830 /usr/bin/id, TIMEOUT=15030 /usr/bin/id, TIMEOUT=630 /usr/bin/id, TIMEOUT=1209600 /usr/bin/id, TIMEOUT=300 /usr/bin/id, TIMEOUT=30 /usr/bin/id diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.toke.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.toke.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test17.toke.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test17.toke.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,11 @@ +# +DEFAULTS DEFVAR = WORD(2) +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND , COMMAND , CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test18.in sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test18.in --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test18.in 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test18.in 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,8 @@ +# Test command_timeout and TIMEOUT syntax errors +Defaults command_timeout=2d8h10m59ss +Defaults:root command_timeout=15f +user0 ALL = TIMEOUT=7dd4h10m30s /usr/bin/id, /usr/bin/who, TIMEOUT=0 /bin/ls +user1 ALL = TIMEOUT=7d4h10mm30s /usr/bin/id +user2 ALL = TIMEOUT=4hg10m30s /usr/bin/id +user3 ALL = TIMEOUT=10m30ss /usr/bin/id +user4 ALL = TIMEOUT=14g /usr/bin/id diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test18.out.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test18.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test18.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test18.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,6 @@ +Parse error in sudoers near line 4 (problem with defaults entries). + +Defaults command_timeout=2d8h10m59ss +Defaults:root command_timeout=15f + + diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test18.toke.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test18.toke.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test18.toke.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test18.toke.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,10 @@ +# +DEFAULTS DEFVAR = WORD(2) +DEFAULTS_USER WORD(5) DEFVAR = WORD(2) +WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND , COMMAND , CMND_TIMEOUT = WORD(5) COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND +WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND +testsudoers: sudoers:2 value "2d8h10m59ss" is invalid for option "command_timeout" +testsudoers: sudoers:3 value "15f" is invalid for option "command_timeout" diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.in sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.in --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.in 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.in 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,12 @@ +# Test parsing of NOTBEFORE and NOTAFTER syntax +# Local time zone parsing is checked in visudo/test10.sh +user0 ALL = NOTBEFORE=20170214083000Z NOTAFTER=20170301083000Z /usr/bin/id, /bin/ls +user1 ALL = NOTBEFORE=201702140830Z /usr/bin/id, NOTAFTER=20170301083000Z /bin/ls +user2 ALL = NOTBEFORE=201702140830.3Z /usr/bin/id +user3 ALL = NOTBEFORE=2017021408Z /usr/bin/id +user4 ALL = NOTBEFORE=2017021408.4Z /usr/bin/id +user5 ALL = NOTBEFORE=20170214083000.5Z /usr/bin/id +user6 ALL = NOTBEFORE=20170214083000\,5Z /usr/bin/id +user7 ALL = NOTBEFORE=20170214033000-0500 /usr/bin/id +user8 ALL = NOTBEFORE=20170214033000.0-0500 /usr/bin/id +user9 ALL = NOTBEFORE=20170214033000\,0-0500 /usr/bin/id diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.json.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.json.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.json.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,156 @@ +{ + "User_Specs": [ + { + "User_List": [ + { "username": "user0" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" }, + { "command": "/bin/ls" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user1" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" }, + { "command": "/bin/ls" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user2" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user3" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user4" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user5" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user6" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user7" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user8" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user9" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "/usr/bin/id" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.out.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,14 @@ +Parses OK. + + + +user0 ALL = NOTBEFORE=20170214083000Z NOTAFTER=20170301083000Z /usr/bin/id, NOTBEFORE=20170214083000Z NOTAFTER=20170301083000Z /bin/ls +user1 ALL = NOTBEFORE=20170214083000Z /usr/bin/id, NOTBEFORE=20170214083000Z NOTAFTER=20170301083000Z /bin/ls +user2 ALL = NOTBEFORE=20170214083018Z /usr/bin/id +user3 ALL = NOTBEFORE=20170214080000Z /usr/bin/id +user4 ALL = NOTBEFORE=20170214082400Z /usr/bin/id +user5 ALL = NOTBEFORE=20170214083000Z /usr/bin/id +user6 ALL = NOTBEFORE=20170214083000Z /usr/bin/id +user7 ALL = NOTBEFORE=20170214083000Z /usr/bin/id +user8 ALL = NOTBEFORE=20170214083000Z /usr/bin/id +user9 ALL = NOTBEFORE=20170214083000Z /usr/bin/id diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.toke.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.toke.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test19.toke.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test19.toke.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,12 @@ +# +# +WORD(5) ALL = NOTBEFORE = WORD(5) NOTAFTER = WORD(5) COMMAND , COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND , NOTAFTER = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.in sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.in --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.in 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.in 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,26 @@ +# Test parsing of tuples +Defaults lecture +Defaults !lecture +Defaults lecture=never +Defaults lecture=once +Defaults lecture=always + +Defaults listpw +Defaults !listpw +Defaults listpw=never +Defaults listpw=any +Defaults listpw=all +Defaults listpw=always + +Defaults verifypw +Defaults !verifypw +Defaults verifypw=never +Defaults verifypw=any +Defaults verifypw=all +Defaults verifypw=always + +Defaults fdexec +Defaults !fdexec +Defaults fdexec=never +Defaults fdexec=digest_only +Defaults fdexec=always diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.json.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.json.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.json.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,114 @@ +{ + "Defaults": [ + { + "Options": [ + { "lecture": true } + ] + }, + { + "Options": [ + { "lecture": false } + ] + }, + { + "Options": [ + { "lecture": "never" } + ] + }, + { + "Options": [ + { "lecture": "once" } + ] + }, + { + "Options": [ + { "lecture": "always" } + ] + }, + { + "Options": [ + { "listpw": true } + ] + }, + { + "Options": [ + { "listpw": false } + ] + }, + { + "Options": [ + { "listpw": "never" } + ] + }, + { + "Options": [ + { "listpw": "any" } + ] + }, + { + "Options": [ + { "listpw": "all" } + ] + }, + { + "Options": [ + { "listpw": "always" } + ] + }, + { + "Options": [ + { "verifypw": true } + ] + }, + { + "Options": [ + { "verifypw": false } + ] + }, + { + "Options": [ + { "verifypw": "never" } + ] + }, + { + "Options": [ + { "verifypw": "any" } + ] + }, + { + "Options": [ + { "verifypw": "all" } + ] + }, + { + "Options": [ + { "verifypw": "always" } + ] + }, + { + "Options": [ + { "fdexec": true } + ] + }, + { + "Options": [ + { "fdexec": false } + ] + }, + { + "Options": [ + { "fdexec": "never" } + ] + }, + { + "Options": [ + { "fdexec": "digest_only" } + ] + }, + { + "Options": [ + { "fdexec": "always" } + ] + } + ] +} diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.out.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,26 @@ +Parses OK. + +Defaults lecture +Defaults !lecture +Defaults lecture=never +Defaults lecture=once +Defaults lecture=always +Defaults listpw +Defaults !listpw +Defaults listpw=never +Defaults listpw=any +Defaults listpw=all +Defaults listpw=always +Defaults verifypw +Defaults !verifypw +Defaults verifypw=never +Defaults verifypw=any +Defaults verifypw=all +Defaults verifypw=always +Defaults fdexec +Defaults !fdexec +Defaults fdexec=never +Defaults fdexec=digest_only +Defaults fdexec=always + + diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.toke.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.toke.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test20.toke.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test20.toke.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,26 @@ +# +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) + +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) + +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) + +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.in sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.in --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.in 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.in 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,38 @@ +# Test parsing of syslog settings +Defaults syslog +Defaults !syslog +Defaults syslog=auth +Defaults syslog=daemon +Defaults syslog=user +Defaults syslog=local0 +Defaults syslog=local1 +Defaults syslog=local2 +Defaults syslog=local3 +Defaults syslog=local4 +Defaults syslog=local5 +Defaults syslog=local6 +Defaults syslog=local7 + +Defaults syslog_goodpri +Defaults !syslog_goodpri +Defaults syslog_goodpri=alert +Defaults syslog_goodpri=crit +Defaults syslog_goodpri=debug +Defaults syslog_goodpri=emerg +Defaults syslog_goodpri=err +Defaults syslog_goodpri=info +Defaults syslog_goodpri=notice +Defaults syslog_goodpri=warning +Defaults syslog_goodpri=none + +Defaults syslog_badpri +Defaults !syslog_badpri +Defaults syslog_badpri=alert +Defaults syslog_badpri=crit +Defaults syslog_badpri=debug +Defaults syslog_badpri=emerg +Defaults syslog_badpri=err +Defaults syslog_badpri=info +Defaults syslog_badpri=notice +Defaults syslog_badpri=warning +Defaults syslog_badpri=none diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.json.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.json.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.json.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,179 @@ +{ + "Defaults": [ + { + "Options": [ + { "syslog": true } + ] + }, + { + "Options": [ + { "syslog": false } + ] + }, + { + "Options": [ + { "syslog": "auth" } + ] + }, + { + "Options": [ + { "syslog": "daemon" } + ] + }, + { + "Options": [ + { "syslog": "user" } + ] + }, + { + "Options": [ + { "syslog": "local0" } + ] + }, + { + "Options": [ + { "syslog": "local1" } + ] + }, + { + "Options": [ + { "syslog": "local2" } + ] + }, + { + "Options": [ + { "syslog": "local3" } + ] + }, + { + "Options": [ + { "syslog": "local4" } + ] + }, + { + "Options": [ + { "syslog": "local5" } + ] + }, + { + "Options": [ + { "syslog": "local6" } + ] + }, + { + "Options": [ + { "syslog": "local7" } + ] + }, + { + "Options": [ + { "syslog_goodpri": true } + ] + }, + { + "Options": [ + { "syslog_goodpri": false } + ] + }, + { + "Options": [ + { "syslog_goodpri": "alert" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "crit" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "debug" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "emerg" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "err" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "info" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "notice" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "warning" } + ] + }, + { + "Options": [ + { "syslog_goodpri": "none" } + ] + }, + { + "Options": [ + { "syslog_badpri": true } + ] + }, + { + "Options": [ + { "syslog_badpri": false } + ] + }, + { + "Options": [ + { "syslog_badpri": "alert" } + ] + }, + { + "Options": [ + { "syslog_badpri": "crit" } + ] + }, + { + "Options": [ + { "syslog_badpri": "debug" } + ] + }, + { + "Options": [ + { "syslog_badpri": "emerg" } + ] + }, + { + "Options": [ + { "syslog_badpri": "err" } + ] + }, + { + "Options": [ + { "syslog_badpri": "info" } + ] + }, + { + "Options": [ + { "syslog_badpri": "notice" } + ] + }, + { + "Options": [ + { "syslog_badpri": "warning" } + ] + }, + { + "Options": [ + { "syslog_badpri": "none" } + ] + } + ] +} diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.out.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,39 @@ +Parses OK (problem with defaults entries). + +Defaults syslog +Defaults !syslog +Defaults syslog=auth +Defaults syslog=daemon +Defaults syslog=user +Defaults syslog=local0 +Defaults syslog=local1 +Defaults syslog=local2 +Defaults syslog=local3 +Defaults syslog=local4 +Defaults syslog=local5 +Defaults syslog=local6 +Defaults syslog=local7 +Defaults syslog_goodpri +Defaults !syslog_goodpri +Defaults syslog_goodpri=alert +Defaults syslog_goodpri=crit +Defaults syslog_goodpri=debug +Defaults syslog_goodpri=emerg +Defaults syslog_goodpri=err +Defaults syslog_goodpri=info +Defaults syslog_goodpri=notice +Defaults syslog_goodpri=warning +Defaults syslog_goodpri=none +Defaults syslog_badpri +Defaults !syslog_badpri +Defaults syslog_badpri=alert +Defaults syslog_badpri=crit +Defaults syslog_badpri=debug +Defaults syslog_badpri=emerg +Defaults syslog_badpri=err +Defaults syslog_badpri=info +Defaults syslog_badpri=notice +Defaults syslog_badpri=warning +Defaults syslog_badpri=none + + diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.toke.ok sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.toke.ok --- sudo-1.8.19p1/plugins/sudoers/regress/sudoers/test21.toke.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/sudoers/test21.toke.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,40 @@ +# +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) + +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) + +DEFAULTS DEFVAR +DEFAULTS !DEFVAR +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +testsudoers: sudoers:16 no value specified for "syslog_goodpri" +testsudoers: sudoers:28 no value specified for "syslog_badpri" diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/visudo/test10.out.ok sudo-1.8.20p2/plugins/sudoers/regress/visudo/test10.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/visudo/test10.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/visudo/test10.out.ok 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1 @@ +stdin: parsed OK diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/visudo/test10.sh sudo-1.8.20p2/plugins/sudoers/regress/visudo/test10.sh --- sudo-1.8.19p1/plugins/sudoers/regress/visudo/test10.sh 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/visudo/test10.sh 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,11 @@ +#!/bin/sh +# +# Test parsing of NOTBEFORE/NOTAFTER using local time zone +# + +./visudo -cf - <<-EOF + user1 ALL = NOTBEFORE=20151201235900 /usr/bin/id + user2 ALL = NOTBEFORE=20151201235900.2 /usr/bin/id + user3 ALL = NOTBEFORE=20151201235900\,2 /usr/bin/id + user4 ALL = NOTBEFORE=2015120123 /usr/bin/id + EOF diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/visudo/test2.err.ok sudo-1.8.20p2/plugins/sudoers/regress/visudo/test2.err.ok --- sudo-1.8.19p1/plugins/sudoers/regress/visudo/test2.err.ok 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/visudo/test2.err.ok 2017-05-10 15:38:43.000000000 +0000 @@ -1 +1 @@ -visudo: stdin:1 cycle in User_Alias "FOO" +Error: stdin:1 cycle in User_Alias "FOO" diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/visudo/test3.err.ok sudo-1.8.20p2/plugins/sudoers/regress/visudo/test3.err.ok --- sudo-1.8.19p1/plugins/sudoers/regress/visudo/test3.err.ok 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/visudo/test3.err.ok 2017-05-10 15:38:43.000000000 +0000 @@ -1,2 +1,2 @@ -visudo: stdin:1 unused User_Alias "A" -visudo: stdin:2 unused User_Alias "B" +Warning: stdin:1 unused User_Alias "A" +Warning: stdin:2 unused User_Alias "B" diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/visudo/test9.out.ok sudo-1.8.20p2/plugins/sudoers/regress/visudo/test9.out.ok --- sudo-1.8.19p1/plugins/sudoers/regress/visudo/test9.out.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/visudo/test9.out.ok 2017-01-14 04:30:22.000000000 +0000 @@ -0,0 +1 @@ +stdin: parsed OK diff -Nru sudo-1.8.19p1/plugins/sudoers/regress/visudo/test9.sh sudo-1.8.20p2/plugins/sudoers/regress/visudo/test9.sh --- sudo-1.8.19p1/plugins/sudoers/regress/visudo/test9.sh 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/regress/visudo/test9.sh 2017-01-14 04:30:22.000000000 +0000 @@ -0,0 +1,12 @@ +#!/bin/sh +# +# Test IP and network address in host-based Defaults statements +# Bugzilla #766 +# + +./visudo -cf - <<-EOF + Defaults@127.0.0.1 !authenticate + Defaults@10.0.0.0/8 !always_set_home + EOF + +exit 0 diff -Nru sudo-1.8.19p1/plugins/sudoers/set_perms.c sudo-1.8.20p2/plugins/sudoers/set_perms.c --- sudo-1.8.19p1/plugins/sudoers/set_perms.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/set_perms.c 2017-05-10 15:38:43.000000000 +0000 @@ -347,6 +347,37 @@ goto bad; } break; + + case PERM_IOLOG: + state->gidlist = ostate->gidlist; + sudo_gidlist_addref(state->gidlist); + state->rgid = ostate->rgid; + state->egid = iolog_gid; + state->sgid = ostate->sgid; + state->ruid = ROOT_UID; + state->euid = iolog_uid; + state->suid = ROOT_UID; + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: " + "[%d, %d, %d] -> [%d, %d, %d]", __func__, + (int)ostate->rgid, (int)ostate->egid, (int)ostate->sgid, + (int)state->rgid, (int)state->egid, (int)state->sgid); + if (GID_CHANGED && setresgid(ID(rgid), ID(egid), ID(sgid))) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: setresgid(%d, %d, %d)", + (int)ID(rgid), (int)ID(egid), (int)ID(sgid)); + goto bad; + } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: " + "[%d, %d, %d] -> [%d, %d, %d]", __func__, + (int)ostate->ruid, (int)ostate->euid, (int)ostate->suid, + (int)state->ruid, (int)state->euid, (int)state->suid); + if (UID_CHANGED && setresuid(ID(ruid), ID(euid), ID(suid))) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: setresuid(%d, %d, %d)", + (int)ID(ruid), (int)ID(euid), (int)ID(suid)); + goto bad; + } + break; } perm_stack_depth++; @@ -390,12 +421,6 @@ goto bad; } } - if (setresuid(OID(ruid), OID(euid), OID(suid))) { - sudo_warn("setresuid() [%d, %d, %d] -> [%d, %d, %d]", - (int)state->ruid, (int)state->euid, (int)state->suid, - (int)OID(ruid), (int)OID(euid), (int)OID(suid)); - goto bad; - } if (setresgid(OID(rgid), OID(egid), OID(sgid))) { sudo_warn("setresgid() [%d, %d, %d] -> [%d, %d, %d]", (int)state->rgid, (int)state->egid, (int)state->sgid, @@ -408,6 +433,12 @@ goto bad; } } + if (setresuid(OID(ruid), OID(euid), OID(suid))) { + sudo_warn("setresuid() [%d, %d, %d] -> [%d, %d, %d]", + (int)state->ruid, (int)state->euid, (int)state->suid, + (int)OID(ruid), (int)OID(euid), (int)OID(suid)); + goto bad; + } sudo_gidlist_delref(state->gidlist); debug_return_bool(true); @@ -686,6 +717,46 @@ } } break; + + case PERM_IOLOG: + state->gidlist = ostate->gidlist; + sudo_gidlist_addref(state->gidlist); + state->rgid = ostate->rgid; + state->egid = iolog_gid; + state->sgid = ostate->sgid; + state->ruid = ROOT_UID; + state->euid = iolog_uid; + state->suid = ROOT_UID; + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: " + "[%d, %d, %d] -> [%d, %d, %d]", __func__, + (int)ostate->rgid, (int)ostate->egid, (int)ostate->sgid, + (int)state->rgid, (int)state->egid, (int)state->sgid); + if (GID_CHANGED && setgidx(ID_EFFECTIVE, iolog_gid)) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: setgidx(ID_EFFECTIVE, %d)", (int)iolog_gid); + goto bad; + } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: " + "[%d, %d, %d] -> [%d, %d, %d]", __func__, + (int)ostate->ruid, (int)ostate->euid, (int)ostate->suid, + (int)state->ruid, (int)state->euid, (int)state->suid); + if (UID_CHANGED) { + if (ostate->ruid != ROOT_UID || ostate->suid != ROOT_UID) { + if (setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, ROOT_UID)) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, %d)", + ROOT_UID); + goto bad; + } + } + if (setuidx(ID_EFFECTIVE, timestamp_uid)) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: setuidx(ID_EFFECTIVE, %d)", + (int)timestamp_uid); + goto bad; + } + } + break; } perm_stack_depth++; @@ -1045,6 +1116,31 @@ goto bad; } break; + + case PERM_IOLOG: + state->gidlist = ostate->gidlist; + sudo_gidlist_addref(state->gidlist); + state->rgid = ostate->rgid; + state->egid = iolog_gid; + state->ruid = ROOT_UID; + state->euid = iolog_uid; + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: " + "[%d, %d] -> [%d, %d]", __func__, (int)ostate->rgid, + (int)ostate->egid, (int)state->rgid, (int)state->egid); + if (GID_CHANGED && setregid(ID(rgid), ID(egid))) { + snprintf(errbuf, sizeof(errbuf), "PERM_IOLOG: setregid(%d, %d)", + (int)ID(rgid), (int)ID(egid)); + goto bad; + } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: " + "[%d, %d] -> [%d, %d]", __func__, (int)ostate->ruid, + (int)ostate->euid, (int)state->ruid, (int)state->euid); + if (UID_CHANGED && setreuid(ID(ruid), ID(euid))) { + snprintf(errbuf, sizeof(errbuf), "PERM_IOLOG: setreuid(%d, %d)", + (int)ID(ruid), (int)ID(euid)); + goto bad; + } + break; } perm_stack_depth++; @@ -1341,6 +1437,31 @@ goto bad; } break; + + case PERM_IOLOG: + state->gidlist = ostate->gidlist; + sudo_gidlist_addref(state->gidlist); + state->rgid = ostate->rgid; + state->egid = iolog_gid; + state->ruid = ROOT_UID; + state->euid = iolog_uid; + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: " + "[%d, %d] -> [%d, %d]", __func__, (int)ostate->rgid, + (int)ostate->egid, (int)state->rgid, (int)state->egid); + if (GID_CHANGED && setegid(iolog_gid)) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: setegid(%d)", (int)iolog_gid); + goto bad; + } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: " + "[%d, %d] -> [%d, %d]", __func__, (int)ostate->ruid, + (int)ostate->euid, (int)state->ruid, (int)state->euid); + if (seteuid(timestamp_uid)) { + snprintf(errbuf, sizeof(errbuf), + "PERM_IOLOG: seteuid(%d)", (int)timestamp_uid); + goto bad; + } + break; } perm_stack_depth++; @@ -1499,6 +1620,7 @@ case PERM_SUDOERS: case PERM_RUNAS: case PERM_TIMESTAMP: + case PERM_IOLOG: /* Unsupported since we can't set euid. */ state->ruid = ostate->ruid; state->rgid = ostate->rgid; diff -Nru sudo-1.8.19p1/plugins/sudoers/sssd.c sudo-1.8.20p2/plugins/sudoers/sssd.c --- sudo-1.8.19p1/plugins/sudoers/sssd.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/sssd.c 2017-05-10 15:38:43.000000000 +0000 @@ -82,8 +82,8 @@ struct sudo_sss_handle { char *domainname; - char *host; - char *shost; + char *ipa_host; + char *ipa_shost; struct passwd *pw; void *ssslib; sss_sudo_send_recv_t fn_send_recv; @@ -385,7 +385,7 @@ debug_decl(sudo_sss_open, SUDOERS_DEBUG_SSSD); /* Create a handle container. */ - handle = malloc(sizeof(struct sudo_sss_handle)); + handle = calloc(1, sizeof(struct sudo_sss_handle)); if (handle == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_int(ENOMEM); @@ -447,9 +447,6 @@ debug_return_int(EFAULT); } - handle->domainname = NULL; - handle->host = user_runhost; - handle->shost = user_srunhost; handle->pw = sudo_user.pw; nss->handle = handle; @@ -458,7 +455,7 @@ * in sssd.conf and use it in preference to user_runhost. */ if (strcmp(user_runhost, user_host) == 0) { - if (get_ipa_hostname(&handle->shost, &handle->host) == -1) { + if (get_ipa_hostname(&handle->ipa_shost, &handle->ipa_host) == -1) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); free(handle); debug_return_int(ENOMEM); @@ -480,7 +477,10 @@ if (nss && nss->handle) { handle = nss->handle; sudo_dso_unload(handle->ssslib); - free(nss->handle); + free(handle->ipa_host); + free(handle->ipa_shost); + free(handle); + nss->handle = NULL; } debug_return_int(0); } @@ -585,8 +585,9 @@ static int sudo_sss_check_runas_user(struct sudo_sss_handle *handle, struct sss_sudo_rule *sss_rule, int group_matched) { - char **val_array = NULL; - char *val; + const char *host = handle->ipa_host ? handle->ipa_host : user_runhost; + const char *shost = handle->ipa_shost ? handle->ipa_shost : user_srunhost; + char *val, **val_array = NULL; int ret = false, i; debug_decl(sudo_sss_check_runas_user, SUDOERS_DEBUG_SSSD); @@ -656,8 +657,8 @@ switch (val[0]) { case '+': sudo_debug_printf(SUDO_DEBUG_DEBUG, "netgr_"); - if (netgr_matches(val, def_netgroup_tuple ? handle->host : NULL, - def_netgroup_tuple ? handle->shost : NULL, runas_pw->pw_name)) { + if (netgr_matches(val, def_netgroup_tuple ? host : NULL, + def_netgroup_tuple ? shost : NULL, runas_pw->pw_name)) { sudo_debug_printf(SUDO_DEBUG_DEBUG, "=> match"); ret = true; } @@ -762,7 +763,9 @@ static bool sudo_sss_check_host(struct sudo_sss_handle *handle, struct sss_sudo_rule *rule) { - char **val_array, *val; + const char *host = handle->ipa_host ? handle->ipa_host : user_runhost; + const char *shost = handle->ipa_shost ? handle->ipa_shost : user_srunhost; + char *val, **val_array; int matched = UNSPEC; bool negated; int i; @@ -792,9 +795,9 @@ /* match any or address or netgroup or hostname */ if (strcmp(val, "ALL") == 0 || addr_matches(val) || - netgr_matches(val, handle->host, handle->shost, + netgr_matches(val, host, shost, def_netgroup_tuple ? handle->pw->pw_name : NULL) || - hostname_matches(handle->shost, handle->host, val)) { + hostname_matches(shost, host, val)) { matched = negated ? false : true; } @@ -816,12 +819,13 @@ static bool sudo_sss_check_user(struct sudo_sss_handle *handle, struct sss_sudo_rule *rule) { - int ret = false; + const char *host = handle->ipa_host ? handle->ipa_host : user_runhost; + const char *shost = handle->ipa_shost ? handle->ipa_shost : user_srunhost; char **val_array; - int i; + int i, ret = false; debug_decl(sudo_sss_check_user, SUDOERS_DEBUG_SSSD); - if (!handle || !rule) + if (rule == NULL) debug_return_bool(false); switch (handle->fn_get_values(rule, "sudoUser", &val_array)) { @@ -844,8 +848,8 @@ switch (*val) { case '+': /* Netgroup spec found, check membership. */ - if (netgr_matches(val, def_netgroup_tuple ? handle->host : NULL, - def_netgroup_tuple ? handle->shost : NULL, handle->pw->pw_name)) { + if (netgr_matches(val, def_netgroup_tuple ? host : NULL, + def_netgroup_tuple ? shost : NULL, handle->pw->pw_name)) { ret = true; } break; @@ -1059,10 +1063,8 @@ *cmnd = cp; sudo_debug_printf(SUDO_DEBUG_INFO, "%s digest %s for %s", - digest_type == SUDO_DIGEST_SHA224 ? "sha224" : - digest_type == SUDO_DIGEST_SHA256 ? "sha256" : - digest_type == SUDO_DIGEST_SHA384 ? "sha384" : - "sha512", digest->digest_str, cp); + digest_type_to_name(digest_type), + digest->digest_str, cp); debug_return_ptr(digest); } } @@ -1728,6 +1730,20 @@ sudo_lbuf_append(lbuf, negated ? "NOSETENV: " : "SETENV: "); else if (strcmp(val, "mail_all_cmnds") == 0 || strcmp(val, "mail_always") == 0) sudo_lbuf_append(lbuf, negated ? "NOMAIL: " : "MAIL: "); + else if (!negated && strncmp(val, "command_timeout=", 16) == 0) + sudo_lbuf_append(lbuf, "TIMEOUT=%s ", val + 16); +#ifdef HAVE_SELINUX + else if (!negated && strncmp(val, "role=", 5) == 0) + sudo_lbuf_append(lbuf, "ROLE=%s ", val + 5); + else if (!negated && strncmp(val, "type=", 5) == 0) + sudo_lbuf_append(lbuf, "TYPE=%s ", val + 5); +#endif /* HAVE_SELINUX */ +#ifdef HAVE_PRIV_SET + else if (!negated && strncmp(val, "privs=", 6) == 0) + sudo_lbuf_append(lbuf, "PRIVS=%s ", val + 6); + else if (!negated && strncmp(val, "limitprivs=", 11) == 0) + sudo_lbuf_append(lbuf, "LIMITPRIVS=%s ", val + 11); +#endif /* HAVE_PRIV_SET */ } handle->fn_free_values(val_array); break; diff -Nru sudo-1.8.19p1/plugins/sudoers/sudoers2ldif sudo-1.8.20p2/plugins/sudoers/sudoers2ldif --- sudo-1.8.19p1/plugins/sudoers/sudoers2ldif 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/sudoers2ldif 2017-05-10 15:38:43.000000000 +0000 @@ -39,6 +39,8 @@ my %CA; my $base=$ENV{SUDOERS_BASE} or die "$0: Container SUDOERS_BASE undefined\n"; my @options=(); +my $notBefore; +my $notAfter; my $did_defaults=0; my $order = 0; @@ -102,6 +104,8 @@ my @hosts=split /\s*,\s*/,$p2; my @cmds= split /\s*,\s*/,$p3; @options=(); + undef $notBefore; + undef $notAfter; print "dn: cn=$username,$base\n"; print "objectClass: top\n"; print "objectClass: sudoRole\n"; @@ -121,6 +125,8 @@ } } print "sudoCommand: $_\n" foreach expand(\%CA,@cmds); + print "sudoNotBefore: $notBefore\n" if defined($notBefore); + print "sudoNotAfter: $notAfter\n" if defined($notAfter); print "sudoOption: $_\n" foreach @options; printf "sudoOrder: %d\n", ++$order; print "\n"; @@ -138,7 +144,16 @@ # preen the line a little foreach (@_){ - # if NOPASSWD: directive found, mark entire entry as not requiring + # Convert upper case command options + s/TIMEOUT=(\S+)\s*// && push @options,"timeout=$1"; + s/ROLE=(\S+)\s*// && push @options,"role=$1"; + s/TYPE=(\S+)\s*// && push @options,"type=$1"; + s/PRIVS=(\S+)\s*// && push @options,"privs=$1"; + s/LIMITPRIVS=(\S+)\s*// && push @options,"limitprivs=$1"; + s/NOTBEFORE=(\S+)\s*// && do { $notBefore=$1 }; + s/NOTAFTER=(\S+)\s*// && do { $notAfter=$1 }; + + # Convert command tags to options s/NOPASSWD:\s*// && push @options,"!authenticate"; s/PASSWD:\s*// && push @options,"authenticate"; s/NOEXEC:\s*// && push @options,"noexec"; diff -Nru sudo-1.8.19p1/plugins/sudoers/sudoers.c sudo-1.8.20p2/plugins/sudoers/sudoers.c --- sudo-1.8.19p1/plugins/sudoers/sudoers.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/sudoers.c 2017-05-10 15:38:43.000000000 +0000 @@ -86,6 +86,7 @@ struct passwd *list_pw; int long_list; uid_t timestamp_uid; +gid_t timestamp_gid; #ifdef HAVE_BSD_AUTH_H char *login_style; #endif /* HAVE_BSD_AUTH_H */ @@ -381,11 +382,13 @@ pw = sudo_getpwnam(def_timestampowner); if (pw != NULL) { timestamp_uid = pw->pw_uid; + timestamp_gid = pw->pw_gid; sudo_pw_delref(pw); } else { log_warningx(SLOG_SEND_MAIL, N_("timestamp owner (%s): No such user"), def_timestampowner); timestamp_uid = ROOT_UID; + timestamp_gid = ROOT_GID; } } @@ -476,10 +479,17 @@ goto bad; } + /* If user specified a timeout make sure sudoers allows it. */ + if (!def_user_command_timeouts && user_timeout > 0) { + /* XXX - audit/log? */ + sudo_warnx(U_("sorry, you are not allowed set a command timeout")); + 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)) { - /* XXX - audit? */ + /* XXX - audit/log? */ sudo_warnx(U_("sorry, you are not allowed to preserve the environment")); goto bad; } else { @@ -493,9 +503,15 @@ const char prefix[] = "iolog_path="; iolog_path = expand_iolog_path(prefix, def_iolog_dir, def_iolog_file, &sudo_user.iolog_file); - if (iolog_path == NULL) - goto done; - sudo_user.iolog_file++; + if (iolog_path == NULL) { + if (!def_ignore_iolog_errors) + goto done; + /* Unable to expand I/O log path, disable I/O logging. */ + def_log_input = false; + def_log_output = false; + } else { + sudo_user.iolog_file++; + } } } @@ -572,7 +588,7 @@ #if defined(_AIX) || (defined(__linux__) && !defined(HAVE_PAM)) /* Insert system-wide environment variables. */ - if (!read_env_file(_PATH_ENVIRONMENT, true)) + if (!read_env_file(_PATH_ENVIRONMENT, true, false)) sudo_warn("%s", _PATH_ENVIRONMENT); #endif #ifdef HAVE_LOGIN_CAP_H @@ -588,8 +604,12 @@ } /* Insert system-wide environment variables. */ + if (def_restricted_env_file) { + if (!read_env_file(def_env_file, false, true)) + sudo_warn("%s", def_restricted_env_file); + } if (def_env_file) { - if (!read_env_file(def_env_file, false)) + if (!read_env_file(def_env_file, false, false)) sudo_warn("%s", def_env_file); } diff -Nru sudo-1.8.19p1/plugins/sudoers/sudoers.h sudo-1.8.20p2/plugins/sudoers/sudoers.h --- sudo-1.8.19p1/plugins/sudoers/sudoers.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/sudoers.h 2017-05-10 20:37:59.000000000 +0000 @@ -103,6 +103,7 @@ int cols; int flags; int max_groups; + int timeout; mode_t umask; uid_t uid; uid_t gid; @@ -169,13 +170,14 @@ /* * Used with set_perms() */ -#define PERM_INITIAL 0x00 -#define PERM_ROOT 0x01 -#define PERM_USER 0x02 -#define PERM_FULL_USER 0x03 -#define PERM_SUDOERS 0x04 -#define PERM_RUNAS 0x05 -#define PERM_TIMESTAMP 0x06 +#define PERM_INITIAL 0x00 +#define PERM_ROOT 0x01 +#define PERM_USER 0x02 +#define PERM_FULL_USER 0x03 +#define PERM_SUDOERS 0x04 +#define PERM_RUNAS 0x05 +#define PERM_TIMESTAMP 0x06 +#define PERM_IOLOG 0x07 /* * Shortcuts for sudo_user contents. @@ -214,6 +216,7 @@ #define user_closefrom (sudo_user.closefrom) #define runas_privs (sudo_user.privs) #define runas_limitprivs (sudo_user.limitprivs) +#define user_timeout (sudo_user.timeout) #ifdef __TANDEM # define ROOT_UID 65535 @@ -331,6 +334,8 @@ bool cb_iolog_user(const union sudo_defs_val *sd_un); bool cb_iolog_group(const union sudo_defs_val *sd_un); bool cb_iolog_mode(const union sudo_defs_val *sd_un); +extern uid_t iolog_uid; +extern gid_t iolog_gid; /* iolog_path.c */ char *expand_iolog_path(const char *prefix, const char *dir, const char *file, @@ -343,7 +348,7 @@ bool env_init(char * const envp[]); bool init_envtables(void); bool insert_env_vars(char * const envp[]); -bool read_env_file(const char *, int); +bool read_env_file(const char *path, bool overwrite, bool restricted); bool rebuild_env(void); bool validate_env_vars(char * const envp[]); int sudo_setenv(const char *var, const char *val, int overwrite); @@ -364,6 +369,7 @@ extern int long_list; extern int sudo_mode; extern uid_t timestamp_uid; +extern gid_t timestamp_gid; extern sudo_conv_t sudo_conv; extern sudo_printf_t sudo_printf; @@ -391,7 +397,7 @@ int *argc_out, char ***argv_out, char * const *whitelist); /* mkdir_parents.c */ -bool sudo_mkdir_parents(char *path, uid_t uid, gid_t *gidp, mode_t mode, bool quiet); +bool sudo_mkdir_parents(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); /* gc.c */ enum sudoers_gc_types { diff -Nru sudo-1.8.19p1/plugins/sudoers/sudoers_version.h sudo-1.8.20p2/plugins/sudoers/sudoers_version.h --- sudo-1.8.19p1/plugins/sudoers/sudoers_version.h 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/sudoers_version.h 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (c) 2011-2013 Todd C. Miller + * Copyright (c) 2011-2013, 2015, 2017 + * 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 @@ -17,7 +18,6 @@ /* * Major sudoers grammar changes are documented here. * Note that minor changes such as added Defaults options are not listed here. - * This file placed in the public domain by Todd C. Miller on Apr 5, 2011. * * 1 sudo 1.1 * 2 sudo 1.3, adds support specifying a directory instead of a command. @@ -64,11 +64,12 @@ * 43 sudo 1.8.7, Support for specifying a digest along with the command. * 44 sudo 1.8.13, added MAIL/NOMAIL tags. * 45 sudo 1.8.15, added FOLLOW/NOFOLLOW tags as well as sudoedit_follow and sudoedit_checkdir Defaults. -*/ + * 46 sudo 1.8.20, added TIMEOUT, NOTBEFORE and NOTAFTER options. + */ #ifndef SUDOERS_VERSION_H #define SUDOERS_VERSION_H -#define SUDOERS_GRAMMAR_VERSION 45 +#define SUDOERS_GRAMMAR_VERSION 46 #endif /* SUDOERS_VERSION_H */ diff -Nru sudo-1.8.19p1/plugins/sudoers/sudoreplay.c sudo-1.8.20p2/plugins/sudoers/sudoreplay.c --- sudo-1.8.19p1/plugins/sudoers/sudoreplay.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/sudoreplay.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2016 Todd C. Miller + * Copyright (c) 2009-2017 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 @@ -448,7 +448,8 @@ timeout.tv_usec = (to_wait - timeout.tv_sec) * 1000000.0; /* Run event event loop to delay and get keyboard input. */ - sudo_ev_add(evbase, input_ev, &timeout, false); + if (sudo_ev_add(evbase, input_ev, &timeout, false) == -1) + sudo_fatal(NULL); sudo_ev_loop(evbase, 0); /* Even if we are not replaying, we still have to delay. */ @@ -553,7 +554,8 @@ /* Run event event loop to write output. */ /* XXX - should use a single event loop with a circular buffer. */ - sudo_ev_add(evbase, output_ev, NULL, false); + if (sudo_ev_add(evbase, output_ev, NULL, false) == -1) + sudo_fatal(NULL); sudo_ev_loop(evbase, 0); } } @@ -623,7 +625,8 @@ } /* Reschedule event to write remainder. */ - sudo_ev_add(sudo_ev_get_base(wc->wevent), wc->wevent, NULL, false); + if (sudo_ev_add(NULL, wc->wevent, NULL, false) == -1) + sudo_fatal(NULL); debug_return; } @@ -1119,7 +1122,6 @@ check_input(int fd, int what, void *v) { struct sudo_event *ev = v; - struct sudo_event_base *evbase = sudo_ev_get_base(ev); struct timeval tv, *timeout = NULL; static bool paused = 0; char ch; @@ -1134,7 +1136,7 @@ case 0: /* Ignore EOF. */ break; - case 1: + default: if (paused) { /* Any key will unpause, event is finished. */ /* XXX - pause time could be less than timeout */ @@ -1167,7 +1169,8 @@ timeout = &tv; } /* Re-enable event. */ - sudo_ev_add(evbase, ev, timeout, false); + if (sudo_ev_add(NULL, ev, timeout, false) == -1) + sudo_fatal(NULL); } debug_return; } diff -Nru sudo-1.8.19p1/plugins/sudoers/testsudoers.c sudo-1.8.20p2/plugins/sudoers/testsudoers.c --- sudo-1.8.19p1/plugins/sudoers/testsudoers.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/testsudoers.c 2017-05-10 15:38:43.000000000 +0000 @@ -38,6 +38,7 @@ #ifdef HAVE_NETGROUP_H # include #endif /* HAVE_NETGROUP_H */ +#include #include #include #include @@ -634,6 +635,20 @@ if (cs->limitprivs) printf("LIMITPRIVS=%s ", cs->limitprivs); #endif /* HAVE_PRIV_SET */ + if (cs->timeout > 0) + printf("TIMEOUT=%d ", cs->timeout); + if (cs->notbefore != UNSPEC) { + struct tm *tm = gmtime(&cs->notbefore); + printf("NOTBEFORE=%04d%02d%02d%02d%02d%02dZ ", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + } + if (cs->notafter != UNSPEC) { + struct tm *tm = gmtime(&cs->notafter); + printf("NOTAFTER=%04d%02d%02d%02d%02d%02dZ ", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + } if (TAG_CHANGED(follow)) printf("%sFOLLOW: ", cs->tags.follow ? "" : "NO"); if (TAG_CHANGED(log_input)) diff -Nru sudo-1.8.19p1/plugins/sudoers/timeout.c sudo-1.8.20p2/plugins/sudoers/timeout.c --- sudo-1.8.19p1/plugins/sudoers/timeout.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/timeout.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2017 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 +#include +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include +#include + +#include "sudo_compat.h" +#include "sudoers_debug.h" +#include "parse.h" + +/* + * Parse a command timeout in sudoers in the format 1d2h3m4s + * (days, hours, minutes, seconds) or a number of seconds with no suffix. + * Returns the number of seconds or -1 on error. + */ +int +parse_timeout(const char *timestr) +{ + debug_decl(parse_timeout, SUDOERS_DEBUG_PARSER) + const char digits[] = "0123456789"; + const char suffixes[] = "dhms"; + const char *cp; + int timeout = 0; + size_t len = 0; + int idx = 0; + + for (cp = timestr; *cp != '\0'; cp += len) { + char ch; + long l; + + if ((len = strspn(cp, digits)) == 0) { + /* parse error */ + errno = EINVAL; + debug_return_int(-1); + } + if (cp[len] == '\0') { + /* no suffix, assume seconds. */ + ch = 's'; + } else { + ch = tolower(cp[len]); + len++; + } + + /* Find a matching suffix or return an error. */ + while (suffixes[idx] != ch) { + if (suffixes[idx] == '\0') { + /* parse error */ + errno = EINVAL; + debug_return_int(-1); + } + idx++; + } + + errno = 0; + l = strtol(cp, NULL, 10); + if (errno == ERANGE || l > INT_MAX) + goto overflow; + switch (ch) { + case 'd': + if (l > INT_MAX / (24 * 60 * 60)) + goto overflow; + l *= 24 * 60 * 60; + break; + case 'h': + if (l > INT_MAX / (60 * 60)) + goto overflow; + l *= 60 * 60; + break; + case 'm': + if (l > INT_MAX / 60) + goto overflow; + l *= 60; + break; + } + if (l > INT_MAX - timeout) + goto overflow; + + timeout += l; + } + + debug_return_int(timeout); +overflow: + errno = ERANGE; + debug_return_int(-1); +} diff -Nru sudo-1.8.19p1/plugins/sudoers/timestamp.c sudo-1.8.20p2/plugins/sudoers/timestamp.c --- sudo-1.8.19p1/plugins/sudoers/timestamp.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/timestamp.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2016 Todd C. Miller + * Copyright (c) 2014-2017 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 @@ -150,26 +150,30 @@ * Returns false on failure and displays a warning to stderr. */ static bool -ts_mkdirs(char *path, uid_t owner, mode_t mode, mode_t parent_mode, bool quiet) +ts_mkdirs(char *path, uid_t owner, gid_t group, mode_t mode, + mode_t parent_mode, bool quiet) { - gid_t parent_gid = (gid_t)-1; bool ret; + mode_t omask; debug_decl(ts_mkdirs, SUDOERS_DEBUG_AUTH) - ret = sudo_mkdir_parents(path, owner, &parent_gid, parent_mode, quiet); + /* umask must not be more restrictive than the file modes. */ + omask = umask(ACCESSPERMS & ~(mode|parent_mode)); + ret = sudo_mkdir_parents(path, owner, group, parent_mode, quiet); if (ret) { /* Create final path component. */ sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "mkdir %s, mode 0%o, uid %d, gid %d", path, mode, - (int)owner, (int)parent_gid); + "mkdir %s, mode 0%o, uid %d, gid %d", path, (unsigned int)mode, + (int)owner, (int)group); if (mkdir(path, mode) != 0 && errno != EEXIST) { if (!quiet) sudo_warn(U_("unable to mkdir %s"), path); ret = false; } else { - ignore_result(chown(path, owner, parent_gid)); + ignore_result(chown(path, owner, group)); } } + umask(omask); debug_return_bool(ret); } @@ -192,7 +196,7 @@ ret = true; break; case SUDO_PATH_MISSING: - if (make_it && ts_mkdirs(path, timestamp_uid, S_IRWXU, + if (make_it && ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, S_IRWXU|S_IXGRP|S_IXOTH, quiet)) { ret = true; break; diff -Nru sudo-1.8.19p1/plugins/sudoers/timestr.c sudo-1.8.20p2/plugins/sudoers/timestr.c --- sudo-1.8.19p1/plugins/sudoers/timestr.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/timestr.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (c) 1999, 2009-2011 Todd C. Miller + * Copyright (c) 1999, 2009-2011, 2013-2015, 2017 + * 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 @@ -22,18 +23,15 @@ #include #include "sudo_compat.h" - -char *get_timestr(time_t, int); +#include "sudo_debug.h" +#include "parse.h" /* * Return a static buffer with the current date + time. - * Uses strftime() if available, else falls back to ctime(). */ char * get_timestr(time_t tstamp, int log_year) { - char *s; -#ifdef HAVE_STRFTIME static char buf[128]; struct tm *timeptr; @@ -44,17 +42,5 @@ timeptr) != 0 && buf[sizeof(buf) - 1] == '\0') return buf; } - -#endif /* HAVE_STRFTIME */ - - s = ctime(&tstamp); - if (s != NULL) { - s += 4; /* skip day of the week */ - if (log_year) - s[20] = '\0'; /* avoid the newline */ - else - s[15] = '\0'; /* don't care about year */ - } - - return s; + return NULL; } diff -Nru sudo-1.8.19p1/plugins/sudoers/toke.c sudo-1.8.20p2/plugins/sudoers/toke.c --- sudo-1.8.19p1/plugins/sudoers/toke.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/toke.c 2017-05-10 15:38:43.000000000 +0000 @@ -306,102 +306,104 @@ *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 71 -#define YY_END_OF_BUFFER 72 -static yyconst short int yy_accept[862] = +#define YY_NUM_RULES 74 +#define YY_END_OF_BUFFER 75 +static yyconst short int yy_accept[882] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 59, 67, 66, 65, 58, - 69, 38, 60, 61, 38, 62, 59, 59, 59, 59, - 64, 63, 70, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 70, 59, 59, 67, 69, - 50, 50, 50, 50, 50, 2, 70, 1, 59, 50, - 50, 59, 17, 16, 17, 16, 16, 70, 69, 70, - 3, 9, 8, 9, 4, 9, 5, 70, 13, 13, - 13, 11, 12, 70, 19, 19, 18, 18, 18, 19, - 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, - - 18, 19, 19, 59, 0, 67, 65, 69, 69, 0, - 59, 40, 0, 38, 0, 39, 0, 57, 57, 0, - 59, 59, 0, 59, 59, 59, 59, 0, 43, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 59, 68, 59, 59, 67, 0, 0, - 0, 0, 0, 69, 59, 59, 59, 59, 59, 2, - 1, 0, 1, 51, 51, 0, 59, 17, 17, 15, - 14, 15, 0, 0, 3, 9, 0, 6, 7, 9, - 9, 13, 0, 13, 13, 0, 10, 40, 0, 0, - 39, 19, 19, 0, 19, 0, 0, 18, 18, 18, - - 18, 18, 18, 19, 19, 50, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 69, 69, 0, 40, 59, - 59, 59, 59, 59, 0, 0, 43, 43, 50, 45, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 59, 59, 0, 0, - 0, 0, 0, 69, 59, 59, 59, 59, 59, 0, - 59, 10, 0, 0, 0, 18, 18, 18, 19, 19, + 0, 0, 0, 0, 75, 62, 70, 69, 68, 61, + 72, 38, 63, 64, 38, 65, 62, 62, 62, 62, + 67, 66, 73, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 73, 62, 62, 70, 72, + 53, 53, 53, 53, 53, 2, 73, 1, 62, 53, + 53, 53, 62, 17, 16, 17, 16, 16, 73, 72, + 73, 3, 9, 8, 9, 4, 9, 5, 73, 13, + 13, 13, 11, 12, 73, 19, 19, 18, 18, 18, + 19, 18, 18, 18, 18, 19, 19, 19, 19, 19, + + 19, 18, 19, 19, 62, 0, 70, 68, 72, 72, + 0, 62, 40, 0, 38, 0, 39, 0, 60, 60, + 0, 62, 62, 0, 62, 62, 62, 62, 0, 43, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 62, 71, 62, 62, 70, + 0, 0, 0, 0, 0, 72, 62, 62, 62, 62, + 62, 2, 1, 0, 1, 54, 54, 0, 53, 62, + 17, 17, 15, 14, 15, 0, 0, 3, 9, 0, + 6, 7, 9, 9, 13, 0, 13, 13, 0, 10, + 40, 0, 0, 39, 19, 19, 0, 19, 0, 0, + + 18, 18, 18, 18, 18, 18, 19, 19, 53, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 72, 72, + 0, 40, 62, 62, 62, 62, 62, 0, 0, 43, + 43, 53, 45, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 62, 62, 0, 0, 0, 0, 0, 72, 62, + 62, 62, 62, 62, 0, 62, 10, 0, 0, 0, + 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 72, 62, + 62, 62, 62, 62, 62, 0, 44, 44, 44, 0, + + 0, 43, 43, 43, 43, 43, 43, 43, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 49, 53, 53, 50, 62, 62, + 62, 62, 0, 0, 0, 0, 0, 72, 62, 62, + 62, 62, 0, 0, 0, 0, 0, 18, 18, 19, + 19, 53, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 62, 62, 62, 0, 0, + 44, 44, 44, 0, 43, 43, 0, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 0, 27, + 53, 53, 53, 53, 0, 34, 53, 53, 53, 53, + + 53, 53, 53, 53, 53, 51, 53, 53, 62, 62, + 62, 62, 62, 0, 0, 0, 72, 62, 62, 62, + 0, 0, 0, 18, 18, 19, 53, 53, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 69, 59, 59, 59, 59, 59, 59, - 0, 44, 44, 44, 0, 0, 43, 43, 43, 43, + 19, 62, 62, 62, 62, 62, 0, 44, 0, 43, + 43, 43, 0, 0, 0, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 55, 56, 57, 58, 62, 0, 0, + 72, 62, 62, 62, 0, 0, 0, 0, 0, 19, - 43, 43, 43, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 46, 50, 47, - 59, 59, 59, 59, 0, 0, 0, 0, 0, 69, - 59, 59, 59, 59, 0, 0, 0, 0, 0, 18, - 18, 19, 19, 50, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 59, 59, 59, - 0, 0, 44, 44, 44, 0, 43, 43, 0, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 0, 27, 50, 50, 50, 50, 0, 34, 50, 50, - 50, 50, 50, 50, 50, 48, 50, 59, 59, 59, - - 59, 59, 0, 0, 0, 69, 59, 59, 59, 0, - 0, 0, 18, 18, 19, 50, 50, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 59, 59, 59, 59, 59, 0, 44, 0, 43, 43, - 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, - 53, 54, 55, 59, 0, 0, 69, 59, 59, 59, - 0, 0, 0, 0, 0, 19, 50, 50, 19, 19, - 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, - - 19, 41, 41, 41, 0, 0, 43, 43, 43, 43, - 43, 43, 43, 0, 0, 0, 0, 0, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 0, 36, 50, 50, 50, 0, 26, 50, - 50, 50, 0, 35, 50, 50, 0, 25, 0, 28, - 59, 0, 0, 69, 59, 59, 59, 41, 41, 41, - 50, 50, 19, 50, 50, 19, 19, 19, 59, 41, - 41, 41, 41, 0, 43, 0, 43, 43, 43, 43, + 53, 53, 19, 19, 53, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 41, 41, 41, 0, 0, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 0, 36, 53, 53, + 53, 0, 26, 53, 53, 53, 0, 35, 53, 53, + 53, 53, 0, 25, 0, 28, 46, 62, 0, 0, + 72, 62, 62, 62, 41, 41, 41, 53, 53, 19, + 53, 53, 19, 19, 19, 62, 41, 41, 41, 41, + 0, 43, 0, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 50, 50, 50, 50, 50, 50, 50, - 50, 56, 0, 0, 69, 59, 22, 51, 0, 41, - 41, 41, 41, 50, 50, 19, 50, 50, 19, 19, - 19, 42, 42, 42, 42, 43, 0, 0, 0, 43, + 43, 43, 43, 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 0, 0, 0, 0, 0, 43, 43, 43, - 43, 43, 43, 43, 43, 50, 50, 50, 0, 37, - 50, 50, 0, 24, 0, 29, 0, 22, 69, 69, - 59, 0, 59, 42, 42, 42, 42, 50, 50, 50, - 50, 59, 59, 42, 42, 42, 42, 0, 0, 0, + 53, 53, 53, 53, 53, 53, 53, 53, 48, 53, + 59, 0, 0, 72, 62, 22, 54, 0, 41, 41, + 41, 41, 53, 53, 19, 53, 53, 19, 19, 19, + 42, 42, 42, 42, 43, 0, 0, 0, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 0, 0, 0, 0, 0, 43, 43, 43, 43, + 43, 43, 43, 43, 53, 53, 53, 0, 37, 53, + 53, 0, 24, 0, 29, 47, 0, 22, 72, 72, + 62, 0, 62, 42, 42, 42, 42, 53, 53, 53, + 53, 62, 62, 42, 42, 42, 42, 0, 0, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 49, 0, 32, 50, 50, 50, 0, 69, - 69, 20, 69, 23, 22, 0, 0, 0, 0, 0, - 22, 0, 0, 0, 42, 42, 42, 42, 50, 50, - 50, 59, 59, 59, 0, 0, 0, 43, 43, 43, + 43, 43, 52, 0, 32, 53, 53, 53, 0, 72, + 72, 20, 72, 23, 22, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 42, 42, 42, 42, 53, 53, + 53, 62, 62, 62, 0, 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 0, 30, 50, 50, 23, - 69, 0, 22, 0, 0, 0, 50, 50, 59, 59, - 59, 59, 59, 0, 0, 0, 0, 0, 43, 43, - - 43, 43, 43, 43, 43, 43, 0, 33, 50, 69, - 0, 0, 0, 0, 0, 50, 59, 59, 59, 43, - 43, 43, 43, 43, 43, 0, 31, 69, 69, 21, - 0, 0, 0, 59, 59, 59, 59, 59, 43, 43, + 43, 43, 43, 43, 43, 0, 30, 53, 53, 23, + + 72, 0, 22, 0, 0, 0, 53, 53, 62, 62, + 62, 62, 62, 0, 0, 0, 0, 0, 43, 43, + 43, 43, 43, 43, 43, 43, 0, 33, 53, 72, + 0, 0, 0, 0, 0, 53, 62, 62, 62, 43, + 43, 43, 43, 43, 43, 0, 31, 72, 72, 21, + 0, 0, 0, 62, 62, 62, 62, 62, 43, 43, 43, 43, 43, 0, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0 @@ -451,229 +453,235 @@ 21 } ; -static yyconst short int yy_base[979] = +static yyconst short int yy_base[999] = { 0, - 0, 70, 72, 80, 87, 126, 178, 248, 156, 200, - 132, 140, 319, 0, 4925, 4863, 4908, 5587, 4903, 5587, - 388, 95, 5587, 5587, 4853, 5587, 142, 400, 198, 155, - 4878, 5587, 5587, 460, 4863, 37, 40, 516, 62, 4868, - 4851, 49, 4846, 4852, 4831, 575, 590, 125, 223, 613, - 33, 45, 4815, 38, 4805, 94, 4860, 4866, 434, 4822, - 4832, 136, 0, 5587, 4857, 5587, 0, 615, 674, 108, - 0, 4800, 5587, 70, 5587, 104, 5587, 152, 4799, 73, - 135, 5587, 161, 171, 651, 705, 749, 256, 245, 807, - 857, 4807, 82, 151, 913, 4801, 4811, 4797, 4807, 4802, - - 960, 0, 94, 4782, 645, 4831, 4824, 4824, 5587, 266, - 541, 204, 4813, 614, 718, 4771, 843, 947, 4767, 984, - 997, 1035, 4793, 4804, 572, 719, 276, 4790, 175, 1080, - 1125, 4767, 4772, 4761, 4757, 4759, 4756, 406, 4728, 4705, - 4698, 4688, 4688, 391, 5587, 173, 339, 637, 4666, 4663, - 4650, 4644, 4645, 397, 133, 385, 139, 349, 395, 257, - 4711, 731, 4710, 1019, 4658, 1036, 345, 0, 4706, 296, - 5587, 5587, 941, 393, 0, 4649, 654, 5587, 5587, 4643, - 552, 4641, 4687, 435, 595, 425, 4689, 649, 981, 1159, - 4637, 1165, 0, 1194, 1222, 1189, 1057, 1261, 4675, 1100, - - 1221, 840, 1311, 1367, 4631, 0, 4635, 4599, 4597, 4592, - 991, 4583, 4580, 4571, 4563, 4614, 4609, 1236, 1246, 1414, - 1281, 985, 1454, 4595, 4580, 1499, 674, 1545, 1590, 1635, - 4573, 4557, 4558, 4537, 4548, 4534, 4541, 4538, 4550, 4549, - 4543, 4522, 4518, 4528, 4525, 4522, 976, 398, 4489, 4487, - 4477, 4475, 4480, 541, 411, 4483, 396, 490, 499, 1438, - 515, 4535, 4522, 4521, 1682, 1692, 4520, 1737, 0, 4494, - 4480, 4464, 4476, 4464, 4471, 4470, 4454, 4453, 4444, 4430, - 4441, 625, 4407, 4470, 1782, 415, 0, 0, 1061, 658, - 4446, 4445, 1820, 606, 4358, 4357, 702, 1387, 1833, 1435, - - 1110, 1879, 1926, 4356, 660, 4338, 4333, 645, 677, 4345, - 4338, 4341, 4338, 4329, 4327, 4323, 4326, 0, 4329, 0, - 832, 176, 419, 648, 4312, 4314, 4298, 4312, 4298, 660, - 516, 1081, 708, 672, 1474, 4351, 4350, 4349, 1191, 1936, - 1981, 776, 4319, 678, 820, 4327, 4320, 4323, 4320, 4300, - 4298, 4294, 4301, 249, 4318, 4324, 4281, 2028, 2040, 2052, - 4313, 4312, 2062, 4312, 4310, 4309, 4308, 828, 1519, 1139, - 1565, 1162, 2075, 0, 1612, 2122, 1655, 1291, 2168, 2215, - 884, 5587, 4283, 4288, 4289, 4282, 965, 5587, 4276, 4267, - 4252, 4265, 4258, 4269, 4269, 0, 4251, 533, 781, 709, - - 980, 896, 4244, 4226, 4227, 937, 1079, 1109, 1116, 4280, - 4279, 2227, 2237, 4244, 4143, 4139, 4121, 4125, 4095, 4069, - 4071, 4053, 4053, 4042, 4014, 4031, 4017, 4011, 4006, 3948, - 2282, 1035, 2322, 2334, 1667, 3979, 3978, 3977, 3966, 2344, - 1178, 3965, 3953, 2391, 1198, 1299, 1403, 1712, 1749, 2403, - 0, 1762, 2450, 1792, 1484, 2496, 2543, 2568, 1188, 1246, - 1394, 1313, 1419, 1880, 1338, 1393, 1440, 1481, 1524, 3902, - 3890, 3855, 3847, 946, 3863, 3811, 1167, 1164, 575, 983, - 1802, 3860, 3859, 3858, 1577, 1525, 3811, 3801, 1526, 3786, - 1510, 1547, 3753, 3736, 1615, 1616, 0, 0, 0, 0, - - 3712, 2625, 1853, 1722, 3737, 3734, 3687, 1908, 2665, 1956, - 1812, 2710, 2757, 2001, 3675, 3667, 3666, 1968, 1454, 1758, - 1893, 2017, 2095, 2135, 2769, 0, 2148, 2816, 2188, 2105, - 2862, 2909, 1617, 5587, 2934, 1023, 1596, 1637, 5587, 1411, - 1001, 2122, 1695, 5587, 1752, 2181, 1763, 5587, 1858, 5587, - 1393, 3591, 3557, 1130, 2210, 1220, 1721, 3604, 3595, 2991, - 3549, 3540, 3006, 3490, 3464, 1829, 786, 3418, 3062, 1493, - 3101, 0, 1391, 3461, 3446, 2258, 2041, 2292, 2145, 3141, - 0, 2304, 3154, 2364, 2268, 3199, 3246, 3449, 3378, 3258, - 2311, 2380, 2416, 2425, 3364, 2429, 3270, 0, 2472, 3317, - - 2516, 2429, 3364, 3389, 1040, 893, 1915, 1836, 1498, 1981, - 2102, 3301, 3282, 3252, 2100, 1519, 2519, 3264, 2635, 3292, - 3282, 3258, 2646, 3206, 3179, 3459, 3182, 3161, 2007, 2008, - 0, 3517, 2652, 2685, 1619, 3173, 3177, 3142, 3557, 3087, - 2305, 2427, 2730, 2532, 3569, 0, 2791, 3582, 2836, 2483, - 3627, 3674, 2882, 3098, 3077, 3020, 2697, 2746, 2898, 3074, - 1273, 1309, 3686, 0, 2848, 1837, 2171, 1615, 2170, 5587, - 1399, 1871, 2216, 5587, 2264, 5587, 2834, 2368, 1742, 1858, - 2280, 2817, 3088, 2802, 2750, 3698, 2742, 2430, 2548, 2523, - 2452, 3708, 1976, 3748, 0, 2192, 2318, 3085, 2743, 2723, - - 2705, 3113, 2686, 2570, 2666, 2792, 3126, 3006, 3788, 0, - 3176, 3801, 3219, 3119, 3846, 3893, 2509, 2482, 3904, 3235, - 2442, 1772, 2403, 2736, 5587, 2794, 1916, 1979, 2329, 2288, - 2173, 5587, 2261, 2212, 3199, 3304, 3309, 3314, 2182, 2934, - 1982, 3389, 3527, 1994, 1948, 1908, 3448, 1902, 2737, 2889, - 3180, 3916, 3928, 3940, 1873, 1867, 3952, 1808, 1740, 3085, - 3155, 3537, 3298, 3964, 0, 3604, 3977, 3647, 3547, 4024, - 1731, 1704, 1674, 3658, 1667, 2886, 5587, 2888, 2080, 5587, - 2219, 3718, 3728, 1630, 1585, 4036, 2914, 3296, 4048, 2320, - 4060, 4072, 3763, 3769, 1578, 1492, 1467, 3615, 1368, 1248, - - 3330, 1233, 1220, 4084, 0, 2368, 3033, 5587, 3297, 2325, - 3821, 1183, 1094, 1016, 3833, 3126, 4096, 4108, 4120, 3866, - 3997, 4130, 924, 0, 830, 3181, 5587, 754, 2492, 5587, - 694, 586, 4142, 4154, 3100, 4166, 4178, 3878, 5587, 4188, - 4198, 3738, 5587, 4208, 571, 286, 244, 4009, 4218, 4256, - 4294, 4228, 4238, 4266, 55, 4332, 4248, 5587, 4304, 3779, - 5587, 4385, 4406, 4427, 4448, 4469, 4490, 4511, 4532, 4553, - 4562, 2563, 4582, 4603, 2523, 4624, 4645, 4666, 4687, 4708, - 4729, 4750, 4771, 2567, 4792, 4801, 4809, 4818, 4838, 4859, - 4880, 2794, 4901, 4922, 4943, 4964, 4985, 4994, 5013, 5022, - - 5031, 2466, 2897, 5039, 5047, 5055, 5064, 5072, 5079, 5087, - 5095, 5104, 5114, 2898, 3084, 5122, 5130, 5138, 3085, 3187, - 5147, 5157, 5177, 3234, 5186, 5194, 3235, 5203, 5213, 5233, - 2681, 2785, 5242, 5254, 5263, 5273, 3238, 3342, 5282, 5292, - 5301, 5321, 2832, 5330, 5342, 3347, 3348, 5351, 5361, 3352, - 5370, 5380, 5400, 5421, 5442, 3353, 3357, 5462, 3358, 5469, - 5479, 2926, 3006, 5488, 3559, 5508, 3460, 3598, 5517, 5527, - 3615, 3643, 5535, 5545, 5565, 4279, 3763, 3817 + 0, 70, 72, 80, 126, 131, 183, 253, 161, 205, + 86, 94, 324, 0, 4976, 4918, 4967, 5585, 4964, 5585, + 393, 87, 5585, 5585, 4914, 5585, 172, 405, 174, 185, + 4940, 5585, 5585, 465, 4925, 43, 37, 521, 62, 4934, + 4913, 76, 4912, 4916, 71, 580, 595, 83, 228, 618, + 39, 91, 4881, 30, 4878, 73, 4933, 4943, 439, 4901, + 4900, 4895, 89, 0, 5585, 4919, 5585, 0, 620, 679, + 108, 0, 4861, 5585, 117, 5585, 129, 5585, 159, 4855, + 106, 122, 5585, 166, 209, 656, 710, 754, 261, 203, + 812, 862, 4865, 223, 186, 918, 4861, 4872, 4858, 4866, + + 4858, 965, 0, 84, 4834, 650, 4882, 4877, 4877, 5585, + 271, 546, 619, 4859, 622, 723, 4818, 848, 952, 4813, + 989, 1002, 1040, 4837, 4846, 577, 724, 250, 4833, 249, + 1085, 1130, 4811, 4816, 4805, 4801, 4803, 4800, 994, 4789, + 4796, 4793, 4784, 4785, 4781, 396, 5585, 178, 125, 1000, + 4759, 4763, 4751, 4746, 4747, 231, 354, 386, 159, 379, + 245, 439, 4812, 736, 4803, 1038, 4751, 1165, 1042, 247, + 0, 4795, 299, 5585, 5585, 946, 399, 0, 4743, 659, + 5585, 5585, 4740, 401, 4739, 4767, 403, 404, 431, 4739, + 627, 668, 1192, 4683, 1198, 0, 1227, 1255, 1211, 1105, + + 1294, 4719, 1224, 1254, 845, 1344, 1400, 4690, 0, 4695, + 4680, 4679, 4675, 1246, 4666, 4664, 4655, 4651, 4705, 4697, + 1277, 1314, 1447, 1420, 990, 1487, 4680, 4666, 1532, 427, + 1578, 1623, 0, 4658, 4649, 4650, 4633, 4629, 4616, 4594, + 4588, 4598, 4597, 4591, 438, 4578, 4570, 4581, 4576, 4573, + 4570, 669, 160, 4537, 4535, 4525, 4523, 4527, 546, 397, + 4528, 504, 418, 406, 1471, 505, 4580, 4565, 4564, 1670, + 1680, 4563, 1725, 0, 4543, 4526, 4511, 4520, 4506, 4511, + 4510, 4515, 4514, 4505, 4491, 4502, 687, 4468, 4531, 1770, + 534, 0, 0, 1027, 246, 4507, 4506, 1808, 633, 4498, + + 4492, 653, 1468, 1821, 1507, 1115, 1867, 1914, 4490, 603, + 4471, 4466, 646, 665, 4478, 4471, 4446, 4443, 4430, 4427, + 4438, 4438, 4421, 4424, 0, 4427, 4339, 0, 837, 551, + 574, 654, 4323, 4325, 4309, 4323, 4309, 763, 506, 1041, + 424, 677, 1552, 4362, 4361, 4360, 1162, 1924, 1969, 781, + 4330, 691, 889, 4338, 4331, 4334, 4331, 4322, 4320, 4316, + 4323, 830, 4340, 4346, 4303, 2016, 2028, 2040, 4335, 4334, + 2050, 4334, 4332, 4331, 4330, 977, 1598, 1054, 1643, 1064, + 2063, 0, 1702, 2110, 1745, 1324, 2156, 2203, 970, 5585, + 4294, 4299, 4300, 4293, 1010, 5585, 4308, 4299, 4284, 4297, + + 4290, 4301, 4287, 4298, 4299, 0, 4282, 4282, 640, 786, + 1034, 986, 709, 4275, 4257, 4237, 641, 520, 1028, 901, + 4291, 4289, 2215, 2225, 4276, 4251, 4226, 4143, 4147, 4127, + 4101, 4083, 4065, 4065, 4054, 4026, 4043, 4029, 4019, 4009, + 3961, 2270, 1000, 2310, 2322, 1655, 3986, 3954, 3941, 3929, + 2332, 1142, 3929, 3917, 2379, 1169, 1188, 1192, 1780, 1195, + 2391, 0, 1792, 2438, 1841, 1430, 2484, 2531, 2556, 1259, + 1450, 1111, 1112, 1224, 1868, 1196, 1452, 1473, 1232, 1535, + 1320, 1321, 1427, 3843, 3835, 3828, 3790, 663, 3806, 3753, + 394, 1843, 960, 796, 1896, 3790, 3777, 3774, 1565, 1346, + + 3707, 3697, 1371, 3688, 1046, 1512, 3680, 3685, 1514, 1533, + 0, 0, 0, 0, 3660, 2613, 1944, 1608, 3651, 3634, + 3626, 1989, 2653, 2083, 1713, 2698, 2745, 2130, 3629, 3610, + 3603, 1757, 2005, 2168, 2170, 2178, 2245, 2183, 2757, 0, + 2282, 2804, 2293, 1954, 2850, 2897, 1534, 5585, 2922, 907, + 1128, 1604, 5585, 1178, 1265, 1857, 1605, 5585, 1501, 2157, + 1632, 1734, 1683, 5585, 1725, 5585, 3561, 1235, 3534, 3502, + 1156, 2147, 1426, 1236, 3545, 3520, 2979, 3452, 3432, 2994, + 3433, 3412, 1463, 791, 3381, 3050, 1305, 3089, 0, 1792, + 3378, 3377, 2352, 2029, 2411, 2204, 3129, 0, 2460, 3142, + + 2504, 2093, 3187, 3234, 3375, 3345, 3246, 2368, 2520, 2625, + 2627, 3319, 2629, 3258, 0, 2642, 3305, 2673, 2140, 3352, + 3377, 1433, 898, 1927, 1823, 1603, 2089, 2090, 3263, 2270, + 3256, 3242, 3216, 1817, 1671, 2414, 3171, 2718, 3200, 3165, + 3070, 2256, 3030, 2974, 3447, 2881, 2850, 1847, 1848, 0, + 3505, 2777, 2824, 1736, 2852, 2844, 2836, 3545, 2805, 2311, + 2461, 2870, 2638, 3557, 0, 3062, 3570, 3073, 2629, 3615, + 3662, 3099, 2797, 2738, 2734, 2685, 2639, 2734, 2886, 985, + 1342, 3674, 0, 2789, 1822, 2439, 1861, 1993, 5585, 1379, + 1860, 1995, 5585, 1996, 5585, 2695, 2670, 2356, 1819, 1478, + + 2252, 2849, 3125, 2686, 2570, 3686, 2185, 2252, 2464, 2511, + 3100, 3696, 1963, 3736, 0, 2356, 1964, 3116, 2554, 2547, + 2498, 3165, 2459, 2419, 2994, 3073, 3171, 3143, 3776, 0, + 3209, 3789, 3278, 3220, 3834, 3881, 2424, 2371, 3892, 3316, + 2264, 1936, 2204, 2418, 5585, 2534, 2115, 2159, 2136, 2160, + 2249, 5585, 2416, 2084, 3302, 3352, 3532, 3544, 2104, 2922, + 2037, 3720, 3327, 2009, 1982, 1938, 3436, 1889, 2536, 2830, + 2831, 3904, 3916, 3928, 1855, 1834, 3940, 1699, 1681, 3235, + 3327, 3590, 3353, 3952, 0, 3637, 3965, 3717, 3523, 4012, + 1636, 1617, 1590, 3536, 1565, 2724, 5585, 2850, 2273, 5585, + + 2304, 3746, 3756, 1519, 1448, 4024, 2725, 3285, 4036, 2477, + 4048, 4060, 3648, 3809, 1307, 1277, 1243, 3602, 1204, 1198, + 3506, 1161, 1125, 4072, 0, 2509, 2901, 5585, 3284, 2435, + 3854, 1079, 1071, 1030, 3821, 2902, 4084, 4096, 4108, 3985, + 4118, 4128, 1005, 0, 768, 3021, 5585, 730, 2480, 5585, + 596, 576, 4140, 4152, 2693, 4164, 4176, 3866, 5585, 4186, + 4196, 3766, 5585, 4206, 456, 289, 134, 3997, 4216, 4254, + 4292, 4226, 4236, 4264, 28, 4330, 4246, 5585, 4302, 4274, + 5585, 4383, 4404, 4425, 4446, 4467, 4488, 4509, 4530, 4551, + 4560, 2005, 4580, 4601, 2661, 4622, 4643, 4664, 4685, 4706, + + 4727, 4748, 4769, 2479, 4790, 4799, 4807, 4816, 4836, 4857, + 4878, 2765, 4899, 4920, 4941, 4962, 4983, 4992, 5011, 5020, + 5029, 2348, 2734, 5037, 5045, 5053, 5062, 5070, 5077, 5085, + 5093, 5102, 5112, 2885, 2913, 5120, 5128, 5136, 3073, 3203, + 5145, 5155, 5175, 3220, 5184, 5192, 3221, 5201, 5211, 5231, + 2552, 2994, 5240, 5252, 5261, 5271, 3369, 3370, 5280, 5290, + 5299, 5319, 3088, 5328, 5340, 3448, 3520, 5349, 5359, 3534, + 5368, 5378, 5398, 5419, 5440, 3631, 3648, 5460, 3732, 5467, + 5477, 3158, 3373, 5486, 3115, 5506, 3805, 3849, 5515, 5525, + 3850, 3980, 5533, 5543, 5563, 4284, 3981, 4285 + } ; -static yyconst short int yy_def[979] = +static yyconst short int yy_def[999] = { 0, - 861, 1, 1, 1, 862, 862, 863, 863, 864, 864, - 865, 865, 861, 13, 861, 866, 861, 861, 861, 861, - 867, 868, 861, 861, 869, 861, 870, 866, 28, 28, - 871, 861, 861, 861, 34, 34, 34, 34, 38, 38, - 38, 38, 38, 38, 38, 866, 28, 866, 861, 867, - 34, 34, 38, 38, 38, 861, 872, 861, 873, 38, - 38, 866, 874, 861, 874, 861, 874, 861, 867, 861, - 875, 876, 861, 876, 861, 876, 861, 877, 878, 878, - 878, 861, 861, 879, 880, 881, 861, 87, 87, 87, - 861, 91, 91, 91, 91, 95, 95, 95, 95, 95, - - 87, 90, 90, 866, 866, 861, 861, 882, 861, 883, - 861, 868, 884, 879, 868, 869, 869, 870, 885, 866, - 866, 28, 886, 122, 122, 122, 122, 887, 888, 38, - 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 866, 861, 866, 866, 861, 861, 861, - 861, 861, 861, 882, 866, 122, 866, 866, 866, 861, - 861, 861, 861, 889, 890, 866, 866, 891, 891, 861, - 861, 861, 883, 861, 892, 893, 893, 861, 861, 893, - 893, 894, 861, 894, 894, 861, 861, 879, 879, 879, - 895, 896, 90, 895, 897, 861, 861, 87, 198, 198, - - 198, 198, 861, 203, 204, 898, 204, 204, 204, 204, - 204, 204, 204, 90, 90, 882, 899, 861, 861, 866, - 220, 220, 122, 223, 900, 861, 901, 861, 131, 229, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 866, 866, 861, 861, - 861, 861, 861, 882, 866, 223, 866, 866, 866, 861, - 866, 861, 902, 903, 861, 90, 266, 203, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 90, 90, 899, 866, 866, 220, 220, 220, 866, - 904, 905, 905, 293, 906, 905, 907, 228, 861, 299, - - 299, 861, 299, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 866, 866, 866, 866, 861, 861, 861, 861, 861, 882, - 866, 866, 866, 866, 861, 861, 902, 902, 861, 266, - 203, 204, 204, 908, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 90, 90, 90, 90, 220, 220, 220, - 861, 909, 909, 363, 909, 910, 911, 912, 861, 913, - 302, 913, 861, 373, 913, 861, 376, 376, 861, 376, - 861, 861, 230, 230, 230, 230, 861, 861, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 866, 866, 866, - - 866, 866, 861, 861, 861, 882, 866, 866, 866, 914, - 915, 861, 90, 341, 204, 908, 908, 204, 204, 204, - 204, 204, 204, 204, 204, 90, 90, 90, 90, 90, - 866, 866, 220, 220, 866, 916, 916, 917, 918, 861, - 861, 919, 920, 861, 921, 921, 922, 379, 922, 861, - 450, 922, 861, 453, 453, 861, 453, 861, 458, 458, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 866, - 866, 866, 866, 866, 861, 861, 923, 866, 866, 866, - 861, 861, 924, 924, 861, 204, 908, 908, 204, 204, - 908, 204, 204, 204, 204, 204, 90, 90, 90, 90, - - 90, 866, 502, 502, 861, 925, 926, 440, 861, 509, - 509, 861, 509, 861, 861, 927, 927, 861, 861, 928, - 928, 929, 456, 929, 861, 525, 929, 861, 528, 528, - 861, 528, 861, 861, 861, 535, 535, 861, 861, 535, - 535, 535, 861, 861, 535, 535, 861, 861, 861, 861, - 866, 861, 861, 930, 866, 866, 866, 931, 932, 861, - 933, 933, 861, 933, 933, 563, 563, 934, 866, 866, - 866, 571, 571, 861, 935, 861, 936, 512, 936, 936, - 580, 936, 861, 583, 583, 861, 583, 937, 938, 861, - 861, 939, 939, 940, 941, 940, 861, 597, 940, 861, - - 600, 600, 600, 861, 604, 604, 604, 604, 604, 604, - 604, 866, 861, 861, 942, 866, 866, 866, 861, 861, - 943, 943, 861, 944, 944, 861, 944, 944, 626, 626, - 945, 866, 632, 632, 632, 861, 946, 947, 861, 948, - 948, 949, 586, 949, 949, 645, 949, 861, 648, 648, - 861, 648, 861, 861, 950, 950, 861, 861, 951, 951, - 952, 952, 952, 663, 952, 604, 604, 604, 861, 861, - 604, 604, 861, 861, 861, 861, 861, 861, 953, 942, - 866, 954, 955, 956, 957, 861, 956, 958, 958, 958, - 958, 866, 866, 866, 694, 694, 866, 861, 861, 959, - - 959, 861, 861, 960, 960, 961, 651, 961, 961, 709, - 961, 861, 712, 712, 861, 712, 962, 963, 861, 861, - 964, 964, 604, 861, 861, 604, 604, 604, 861, 953, - 953, 861, 942, 866, 954, 954, 954, 954, 965, 954, - 966, 966, 861, 861, 956, 956, 861, 861, 958, 958, - 958, 694, 694, 694, 967, 968, 861, 861, 969, 969, - 970, 715, 970, 970, 764, 970, 861, 767, 767, 767, - 861, 962, 962, 861, 861, 861, 861, 604, 604, 861, - 942, 861, 861, 971, 972, 861, 958, 958, 694, 866, - 694, 694, 866, 861, 861, 967, 967, 861, 861, 973, - - 973, 974, 974, 974, 804, 804, 861, 861, 604, 975, - 861, 861, 971, 971, 861, 958, 694, 694, 694, 861, - 861, 861, 861, 976, 976, 861, 861, 975, 975, 861, - 977, 978, 861, 694, 866, 694, 694, 866, 861, 861, - 861, 861, 861, 861, 861, 977, 977, 861, 866, 866, - 866, 861, 861, 861, 866, 866, 866, 861, 861, 861, - 0, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861 + 881, 1, 1, 1, 882, 882, 883, 883, 884, 884, + 885, 885, 881, 13, 881, 886, 881, 881, 881, 881, + 887, 888, 881, 881, 889, 881, 890, 886, 28, 28, + 891, 881, 881, 881, 34, 34, 34, 34, 38, 38, + 38, 38, 38, 38, 38, 886, 28, 886, 881, 887, + 34, 34, 38, 38, 38, 881, 892, 881, 893, 38, + 38, 38, 886, 894, 881, 894, 881, 894, 881, 887, + 881, 895, 896, 881, 896, 881, 896, 881, 897, 898, + 898, 898, 881, 881, 899, 900, 901, 881, 88, 88, + 88, 881, 92, 92, 92, 92, 96, 96, 96, 96, + + 96, 88, 91, 91, 886, 886, 881, 881, 902, 881, + 903, 881, 888, 904, 899, 888, 889, 889, 890, 905, + 886, 886, 28, 906, 123, 123, 123, 123, 907, 908, + 38, 131, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 886, 881, 886, 886, 881, + 881, 881, 881, 881, 881, 902, 886, 123, 886, 886, + 886, 881, 881, 881, 881, 909, 910, 886, 132, 886, + 911, 911, 881, 881, 881, 903, 881, 912, 913, 913, + 881, 881, 913, 913, 914, 881, 914, 914, 881, 881, + 899, 899, 899, 915, 916, 91, 915, 917, 881, 881, + + 88, 201, 201, 201, 201, 881, 206, 207, 918, 207, + 207, 207, 207, 207, 207, 207, 91, 91, 902, 919, + 881, 881, 886, 223, 223, 123, 226, 920, 881, 921, + 881, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 886, 886, 881, 881, 881, 881, 881, 902, 886, + 226, 886, 886, 886, 881, 886, 881, 922, 923, 881, + 91, 271, 206, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 91, 91, 919, 886, + 886, 223, 223, 223, 886, 924, 925, 925, 298, 926, + + 925, 927, 231, 881, 304, 304, 881, 304, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 886, 886, + 886, 886, 881, 881, 881, 881, 881, 902, 886, 886, + 886, 886, 881, 881, 922, 922, 881, 271, 206, 207, + 207, 928, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 91, 91, 91, 91, 223, 223, 223, 881, 929, + 929, 371, 929, 930, 931, 932, 881, 933, 307, 933, + 881, 381, 933, 881, 384, 384, 881, 384, 881, 881, + 132, 132, 132, 132, 881, 881, 132, 132, 132, 132, + + 132, 132, 132, 132, 132, 132, 132, 132, 886, 886, + 886, 886, 886, 881, 881, 881, 902, 886, 886, 886, + 934, 935, 881, 91, 349, 207, 928, 928, 207, 207, + 207, 207, 207, 207, 207, 207, 91, 91, 91, 91, + 91, 886, 886, 223, 223, 886, 936, 936, 937, 938, + 881, 881, 939, 940, 881, 941, 941, 942, 387, 942, + 881, 461, 942, 881, 464, 464, 881, 464, 881, 469, + 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, + 469, 469, 469, 886, 886, 886, 886, 886, 881, 881, + 943, 886, 886, 886, 881, 881, 944, 944, 881, 207, + + 928, 928, 207, 207, 928, 207, 207, 207, 207, 207, + 91, 91, 91, 91, 91, 886, 516, 516, 881, 945, + 946, 451, 881, 523, 523, 881, 523, 881, 881, 947, + 947, 881, 881, 948, 948, 949, 467, 949, 881, 539, + 949, 881, 542, 542, 881, 542, 881, 881, 881, 549, + 549, 881, 881, 549, 549, 549, 881, 881, 549, 549, + 549, 549, 881, 881, 881, 881, 549, 886, 881, 881, + 950, 886, 886, 886, 951, 952, 881, 953, 953, 881, + 953, 953, 580, 580, 954, 886, 886, 886, 588, 588, + 881, 955, 881, 956, 526, 956, 956, 597, 956, 881, + + 600, 600, 881, 600, 957, 958, 881, 881, 959, 959, + 960, 961, 960, 881, 614, 960, 881, 617, 617, 617, + 881, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 886, 881, 881, 962, 886, 886, 886, 881, 881, 963, + 963, 881, 964, 964, 881, 964, 964, 645, 645, 965, + 886, 651, 651, 651, 881, 966, 967, 881, 968, 968, + 969, 603, 969, 969, 664, 969, 881, 667, 667, 881, + 667, 881, 881, 970, 970, 881, 881, 971, 971, 972, + 972, 972, 682, 972, 621, 621, 621, 881, 881, 621, + 621, 881, 881, 881, 881, 621, 881, 881, 973, 962, + + 886, 974, 975, 976, 977, 881, 976, 978, 978, 978, + 978, 886, 886, 886, 714, 714, 886, 881, 881, 979, + 979, 881, 881, 980, 980, 981, 670, 981, 981, 729, + 981, 881, 732, 732, 881, 732, 982, 983, 881, 881, + 984, 984, 621, 881, 881, 621, 621, 621, 881, 973, + 973, 881, 962, 886, 974, 974, 974, 974, 985, 974, + 986, 986, 881, 881, 976, 976, 881, 881, 978, 978, + 978, 714, 714, 714, 987, 988, 881, 881, 989, 989, + 990, 735, 990, 990, 784, 990, 881, 787, 787, 787, + 881, 982, 982, 881, 881, 881, 881, 621, 621, 881, + + 962, 881, 881, 991, 992, 881, 978, 978, 714, 886, + 714, 714, 886, 881, 881, 987, 987, 881, 881, 993, + 993, 994, 994, 994, 824, 824, 881, 881, 621, 995, + 881, 881, 991, 991, 881, 978, 714, 714, 714, 881, + 881, 881, 881, 996, 996, 881, 881, 995, 995, 881, + 997, 998, 881, 714, 886, 714, 714, 886, 881, 881, + 881, 881, 881, 881, 881, 997, 997, 881, 886, 886, + 886, 881, 881, 881, 886, 886, 886, 881, 881, 881, + 0, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881 + } ; -static yyconst short int yy_nxt[5659] = +static yyconst short int yy_nxt[5657] = { 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 16, 25, 26, 16, 16, 27, 28, 29, 30, 28, 28, @@ -682,624 +690,624 @@ 40, 41, 38, 42, 43, 44, 45, 38, 38, 38, 38, 38, 46, 16, 47, 47, 47, 47, 47, 47, 16, 16, 16, 16, 16, 16, 16, 16, 48, 16, - 16, 49, 131, 56, 184, 50, 131, 57, 139, 131, - 141, 56, 134, 58, 131, 57, 59, 133, 17, 64, - 65, 58, 66, 140, 59, 160, 178, 155, 66, 135, - - 113, 51, 52, 156, 136, 161, 53, 105, 158, 174, - 145, 60, 66, 67, 54, 61, 38, 55, 38, 60, - 114, 204, 177, 61, 38, 183, 38, 17, 64, 65, - 179, 66, 207, 80, 18, 81, 82, 66, 185, 68, - 62, 80, 18, 81, 82, 119, 119, 115, 62, 119, - 119, 66, 67, 181, 145, 214, 177, 17, 18, 19, - 73, 69, 186, 187, 215, 182, 74, 75, 76, 119, - 126, 126, 126, 126, 126, 127, 113, 105, 68, 17, - 18, 19, 77, 69, 83, 105, 146, 183, 105, 226, - 204, 105, 83, 208, 120, 147, 189, 146, 255, 400, - - 228, 17, 18, 19, 73, 69, 167, 257, 78, 861, - 74, 75, 76, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 190, 148, 105, 77, 247, 105, 861, - 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 17, - 18, 19, 78, 69, 149, 150, 115, 844, 160, 151, - 201, 201, 201, 201, 201, 202, 426, 152, 161, 427, - 153, 200, 200, 200, 200, 200, 200, 200, 200, 200, - 200, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 224, 224, 224, 224, 224, 224, 174, 145, 844, - - 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 33, - 17, 18, 19, 33, 33, 84, 23, 24, 33, 85, - 26, 33, 33, 86, 87, 88, 89, 87, 87, 87, - 87, 87, 87, 87, 31, 90, 33, 33, 91, 92, - 92, 92, 93, 94, 95, 95, 95, 95, 96, 97, - 98, 95, 99, 95, 100, 95, 95, 95, 95, 95, - 95, 70, 33, 101, 101, 101, 101, 101, 101, 102, - 102, 102, 102, 102, 102, 102, 102, 103, 102, 102, - 109, 105, 174, 145, 174, 145, 248, 105, 104, 109, - - 110, 105, 261, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 121, 258, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 123, 186, 187, 285, 124, - 124, 124, 124, 124, 124, 401, 184, 165, 165, 236, - 237, 165, 165, 105, 256, 238, 239, 105, 105, 240, - 105, 241, 105, 259, 124, 124, 124, 124, 124, 124, - 104, 165, 254, 105, 324, 331, 104, 105, 331, 104, - 104, 105, 104, 104, 104, 130, 130, 130, 130, 130, - 130, 130, 130, 130, 130, 123, 166, 183, 104, 130, - 130, 130, 130, 130, 130, 131, 131, 131, 131, 132, - - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 105, 131, 124, 124, 124, 124, 124, 124, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 861, 105, 109, 333, 131, 131, 131, 131, 131, - 131, 105, 470, 174, 145, 131, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 331, 105, 105, 407, - 104, 104, 104, 104, 104, 104, 144, 145, 104, 104, - 104, 334, 104, 104, 844, 105, 104, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 330, 185, 844, - - 104, 104, 104, 104, 177, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 109, 170, 145, 171, 113, - 172, 365, 365, 365, 171, 110, 172, 105, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 148, 861, - 172, 172, 354, 355, 556, 356, 104, 183, 104, 104, - 104, 191, 104, 104, 861, 176, 104, 191, 176, 176, - 191, 381, 109, 191, 191, 176, 190, 172, 149, 150, - 104, 104, 104, 151, 861, 154, 109, 193, 387, 191, - 176, 152, 385, 123, 153, 382, 173, 386, 226, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 298, - - 105, 190, 388, 194, 191, 119, 402, 844, 119, 119, - 105, 119, 119, 119, 119, 416, 226, 119, 119, 112, - 417, 112, 112, 406, 105, 112, 112, 298, 472, 112, - 409, 193, 119, 119, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 112, 112, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 830, 196, 119, 193, - 105, 105, 197, 193, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 123, 193, 331, 381, 199, 199, - 199, 199, 199, 199, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 382, 471, 199, 199, 199, 199, 199, 199, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 861, 387, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 861, 105, 630, 204, 193, 193, 193, 193, - 193, 193, 226, 576, 116, 388, 116, 116, 116, 398, - 116, 116, 399, 298, 116, 267, 267, 267, 267, 267, - 267, 193, 193, 193, 193, 193, 193, 193, 116, 116, - 116, 193, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 123, 193, 105, 381, 203, 203, 203, 203, - 203, 203, 204, 204, 204, 204, 205, 204, 204, 204, - - 204, 204, 204, 204, 204, 204, 204, 204, 204, 382, - 206, 199, 199, 199, 199, 199, 199, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 861, 109, - 668, 131, 204, 204, 204, 204, 204, 204, 105, 762, - 119, 119, 204, 474, 119, 119, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 387, 193, 193, 193, - 193, 193, 193, 861, 119, 199, 199, 199, 199, 199, - 199, 199, 199, 199, 199, 118, 113, 104, 104, 118, - 388, 104, 104, 321, 322, 118, 323, 473, 105, 120, - - 288, 288, 288, 288, 288, 289, 861, 477, 551, 118, - 118, 104, 220, 221, 222, 220, 220, 220, 220, 220, - 220, 220, 165, 165, 274, 275, 165, 165, 105, 811, - 276, 277, 105, 190, 278, 105, 279, 164, 131, 104, - 104, 164, 608, 104, 104, 557, 165, 164, 431, 105, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 131, 164, 164, 104, 223, 223, 223, 223, 223, 223, - 605, 166, 263, 264, 265, 263, 263, 263, 263, 263, - 263, 263, 104, 104, 104, 104, 667, 105, 131, 223, - 223, 223, 223, 223, 223, 229, 229, 229, 229, 229, - - 229, 229, 229, 229, 229, 123, 123, 811, 478, 229, - 229, 229, 229, 229, 229, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 374, 374, 374, 374, 374, - 375, 105, 109, 105, 223, 223, 223, 223, 223, 223, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 861, 408, 369, 226, 131, 131, 131, 131, 131, 131, - 188, 105, 188, 188, 371, 191, 188, 188, 105, 109, - 188, 191, 479, 480, 191, 861, 226, 191, 191, 104, - 104, 104, 104, 104, 104, 188, 188, 371, 615, 861, - 119, 193, 226, 191, 119, 191, 811, 191, 191, 191, - - 119, 191, 191, 298, 335, 191, 336, 336, 336, 336, - 336, 336, 226, 861, 119, 119, 105, 194, 191, 191, - 191, 191, 119, 371, 554, 119, 119, 555, 119, 119, - 119, 119, 535, 861, 119, 119, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 576, 861, 193, 119, - 119, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 861, 105, 762, 196, 119, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 369, 226, 617, 536, - 266, 266, 266, 266, 266, 266, 287, 287, 287, 287, - - 287, 287, 287, 287, 287, 287, 451, 451, 451, 451, - 451, 452, 369, 226, 538, 266, 266, 266, 266, 266, - 266, 193, 861, 226, 371, 193, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 123, 193, 539, 543, - 268, 268, 268, 268, 268, 268, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 544, 206, 266, 266, 266, 266, 266, - 266, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 861, 707, 861, 861, 204, 204, 204, 204, - - 204, 204, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 104, 104, 104, 104, 369, 226, 861, 861, - 861, 193, 193, 193, 193, 193, 193, 285, 448, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 165, - 537, 861, 545, 165, 861, 105, 727, 131, 131, 165, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 607, 540, 612, 165, 165, 861, 105, 104, 226, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 371, - 794, 546, 547, 290, 290, 290, 290, 290, 290, 410, - 411, 412, 410, 410, 410, 410, 410, 410, 410, 526, - - 526, 526, 526, 526, 527, 794, 548, 569, 290, 290, - 290, 290, 290, 290, 292, 293, 294, 294, 294, 294, - 294, 294, 294, 294, 295, 549, 533, 538, 296, 296, - 296, 296, 296, 296, 442, 443, 444, 442, 442, 442, - 442, 442, 442, 442, 672, 105, 131, 564, 543, 550, - 534, 539, 565, 296, 296, 296, 296, 296, 296, 226, - 299, 300, 301, 299, 299, 299, 299, 299, 299, 299, - 302, 105, 544, 681, 303, 303, 303, 303, 303, 303, - 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, - 481, 794, 482, 482, 482, 482, 482, 482, 811, 303, - - 303, 303, 303, 303, 303, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 123, 547, 549, 533, 304, - 304, 304, 304, 304, 304, 369, 226, 446, 446, 446, - 446, 446, 446, 131, 697, 697, 697, 371, 538, 606, - 548, 550, 534, 811, 290, 290, 290, 290, 290, 290, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 861, 726, 539, 131, 131, 131, 131, 131, 131, 131, - 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, - 431, 226, 432, 432, 432, 432, 432, 432, 226, 104, - 104, 104, 104, 104, 104, 335, 543, 338, 338, 338, - - 338, 338, 339, 336, 336, 336, 336, 340, 340, 340, - 340, 340, 340, 340, 340, 340, 340, 123, 226, 105, - 544, 340, 340, 340, 340, 340, 340, 457, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 572, 572, 572, - 572, 572, 573, 731, 732, 226, 340, 340, 340, 340, - 340, 340, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 861, 226, 547, 707, 341, 341, 341, 341, - 341, 341, 226, 105, 448, 369, 226, 521, 521, 521, - 521, 521, 521, 448, 610, 369, 226, 448, 548, 131, - 618, 340, 340, 340, 340, 340, 340, 358, 359, 360, - - 358, 358, 358, 358, 358, 358, 358, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 558, 559, 560, - 558, 558, 558, 558, 558, 558, 558, 581, 581, 581, - 581, 581, 582, 643, 105, 363, 363, 364, 365, 365, - 365, 365, 365, 365, 365, 295, 369, 226, 370, 370, - 370, 370, 370, 370, 370, 370, 370, 370, 371, 549, - 109, 629, 372, 372, 372, 372, 372, 372, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 204, 671, - 794, 861, 723, 550, 131, 131, 794, 372, 372, 372, - 372, 372, 372, 226, 376, 377, 378, 376, 376, 376, - - 376, 376, 376, 376, 379, 861, 369, 226, 380, 380, - 380, 380, 380, 380, 728, 743, 669, 541, 448, 131, - 733, 743, 542, 513, 513, 513, 513, 513, 513, 513, - 513, 513, 513, 380, 380, 380, 380, 380, 380, 861, - 670, 372, 372, 372, 372, 372, 372, 372, 372, 372, - 372, 413, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 743, 778, 131, 131, 413, 413, 413, 413, 413, - 413, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 514, 673, 515, 515, 515, 515, 515, 515, 692, - 413, 413, 413, 413, 413, 413, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 674, 743, 673, 675, - 414, 414, 414, 414, 414, 414, 588, 589, 590, 588, - 588, 588, 588, 588, 588, 588, 779, 131, 105, 131, - 369, 226, 674, 676, 742, 413, 413, 413, 413, 413, - 413, 431, 523, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 431, 576, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 431, 578, 434, 434, 434, - 434, 434, 435, 432, 432, 432, 432, 437, 437, 437, - 437, 437, 437, 437, 437, 437, 437, 295, 369, 226, - 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, - - 371, 679, 109, 675, 445, 445, 445, 445, 445, 445, - 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, - 598, 598, 598, 598, 598, 599, 809, 676, 131, 445, - 445, 445, 445, 445, 445, 369, 226, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 448, 861, 226, - 131, 449, 449, 449, 449, 449, 449, 680, 861, 131, - 523, 369, 226, 593, 593, 593, 593, 593, 593, 609, - 578, 669, 724, 523, 731, 732, 449, 449, 449, 449, - 449, 449, 226, 453, 454, 455, 453, 453, 453, 453, - 453, 453, 453, 456, 782, 670, 725, 457, 457, 457, - - 457, 457, 457, 597, 597, 597, 597, 597, 597, 597, - 597, 597, 597, 104, 104, 104, 104, 673, 131, 131, - 810, 109, 457, 457, 457, 457, 457, 457, 861, 611, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 481, 674, 484, 484, 484, 484, 484, 485, 482, 482, - 482, 482, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 105, 109, 105, 675, 413, 413, 413, 413, - 413, 413, 616, 637, 638, 639, 637, 637, 637, 637, - 637, 637, 637, 646, 646, 646, 646, 646, 647, 676, - 732, 413, 413, 413, 413, 413, 413, 502, 503, 504, - - 502, 502, 502, 502, 502, 502, 502, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 576, 576, 641, - 641, 641, 641, 641, 641, 226, 829, 830, 781, 578, - 578, 692, 105, 789, 105, 431, 448, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 431, 734, 432, - 432, 432, 432, 432, 432, 432, 432, 432, 432, 509, - 510, 511, 509, 509, 509, 509, 509, 509, 509, 512, - 105, 682, 105, 513, 513, 513, 513, 513, 513, 645, - 645, 645, 645, 645, 645, 645, 645, 645, 645, 824, - 824, 824, 824, 682, 226, 682, 682, 780, 513, 513, - - 513, 513, 513, 513, 514, 523, 517, 517, 517, 517, - 517, 518, 515, 515, 515, 515, 369, 226, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, 448, 369, - 226, 724, 520, 520, 520, 520, 520, 520, 369, 226, - 576, 523, 861, 226, 664, 664, 664, 664, 664, 665, - 595, 131, 643, 861, 595, 725, 226, 520, 520, 520, - 520, 520, 520, 369, 226, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 523, 336, 861, 336, 524, - 524, 524, 524, 524, 524, 369, 226, 660, 660, 660, - 660, 660, 660, 829, 830, 751, 226, 595, 710, 710, - - 710, 710, 710, 711, 524, 524, 524, 524, 524, 524, - 226, 528, 529, 530, 528, 528, 528, 528, 528, 528, - 528, 531, 682, 226, 861, 532, 532, 532, 532, 532, - 532, 663, 663, 663, 663, 663, 663, 663, 663, 663, - 663, 175, 175, 175, 682, 861, 682, 683, 861, 861, - 532, 532, 532, 532, 532, 532, 861, 643, 524, 524, - 524, 524, 524, 524, 524, 524, 524, 524, 104, 533, - 750, 105, 111, 861, 104, 111, 219, 104, 104, 219, - 104, 104, 104, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 534, 749, 643, 104, 131, 131, 131, + 16, 49, 142, 56, 162, 50, 132, 57, 132, 135, + 106, 56, 132, 58, 163, 57, 59, 81, 18, 82, + 83, 58, 114, 134, 59, 81, 18, 82, 83, 136, + + 160, 51, 52, 157, 137, 140, 53, 187, 144, 177, + 147, 60, 115, 61, 54, 62, 38, 55, 38, 60, + 141, 61, 145, 62, 38, 188, 38, 17, 65, 66, + 132, 67, 17, 65, 66, 106, 67, 67, 84, 116, + 63, 106, 67, 181, 148, 217, 84, 864, 63, 158, + 148, 67, 68, 149, 218, 182, 67, 68, 186, 170, + 184, 147, 17, 18, 19, 74, 70, 189, 190, 180, + 185, 75, 76, 77, 186, 120, 120, 106, 69, 120, + 120, 180, 253, 69, 17, 18, 19, 78, 70, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 120, + + 127, 127, 127, 127, 127, 128, 17, 18, 19, 74, + 70, 106, 106, 79, 114, 75, 76, 77, 204, 204, + 204, 204, 204, 205, 121, 207, 332, 262, 211, 150, + 106, 78, 252, 110, 192, 71, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 17, 18, 19, 79, 70, 151, + 152, 193, 207, 229, 153, 227, 227, 227, 227, 227, + 227, 124, 154, 210, 231, 155, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 259, 106, 106, 106, + 177, 147, 864, 264, 266, 71, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 33, 17, 18, 19, 33, 33, + 85, 23, 24, 33, 86, 26, 33, 33, 87, 88, + 89, 90, 88, 88, 88, 88, 88, 88, 88, 31, + 91, 33, 33, 92, 93, 93, 93, 94, 95, 96, + 96, 96, 96, 97, 98, 99, 96, 100, 96, 101, + 96, 96, 96, 96, 96, 96, 71, 33, 102, 102, + 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, + 103, 103, 104, 103, 103, 110, 110, 177, 147, 105, + + 177, 147, 177, 147, 187, 111, 106, 188, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 122, 260, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 124, 106, 189, 190, 125, 125, 125, 125, 125, 125, + 162, 229, 167, 167, 263, 261, 167, 167, 106, 106, + 163, 571, 303, 180, 339, 186, 186, 106, 106, 125, + 125, 125, 125, 125, 125, 105, 167, 321, 322, 864, + 106, 105, 341, 339, 105, 105, 106, 105, 105, 105, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 105, 131, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 569, - 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, - 684, 685, 686, 687, 684, 684, 684, 684, 684, 684, - 619, 620, 620, 620, 620, 620, 620, 694, 694, 694, - 694, 694, 694, 694, 694, 694, 694, 105, 576, 576, - 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, - 578, 643, 620, 620, 579, 579, 579, 579, 579, 579, - - 695, 695, 695, 695, 695, 696, 697, 697, 697, 697, - 653, 578, 654, 654, 654, 654, 654, 654, 698, 579, - 579, 579, 579, 579, 579, 583, 584, 585, 583, 583, - 583, 583, 583, 583, 583, 586, 698, 724, 776, 587, - 587, 587, 587, 587, 587, 652, 652, 652, 652, 652, - 652, 652, 652, 652, 652, 743, 698, 748, 748, 748, - 226, 725, 777, 743, 587, 587, 587, 587, 587, 587, - 861, 523, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 369, 226, 593, 593, 593, 593, 593, 593, - 593, 593, 593, 593, 523, 776, 621, 621, 592, 592, - - 592, 592, 592, 592, 576, 576, 705, 705, 705, 705, - 705, 705, 175, 175, 175, 743, 643, 707, 736, 777, - 737, 738, 739, 592, 592, 592, 592, 592, 592, 369, - 226, 594, 594, 594, 594, 594, 594, 594, 594, 594, - 594, 595, 131, 620, 620, 596, 596, 596, 596, 596, - 596, 709, 709, 709, 709, 709, 709, 709, 709, 709, - 709, 369, 226, 722, 722, 722, 722, 722, 722, 740, - 596, 596, 596, 596, 596, 596, 226, 600, 601, 602, - 600, 600, 600, 600, 600, 600, 600, 776, 729, 807, - 861, 603, 603, 603, 603, 603, 603, 717, 718, 719, - - 717, 717, 717, 717, 717, 717, 717, 337, 482, 337, - 482, 777, 226, 808, 861, 807, 603, 603, 603, 603, - 603, 603, 861, 595, 596, 596, 596, 596, 596, 596, - 596, 596, 596, 596, 104, 787, 131, 771, 771, 808, - 104, 735, 735, 104, 104, 735, 104, 104, 104, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 735, - 735, 735, 104, 131, 131, 131, 131, 131, 131, 131, - 131, 604, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 105, 131, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - - 104, 104, 104, 104, 104, 619, 622, 622, 622, 622, - 622, 623, 620, 620, 620, 620, 193, 772, 772, 861, - 193, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 707, 193, 653, 807, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 626, 204, 204, 808, 206, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 632, 633, 634, - 635, 632, 632, 632, 632, 632, 632, 369, 226, 736, - 653, 737, 738, 739, 483, 515, 483, 515, 576, 595, - - 755, 756, 757, 755, 755, 755, 755, 755, 755, 755, - 707, 653, 578, 834, 105, 569, 570, 570, 570, 570, - 570, 570, 570, 570, 570, 570, 698, 826, 699, 699, - 699, 699, 699, 699, 765, 765, 765, 765, 765, 766, - 742, 716, 716, 716, 716, 716, 716, 716, 716, 716, - 716, 827, 105, 105, 576, 698, 641, 641, 641, 641, - 641, 641, 641, 641, 641, 641, 578, 576, 576, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 643, - 762, 861, 826, 644, 644, 644, 644, 644, 644, 576, - 698, 760, 760, 760, 760, 760, 760, 516, 508, 516, - - 861, 707, 861, 861, 861, 861, 827, 691, 644, 644, - 644, 644, 644, 644, 648, 649, 650, 648, 648, 648, - 648, 648, 648, 648, 651, 690, 689, 788, 652, 652, - 652, 652, 652, 652, 764, 764, 764, 764, 764, 764, - 764, 764, 764, 764, 482, 515, 482, 515, 654, 226, - 654, 740, 688, 652, 652, 652, 652, 652, 652, 861, - 595, 644, 644, 644, 644, 644, 644, 644, 644, 644, - 644, 653, 619, 656, 656, 656, 656, 656, 657, 654, - 654, 654, 654, 369, 226, 660, 660, 660, 660, 660, - 660, 660, 660, 660, 660, 595, 619, 861, 826, 659, - - 659, 659, 659, 659, 659, 736, 619, 737, 738, 739, - 861, 861, 737, 738, 739, 861, 105, 861, 861, 739, - 678, 861, 827, 762, 659, 659, 659, 659, 659, 659, - 369, 226, 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 816, 576, 677, 131, 662, 662, 662, 662, - 662, 662, 655, 105, 655, 762, 740, 699, 700, 699, - 700, 740, 654, 744, 654, 744, 740, 745, 699, 745, - 699, 662, 662, 662, 662, 662, 662, 861, 226, 662, - 662, 662, 662, 662, 662, 662, 662, 662, 662, 104, - 741, 653, 741, 741, 741, 104, 741, 741, 104, 104, + 124, 168, 339, 105, 131, 131, 131, 131, 131, 131, - 741, 104, 104, 104, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 741, 741, 741, 104, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 666, 131, 131, - 131, 105, 131, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 669, 743, 653, 744, 744, 744, 744, 744, 744, 193, - 795, 508, 795, 193, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 670, 193, 367, 631, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 628, 206, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 692, 627, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 784, 785, 786, 784, 784, 784, 784, 784, - 784, 784, 770, 770, 770, 770, 770, 770, 770, 770, - 770, 770, 805, 805, 805, 805, 805, 806, 783, 105, - 698, 783, 701, 701, 701, 701, 701, 702, 699, 699, - 699, 699, 576, 625, 705, 705, 705, 705, 705, 705, - 705, 705, 705, 705, 643, 576, 624, 706, 706, 706, - - 706, 706, 706, 706, 706, 706, 706, 707, 796, 619, - 796, 708, 708, 708, 708, 708, 708, 576, 619, 801, - 801, 801, 801, 801, 801, 812, 614, 812, 794, 762, - 795, 795, 795, 795, 795, 795, 708, 708, 708, 708, - 708, 708, 712, 713, 714, 712, 712, 712, 712, 712, - 712, 712, 715, 813, 613, 813, 716, 716, 716, 716, - 716, 716, 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 226, 771, 771, 771, 771, 771, 771, 514, - 514, 716, 716, 716, 716, 716, 716, 861, 514, 708, - 708, 708, 708, 708, 708, 708, 708, 708, 708, 369, - - 226, 722, 722, 722, 722, 722, 722, 722, 722, 722, - 722, 743, 508, 746, 746, 746, 746, 746, 747, 748, - 748, 748, 748, 752, 753, 754, 752, 752, 752, 752, - 752, 752, 752, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 839, 839, 839, 839, 839, 839, 367, - 105, 692, 295, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 845, 568, 845, 789, 567, 790, 790, - 790, 790, 790, 790, 820, 821, 822, 820, 820, 820, - 820, 820, 820, 820, 858, 858, 858, 858, 858, 858, - - 105, 576, 566, 760, 760, 760, 760, 760, 760, 760, - 760, 760, 760, 707, 576, 105, 761, 761, 761, 761, - 761, 761, 761, 761, 761, 761, 762, 846, 563, 846, - 763, 763, 763, 763, 763, 763, 831, 832, 833, 831, - 831, 831, 831, 831, 831, 831, 811, 562, 812, 812, - 812, 812, 812, 812, 561, 763, 763, 763, 763, 763, - 763, 767, 768, 769, 767, 767, 767, 767, 767, 767, - 767, 481, 481, 481, 553, 770, 770, 770, 770, 770, - 770, 839, 839, 839, 839, 839, 839, 839, 839, 839, - 839, 834, 552, 835, 835, 835, 835, 835, 835, 105, - - 770, 770, 770, 770, 770, 770, 861, 105, 763, 763, - 763, 763, 763, 763, 763, 763, 763, 763, 226, 773, - 773, 773, 773, 773, 774, 771, 771, 771, 771, 789, - 105, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 789, 105, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 789, 105, 792, 792, 792, 792, 792, - 793, 790, 790, 790, 790, 794, 514, 797, 797, 797, - 797, 797, 798, 795, 795, 795, 795, 576, 514, 801, - 801, 801, 801, 801, 801, 801, 801, 801, 801, 762, - 576, 508, 802, 802, 802, 802, 802, 802, 802, 802, - - 802, 802, 367, 295, 295, 501, 803, 803, 803, 803, - 803, 803, 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 844, 500, 845, 845, 845, 845, 845, 845, - 499, 803, 803, 803, 803, 803, 803, 861, 498, 803, - 803, 803, 803, 803, 803, 803, 803, 803, 803, 811, - 497, 814, 814, 814, 814, 814, 815, 812, 812, 812, - 812, 104, 496, 817, 818, 819, 817, 817, 817, 817, - 817, 817, 817, 789, 495, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 789, 494, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 576, 493, 825, - - 825, 825, 825, 825, 825, 825, 825, 825, 825, 834, - 492, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 834, 491, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 834, 490, 837, 837, 837, 837, 837, - 838, 835, 835, 835, 835, 841, 841, 841, 841, 841, - 842, 839, 839, 839, 839, 844, 489, 847, 847, 847, - 847, 847, 848, 845, 845, 845, 845, 104, 488, 849, - 850, 851, 849, 849, 849, 849, 849, 849, 849, 834, - 487, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 834, 486, 835, 835, 835, 835, 835, 835, 835, - - 835, 835, 835, 839, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 852, 853, 854, 852, 852, 852, 852, - 852, 852, 852, 855, 855, 855, 855, 855, 855, 855, - 855, 855, 855, 858, 858, 858, 858, 858, 858, 858, - 858, 858, 858, 852, 852, 852, 852, 852, 852, 852, - 852, 852, 852, 855, 855, 855, 855, 855, 855, 861, - 105, 849, 849, 849, 849, 849, 849, 849, 849, 849, - 849, 859, 859, 859, 859, 859, 860, 858, 858, 858, - 858, 843, 481, 481, 843, 403, 476, 475, 843, 469, - - 105, 468, 467, 466, 465, 464, 463, 462, 105, 856, - 856, 856, 856, 856, 857, 855, 855, 855, 855, 858, - 858, 858, 858, 858, 858, 858, 858, 858, 858, 461, - 460, 459, 458, 440, 367, 295, 436, 295, 129, 430, - 429, 428, 425, 424, 423, 422, 105, 855, 855, 855, - 855, 855, 855, 855, 855, 855, 855, 421, 420, 419, - 418, 415, 335, 335, 335, 403, 405, 403, 404, 403, - 397, 396, 395, 394, 393, 392, 391, 390, 389, 384, - 383, 123, 295, 367, 105, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 132, 132, 132, 132, 133, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 106, 132, 125, + 125, 125, 125, 125, 125, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 881, 290, 110, 492, + 132, 132, 132, 132, 132, 132, 106, 106, 106, 418, + 132, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 342, 106, 339, 411, 105, 105, 105, 105, 105, + 105, 146, 147, 105, 105, 105, 106, 105, 105, 864, + 412, 105, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 338, 106, 389, 105, 105, 105, 105, 864, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 110, 173, 147, 174, 881, 175, 106, 114, 390, 174, + 111, 175, 881, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 110, 881, 175, 175, 881, 373, 373, + 373, 105, 881, 105, 105, 105, 194, 105, 105, 484, + 179, 105, 194, 179, 179, 194, 395, 229, 194, 194, + 179, 116, 175, 114, 193, 105, 105, 105, 303, 193, + 156, 110, 196, 393, 194, 179, 329, 330, 394, 331, + 396, 176, 106, 881, 881, 881, 881, 881, 881, 881, + + 881, 881, 881, 881, 362, 363, 106, 364, 197, 194, + 120, 491, 413, 120, 120, 106, 120, 120, 120, 120, + 193, 106, 120, 120, 113, 568, 113, 113, 427, 106, + 113, 113, 850, 428, 113, 420, 196, 120, 120, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 113, + 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 106, 199, 120, 196, 110, 488, 200, 196, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 124, + 196, 593, 389, 202, 202, 202, 202, 202, 202, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + + 196, 196, 196, 196, 196, 196, 390, 485, 202, 202, + 202, 202, 202, 202, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 881, 417, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 881, 106, 649, + 207, 196, 196, 196, 196, 196, 196, 437, 106, 117, + 438, 117, 117, 117, 409, 117, 117, 410, 574, 117, + 272, 272, 272, 272, 272, 272, 196, 196, 196, 196, + 196, 196, 196, 117, 117, 117, 196, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 124, 196, 106, + 395, 206, 206, 206, 206, 206, 206, 207, 207, 207, + + 207, 208, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 396, 209, 202, 202, 202, 202, + 202, 202, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 881, 132, 687, 132, 207, 207, 207, + 207, 207, 207, 106, 622, 120, 120, 207, 494, 120, + 120, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 389, 196, 196, 196, 196, 196, 196, 881, 120, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 119, 229, 105, 105, 119, 390, 105, 105, 377, 229, + + 119, 150, 303, 487, 121, 293, 293, 293, 293, 293, + 294, 395, 106, 442, 119, 119, 105, 223, 224, 225, + 223, 223, 223, 223, 223, 223, 223, 239, 240, 573, + 782, 151, 152, 241, 242, 396, 153, 243, 106, 244, + 245, 167, 167, 831, 154, 167, 167, 155, 105, 105, + 105, 105, 106, 486, 106, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 167, 124, 377, 229, 226, + 226, 226, 226, 226, 226, 239, 240, 881, 229, 379, + 106, 241, 242, 581, 831, 243, 106, 244, 582, 379, + 168, 493, 831, 106, 226, 226, 226, 226, 226, 226, + + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 124, 419, 881, 552, 232, 232, 232, 232, 232, 232, + 268, 269, 270, 268, 268, 268, 268, 268, 268, 268, + 382, 382, 382, 382, 382, 383, 881, 553, 881, 226, + 226, 226, 226, 226, 226, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 881, 229, 551, 110, 132, + 132, 132, 132, 132, 132, 132, 166, 303, 105, 105, + 166, 623, 105, 105, 593, 343, 166, 344, 344, 344, + 344, 344, 344, 229, 105, 105, 105, 105, 105, 105, + 166, 166, 105, 191, 379, 191, 191, 557, 194, 191, + + 191, 377, 229, 191, 194, 377, 229, 194, 881, 229, + 194, 194, 120, 379, 634, 132, 120, 459, 191, 191, + 459, 558, 120, 782, 196, 881, 194, 624, 194, 727, + 194, 194, 194, 881, 194, 194, 120, 120, 194, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 881, + 197, 194, 194, 194, 194, 120, 814, 881, 120, 120, + 881, 120, 120, 120, 120, 561, 554, 120, 120, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 279, + 280, 196, 120, 120, 881, 281, 282, 106, 106, 283, + 814, 284, 222, 222, 222, 222, 222, 222, 222, 222, + + 222, 222, 132, 549, 631, 637, 625, 199, 120, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 586, + 814, 563, 565, 271, 271, 271, 271, 271, 271, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 462, + 462, 462, 462, 462, 463, 564, 566, 547, 271, 271, + 271, 271, 271, 271, 196, 881, 229, 106, 196, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 124, + 196, 548, 552, 273, 273, 273, 273, 273, 273, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 553, 209, 271, 271, + + 271, 271, 271, 271, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 881, 747, 132, 881, 207, + 207, 207, 207, 207, 207, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 540, 540, 540, 540, 540, + 541, 881, 881, 881, 196, 196, 196, 196, 196, 196, + 290, 831, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 167, 567, 881, 881, 167, 881, 106, 686, + 110, 132, 167, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 550, 636, 648, 167, 167, 881, 106, + + 105, 559, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 207, 557, 560, 563, 295, 295, 295, 295, + 295, 295, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 831, 627, 565, 547, 881, 558, 132, 564, + 753, 295, 295, 295, 295, 295, 295, 297, 298, 299, + 299, 299, 299, 299, 299, 299, 299, 300, 566, 548, + 881, 301, 301, 301, 301, 301, 301, 421, 422, 423, + 421, 421, 421, 421, 421, 421, 421, 562, 495, 229, + 496, 496, 496, 496, 496, 496, 301, 301, 301, 301, + 301, 301, 229, 304, 305, 306, 304, 304, 304, 304, + + 304, 304, 304, 307, 229, 552, 557, 308, 308, 308, + 308, 308, 308, 453, 454, 455, 453, 453, 453, 453, + 453, 453, 453, 589, 589, 589, 589, 589, 590, 553, + 558, 229, 308, 308, 308, 308, 308, 308, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 124, 691, + 229, 132, 309, 309, 309, 309, 309, 309, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, 442, 132, + 443, 443, 443, 443, 443, 443, 629, 295, 295, 295, + 295, 295, 295, 343, 563, 346, 346, 346, 346, 346, + 347, 344, 344, 344, 344, 348, 348, 348, 348, 348, + + 348, 348, 348, 348, 348, 124, 727, 106, 564, 348, + 348, 348, 348, 348, 348, 377, 229, 457, 457, 457, + 457, 457, 457, 106, 662, 701, 565, 379, 598, 598, + 598, 598, 598, 599, 348, 348, 348, 348, 348, 348, + 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, + 566, 717, 717, 717, 349, 349, 349, 349, 349, 349, + 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, + 528, 132, 529, 529, 529, 529, 529, 529, 630, 348, + 348, 348, 348, 348, 348, 366, 367, 368, 366, 366, + 366, 366, 366, 366, 366, 468, 468, 468, 468, 468, + + 468, 468, 468, 468, 468, 377, 229, 535, 535, 535, + 535, 535, 535, 105, 105, 105, 105, 459, 699, 110, + 751, 752, 106, 371, 371, 372, 373, 373, 373, 373, + 373, 373, 373, 300, 377, 229, 378, 378, 378, 378, + 378, 378, 378, 378, 378, 378, 379, 814, 692, 694, + 380, 380, 380, 380, 380, 380, 539, 539, 539, 539, + 539, 539, 539, 539, 539, 539, 690, 743, 814, 881, + 132, 132, 693, 695, 700, 380, 380, 380, 380, 380, + 380, 229, 384, 385, 386, 384, 384, 384, 384, 384, + 384, 384, 387, 881, 132, 106, 388, 388, 388, 388, + + 388, 388, 763, 748, 626, 555, 572, 746, 132, 132, + 556, 575, 576, 577, 575, 575, 575, 575, 575, 575, + 575, 388, 388, 388, 388, 388, 388, 881, 688, 380, + 380, 380, 380, 380, 380, 380, 380, 380, 380, 424, + 424, 424, 424, 424, 424, 424, 424, 424, 424, 377, + 229, 763, 689, 424, 424, 424, 424, 424, 424, 588, + 588, 588, 588, 588, 588, 588, 588, 588, 588, 615, + 615, 615, 615, 615, 616, 132, 712, 712, 424, 424, + 424, 424, 424, 424, 425, 425, 425, 425, 425, 425, + 425, 425, 425, 425, 688, 763, 692, 694, 425, 425, + + 425, 425, 425, 425, 527, 527, 527, 527, 527, 527, + 527, 527, 527, 527, 112, 106, 106, 112, 689, 229, + 693, 695, 763, 424, 424, 424, 424, 424, 424, 442, + 379, 443, 443, 443, 443, 443, 443, 443, 443, 443, + 443, 442, 593, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 442, 595, 445, 445, 445, 445, 445, + 446, 443, 443, 443, 443, 448, 448, 448, 448, 448, + 448, 448, 448, 448, 448, 300, 377, 229, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 379, 762, + 692, 694, 456, 456, 456, 456, 456, 456, 597, 597, + + 597, 597, 597, 597, 597, 597, 597, 597, 665, 665, + 665, 665, 665, 666, 693, 695, 802, 456, 456, 456, + 456, 456, 456, 377, 229, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 458, 459, 106, 132, 132, 460, + 460, 460, 460, 460, 460, 605, 606, 607, 605, 605, + 605, 605, 605, 605, 605, 683, 683, 683, 683, 683, + 684, 798, 752, 132, 460, 460, 460, 460, 460, 460, + 229, 464, 465, 466, 464, 464, 464, 464, 464, 464, + 464, 467, 229, 377, 229, 468, 468, 468, 468, 468, + 468, 377, 229, 459, 132, 459, 881, 229, 763, 106, + + 768, 768, 768, 537, 800, 628, 799, 132, 537, 635, + 468, 468, 468, 468, 468, 468, 881, 881, 460, 460, + 460, 460, 460, 460, 460, 460, 460, 460, 495, 595, + 498, 498, 498, 498, 498, 499, 496, 496, 496, 496, + 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, + 751, 752, 132, 744, 424, 424, 424, 424, 424, 424, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 638, 639, 639, 639, 639, 639, 639, 745, 229, 424, + 424, 424, 424, 424, 424, 516, 517, 518, 516, 516, + 516, 516, 516, 516, 516, 377, 229, 610, 610, 610, + + 610, 610, 610, 696, 106, 830, 110, 537, 614, 614, + 614, 614, 614, 614, 614, 614, 614, 614, 132, 829, + 754, 132, 106, 442, 593, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 442, 595, 443, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 523, 524, 525, + 523, 523, 523, 523, 523, 523, 523, 526, 344, 702, + 344, 527, 527, 527, 527, 527, 527, 656, 657, 658, + 656, 656, 656, 656, 656, 656, 656, 105, 105, 105, + 105, 702, 229, 702, 702, 229, 527, 527, 527, 527, + 527, 527, 528, 459, 531, 531, 531, 531, 531, 532, + + 529, 529, 529, 529, 377, 229, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 459, 702, 110, 744, + 534, 534, 534, 534, 534, 534, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 849, 850, 229, 702, + 744, 702, 703, 745, 662, 534, 534, 534, 534, 534, + 534, 377, 229, 536, 536, 536, 536, 536, 536, 536, + 536, 536, 536, 537, 745, 881, 106, 538, 538, 538, + 538, 538, 538, 593, 593, 660, 660, 660, 660, 660, + 660, 849, 850, 801, 595, 595, 662, 132, 222, 881, + 809, 222, 538, 538, 538, 538, 538, 538, 229, 542, + + 543, 544, 542, 542, 542, 542, 542, 542, 542, 545, + 769, 718, 881, 546, 546, 546, 546, 546, 546, 664, + 664, 664, 664, 664, 664, 664, 664, 664, 664, 106, + 844, 844, 844, 844, 229, 796, 881, 796, 546, 546, + 546, 546, 546, 546, 881, 537, 538, 538, 538, 538, + 538, 538, 538, 538, 538, 538, 105, 547, 770, 797, + 718, 797, 105, 639, 639, 105, 105, 718, 105, 105, + 105, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 548, 132, 763, 105, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 132, 132, 132, 132, 132, 132, 132, 132, 106, 132, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 586, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 377, 229, + 377, 229, 881, 229, 730, 730, 730, 730, 730, 731, + 537, 881, 612, 229, 612, 377, 229, 679, 679, 679, + 679, 679, 679, 662, 537, 106, 593, 612, 594, 594, + 594, 594, 594, 594, 594, 594, 594, 594, 595, 178, + 178, 178, 596, 596, 596, 596, 596, 596, 682, 682, + 682, 682, 682, 682, 682, 682, 682, 682, 672, 763, + + 673, 673, 673, 673, 673, 673, 854, 596, 596, 596, + 596, 596, 596, 600, 601, 602, 600, 600, 600, 600, + 600, 600, 600, 603, 749, 796, 827, 604, 604, 604, + 604, 604, 604, 704, 705, 706, 707, 704, 704, 704, + 704, 704, 704, 132, 345, 106, 345, 672, 229, 797, + 828, 672, 604, 604, 604, 604, 604, 604, 881, 612, + 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, + 377, 229, 610, 610, 610, 610, 610, 610, 610, 610, + 610, 610, 537, 178, 178, 178, 609, 609, 609, 609, + 609, 609, 714, 714, 714, 714, 714, 714, 714, 714, + + 714, 714, 377, 229, 742, 742, 742, 742, 742, 742, + 672, 609, 609, 609, 609, 609, 609, 377, 229, 611, + 611, 611, 611, 611, 611, 611, 611, 611, 611, 612, + 595, 881, 881, 613, 613, 613, 613, 613, 613, 715, + 715, 715, 715, 715, 716, 717, 717, 717, 717, 718, + 756, 827, 757, 758, 759, 881, 881, 718, 613, 613, + 613, 613, 613, 613, 229, 617, 618, 619, 617, 617, + 617, 617, 617, 617, 617, 828, 807, 522, 808, 620, + 620, 620, 620, 620, 620, 671, 671, 671, 671, 671, + 671, 671, 671, 671, 671, 496, 711, 496, 132, 377, + + 229, 760, 827, 846, 620, 620, 620, 620, 620, 620, + 881, 612, 613, 613, 613, 613, 613, 613, 613, 613, + 613, 613, 105, 497, 710, 497, 828, 847, 105, 755, + 755, 105, 105, 755, 105, 105, 105, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 755, 755, 755, + 105, 132, 132, 132, 132, 132, 132, 132, 132, 621, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 106, 132, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 638, 641, 641, 641, 641, 641, 642, + + 639, 639, 639, 639, 196, 640, 640, 593, 196, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 662, + 196, 709, 846, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 645, 207, 207, 847, 209, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 651, 652, 653, 654, 651, + 651, 651, 651, 651, 651, 593, 708, 725, 725, 725, + 725, 725, 725, 529, 638, 529, 593, 662, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 729, 727, 639, + + 639, 881, 106, 586, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 737, 738, 739, 737, 737, 737, + 737, 737, 737, 737, 803, 881, 756, 803, 757, 758, + 759, 775, 776, 777, 775, 775, 775, 775, 775, 775, + 775, 106, 593, 771, 660, 660, 660, 660, 660, 660, + 660, 660, 660, 660, 595, 593, 881, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 662, 727, 791, + 791, 663, 663, 663, 663, 663, 663, 762, 718, 638, + 719, 719, 719, 719, 719, 719, 736, 736, 736, 736, + 736, 736, 736, 736, 736, 736, 663, 663, 663, 663, + + 663, 663, 667, 668, 669, 667, 667, 667, 667, 667, + 667, 667, 670, 530, 638, 530, 671, 671, 671, 671, + 671, 671, 593, 106, 780, 780, 780, 780, 780, 780, + 496, 529, 496, 529, 727, 785, 785, 785, 785, 785, + 786, 671, 671, 671, 671, 671, 671, 881, 593, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 672, + 727, 675, 675, 675, 675, 675, 676, 673, 673, 673, + 673, 377, 229, 679, 679, 679, 679, 679, 679, 679, + 679, 679, 679, 612, 698, 846, 881, 678, 678, 678, + 678, 678, 678, 784, 784, 784, 784, 784, 784, 784, + + 784, 784, 784, 881, 697, 881, 881, 881, 106, 847, + 881, 132, 678, 678, 678, 678, 678, 678, 377, 229, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 229, 836, 132, 229, 681, 681, 681, 681, 681, 681, + 593, 612, 804, 805, 806, 804, 804, 804, 804, 804, + 804, 804, 782, 756, 760, 757, 758, 759, 672, 681, + 681, 681, 681, 681, 681, 881, 881, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 105, 782, 673, + 674, 673, 674, 105, 792, 792, 105, 105, 672, 105, + 105, 105, 132, 132, 132, 132, 132, 132, 132, 132, + + 132, 132, 522, 375, 760, 105, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 685, 132, 132, 132, 106, + 132, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 688, 763, + 650, 764, 764, 764, 764, 764, 764, 196, 719, 647, + 719, 196, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 689, 196, 646, 644, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 643, + + 209, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 712, 593, + 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, + 720, 782, 720, 881, 638, 757, 758, 759, 825, 825, + 825, 825, 825, 826, 673, 881, 673, 881, 881, 759, + 229, 791, 791, 791, 791, 791, 791, 106, 718, 638, + 721, 721, 721, 721, 721, 722, 719, 719, 719, 719, + 593, 633, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 662, 593, 760, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 727, 760, 632, 132, 728, + + 728, 728, 728, 728, 728, 790, 790, 790, 790, 790, + 790, 790, 790, 790, 790, 814, 528, 815, 815, 815, + 815, 815, 815, 528, 728, 728, 728, 728, 728, 728, + 732, 733, 734, 732, 732, 732, 732, 732, 732, 732, + 735, 764, 528, 764, 736, 736, 736, 736, 736, 736, + 593, 522, 821, 821, 821, 821, 821, 821, 765, 375, + 765, 809, 782, 810, 810, 810, 810, 810, 810, 736, + 736, 736, 736, 736, 736, 881, 300, 728, 728, 728, + 728, 728, 728, 728, 728, 728, 728, 377, 229, 742, + 742, 742, 742, 742, 742, 742, 742, 742, 742, 763, + + 106, 766, 766, 766, 766, 766, 767, 768, 768, 768, + 768, 772, 773, 774, 772, 772, 772, 772, 772, 772, + 772, 761, 585, 761, 761, 761, 584, 761, 761, 583, + 580, 761, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 719, 579, 719, 761, 761, 761, 106, 712, + 578, 713, 713, 713, 713, 713, 713, 713, 713, 713, + 713, 803, 803, 803, 803, 803, 803, 803, 803, 803, + 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, + 803, 859, 859, 859, 859, 859, 859, 495, 106, 593, + 495, 780, 780, 780, 780, 780, 780, 780, 780, 780, + + 780, 727, 593, 495, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 781, 782, 815, 570, 815, 783, 783, + 783, 783, 783, 783, 840, 841, 842, 840, 840, 840, + 840, 840, 840, 840, 831, 569, 832, 832, 832, 832, + 832, 832, 106, 783, 783, 783, 783, 783, 783, 787, + 788, 789, 787, 787, 787, 787, 787, 787, 787, 816, + 832, 816, 832, 790, 790, 790, 790, 790, 790, 851, + 852, 853, 851, 851, 851, 851, 851, 851, 851, 854, + 106, 855, 855, 855, 855, 855, 855, 106, 790, 790, + 790, 790, 790, 790, 881, 106, 783, 783, 783, 783, + + 783, 783, 783, 783, 783, 783, 229, 793, 793, 793, + 793, 793, 794, 791, 791, 791, 791, 809, 106, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 809, + 528, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 811, 809, 528, 812, 812, 812, 812, 812, 813, 810, + 810, 810, 810, 814, 522, 817, 817, 817, 817, 817, + 818, 815, 815, 815, 815, 593, 375, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 782, 593, 300, + 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, + 833, 865, 833, 865, 823, 823, 823, 823, 823, 823, + + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 864, 300, 865, 865, 865, 865, 865, 865, 515, 823, + 823, 823, 823, 823, 823, 881, 514, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 831, 513, 834, + 834, 834, 834, 834, 835, 832, 832, 832, 832, 105, + 512, 837, 838, 839, 837, 837, 837, 837, 837, 837, + 837, 809, 511, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 809, 510, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 593, 509, 845, 845, 845, + 845, 845, 845, 845, 845, 845, 845, 854, 508, 855, + + 855, 855, 855, 855, 855, 855, 855, 855, 855, 854, + 507, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, 854, 506, 857, 857, 857, 857, 857, 858, 855, + 855, 855, 855, 860, 860, 860, 860, 860, 860, 860, + 860, 860, 860, 861, 861, 861, 861, 861, 862, 859, + 859, 859, 859, 864, 505, 867, 867, 867, 867, 867, + 868, 865, 865, 865, 865, 105, 504, 869, 870, 871, + 869, 869, 869, 869, 869, 869, 869, 854, 503, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 854, + 502, 855, 855, 855, 855, 855, 855, 855, 855, 855, + + 855, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 872, 873, 874, 872, 872, 872, 872, 872, 872, + 872, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, 872, 872, 872, 872, 872, 872, 872, 872, 872, + 872, 875, 875, 875, 875, 875, 875, 501, 106, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 879, + 879, 879, 879, 879, 880, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 866, 863, 866, 106, 863, + + 500, 881, 495, 863, 495, 414, 106, 876, 876, 876, + 876, 876, 877, 875, 875, 875, 875, 878, 878, 878, + 878, 878, 878, 878, 878, 878, 878, 490, 489, 483, + 482, 481, 480, 479, 478, 477, 476, 475, 474, 473, + 472, 471, 470, 469, 106, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 451, 375, 300, 447, 300, + 130, 441, 440, 439, 436, 435, 434, 433, 432, 431, + 430, 429, 426, 343, 343, 343, 414, 416, 414, 415, + 414, 408, 106, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 63, 63, 63, 63, 63, 63, 33, 33, 33, 33, + 64, 64, 64, 64, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 104, - 295, 129, 109, 357, 353, 352, 104, 351, 104, 104, - 104, 104, 350, 349, 104, 104, 104, 104, 104, 104, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 112, 348, 347, 346, 345, 112, 344, 112, 343, - 112, 112, 112, 112, 112, 342, 112, 112, 112, 112, - 112, 112, 116, 197, 335, 335, 262, 332, 329, 116, - 328, 116, 116, 116, 116, 327, 326, 116, 116, 116, - 116, 116, 116, 118, 325, 320, 118, 118, 319, 118, - 118, 318, 118, 118, 118, 118, 317, 316, 118, 118, - 118, 118, 118, 118, 128, 128, 315, 128, 314, 313, - 312, 128, 164, 311, 310, 164, 164, 309, 164, 164, - 308, 164, 164, 164, 164, 307, 306, 164, 164, 164, - - 164, 164, 164, 168, 305, 129, 168, 168, 121, 168, - 168, 109, 168, 168, 168, 168, 109, 168, 168, 168, - 283, 168, 168, 168, 176, 282, 281, 176, 280, 273, - 176, 176, 272, 176, 176, 176, 176, 176, 271, 176, - 176, 176, 176, 176, 176, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 182, 182, 270, 182, - 269, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 188, 861, 194, - 262, 182, 188, 183, 188, 177, 188, 188, 188, 188, - - 188, 177, 188, 188, 188, 188, 188, 188, 192, 169, - 260, 163, 163, 253, 252, 192, 251, 192, 192, 192, - 192, 250, 192, 192, 192, 192, 192, 192, 192, 195, - 249, 246, 195, 195, 245, 195, 195, 244, 195, 195, - 195, 195, 243, 195, 195, 195, 195, 195, 195, 195, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 217, 217, 242, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 119, 235, 234, 119, 119, 233, 119, 119, - - 232, 119, 119, 119, 119, 231, 230, 119, 119, 119, - 119, 119, 119, 128, 128, 129, 128, 104, 129, 196, - 128, 225, 225, 117, 225, 218, 109, 107, 225, 227, - 227, 227, 106, 227, 105, 213, 212, 227, 164, 211, - 210, 164, 164, 209, 164, 164, 204, 164, 164, 164, - 164, 183, 177, 164, 164, 164, 164, 164, 164, 165, - 169, 139, 165, 165, 136, 165, 165, 163, 165, 165, - 165, 165, 162, 159, 165, 165, 165, 165, 165, 165, - 168, 157, 143, 168, 168, 142, 168, 168, 141, 168, - 168, 168, 168, 138, 168, 168, 168, 137, 168, 168, - - 168, 176, 131, 129, 176, 117, 107, 176, 176, 106, - 176, 176, 176, 176, 176, 105, 176, 176, 176, 176, - 176, 176, 182, 182, 861, 182, 861, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 191, 861, 861, 861, 861, 861, 861, - 191, 861, 191, 191, 191, 191, 861, 861, 191, 191, - 191, 191, 191, 191, 192, 861, 861, 861, 861, 861, - 861, 192, 861, 192, 192, 192, 192, 861, 192, 192, - 192, 192, 192, 192, 192, 195, 861, 861, 195, 195, - 861, 195, 195, 861, 195, 195, 195, 195, 861, 195, - - 195, 195, 195, 195, 195, 195, 206, 861, 861, 206, - 206, 861, 206, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 291, 291, 861, 291, 861, 861, - 861, 291, 297, 297, 297, 861, 297, 861, 861, 861, - 297, 361, 361, 861, 361, 861, 861, 861, 361, 362, - 362, 861, 362, 861, 861, 861, 362, 366, 366, 861, - 366, 861, 861, 861, 366, 368, 368, 368, 861, 368, - 861, 861, 861, 368, 206, 861, 861, 206, 206, 861, - 206, 436, 436, 861, 436, 861, 861, 861, 436, 438, - - 438, 861, 438, 861, 861, 861, 438, 439, 439, 861, - 439, 861, 861, 861, 439, 441, 441, 441, 861, 441, - 861, 861, 861, 441, 445, 445, 445, 445, 861, 445, - 861, 861, 861, 445, 505, 505, 861, 505, 861, 861, - 861, 505, 506, 506, 861, 506, 861, 861, 861, 506, - 507, 507, 861, 507, 861, 861, 861, 507, 519, 519, - 519, 861, 519, 861, 861, 861, 519, 520, 520, 520, - 520, 861, 520, 861, 861, 861, 520, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 574, 574, - - 861, 574, 861, 861, 861, 574, 575, 575, 861, 575, - 861, 861, 861, 575, 591, 591, 591, 861, 591, 861, - 861, 861, 591, 592, 592, 592, 592, 861, 592, 861, - 861, 861, 592, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 206, 861, 861, 206, 206, 861, - 206, 193, 861, 861, 861, 193, 193, 861, 193, 193, - 193, 861, 861, 193, 193, 636, 636, 861, 636, 861, - 861, 861, 636, 640, 861, 640, 640, 861, 640, 861, - 861, 861, 640, 658, 658, 658, 861, 658, 861, 861, - - 861, 658, 659, 659, 659, 659, 861, 659, 861, 861, - 861, 659, 603, 603, 861, 861, 603, 861, 861, 861, - 603, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 206, 861, 861, 206, 206, 861, 206, 193, - 861, 861, 861, 193, 193, 861, 193, 193, 193, 861, - 861, 193, 193, 703, 703, 861, 703, 861, 861, 861, - 703, 704, 861, 704, 704, 861, 704, 861, 861, 861, - 704, 720, 720, 720, 861, 720, 861, 861, 861, 720, - 721, 721, 721, 861, 861, 721, 861, 861, 861, 721, - - 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 735, 735, 861, 735, 735, 735, 861, 735, 861, - 735, 735, 735, 735, 861, 861, 735, 735, 735, 735, - 735, 735, 741, 741, 861, 741, 741, 741, 861, 741, - 861, 741, 741, 741, 741, 861, 861, 741, 741, 741, - 741, 741, 741, 206, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 206, 206, 861, 206, 206, 861, - 206, 758, 758, 861, 758, 861, 861, 861, 758, 759, - 861, 759, 759, 861, 759, 861, 861, 861, 759, 775, - - 775, 861, 861, 775, 861, 861, 861, 775, 741, 861, - 861, 861, 861, 861, 861, 741, 861, 741, 741, 741, - 741, 861, 861, 741, 741, 741, 741, 741, 741, 799, - 799, 861, 799, 861, 861, 861, 799, 800, 861, 800, - 800, 861, 800, 861, 861, 861, 800, 823, 823, 861, - 823, 861, 861, 861, 823, 824, 861, 824, 861, 861, - 824, 861, 861, 861, 824, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 15, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861 + 33, 33, 33, 33, 33, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 105, 407, 406, + 405, 404, 403, 402, 105, 401, 105, 105, 105, 105, + 400, 399, 105, 105, 105, 105, 105, 105, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + + 109, 109, 109, 109, 109, 109, 109, 109, 109, 113, + 398, 397, 392, 391, 113, 124, 113, 300, 113, 113, + 113, 113, 113, 375, 113, 113, 113, 113, 113, 113, + 117, 300, 130, 110, 365, 361, 360, 117, 359, 117, + 117, 117, 117, 358, 357, 117, 117, 117, 117, 117, + 117, 119, 356, 355, 119, 119, 354, 119, 119, 353, + 119, 119, 119, 119, 352, 351, 119, 119, 119, 119, + 119, 119, 129, 129, 350, 129, 200, 343, 343, 129, + 166, 267, 340, 166, 166, 337, 166, 166, 336, 166, + 166, 166, 166, 335, 334, 166, 166, 166, 166, 166, + + 166, 171, 333, 328, 171, 171, 327, 171, 171, 326, + 171, 171, 171, 171, 325, 171, 171, 171, 324, 171, + 171, 171, 179, 323, 320, 179, 319, 318, 179, 179, + 317, 179, 179, 179, 179, 179, 316, 179, 179, 179, + 179, 179, 179, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 185, 185, 315, 185, 314, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 191, 313, 312, 311, 310, + 191, 130, 191, 122, 191, 191, 191, 191, 191, 110, + + 191, 191, 191, 191, 191, 191, 195, 110, 288, 287, + 286, 285, 278, 195, 277, 195, 195, 195, 195, 276, + 195, 195, 195, 195, 195, 195, 195, 198, 275, 274, + 198, 198, 881, 198, 198, 197, 198, 198, 198, 198, + 267, 198, 198, 198, 198, 198, 198, 198, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 220, + 220, 185, 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, + 120, 186, 180, 120, 120, 180, 120, 120, 172, 120, + + 120, 120, 120, 265, 165, 120, 120, 120, 120, 120, + 120, 129, 129, 165, 129, 258, 257, 256, 129, 228, + 228, 255, 228, 254, 251, 250, 228, 230, 230, 230, + 249, 230, 248, 247, 246, 230, 166, 238, 237, 166, + 166, 236, 166, 166, 235, 166, 166, 166, 166, 234, + 233, 166, 166, 166, 166, 166, 166, 167, 130, 105, + 167, 167, 130, 167, 167, 199, 167, 167, 167, 167, + 118, 221, 167, 167, 167, 167, 167, 167, 171, 110, + 108, 171, 171, 107, 171, 171, 106, 171, 171, 171, + 171, 216, 171, 171, 171, 215, 171, 171, 171, 179, + + 214, 213, 179, 212, 207, 179, 179, 186, 179, 179, + 179, 179, 179, 180, 179, 179, 179, 179, 179, 179, + 185, 185, 172, 185, 140, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 194, 169, 137, 165, 164, 161, 159, 194, 143, + 194, 194, 194, 194, 142, 139, 194, 194, 194, 194, + 194, 194, 195, 138, 132, 130, 118, 108, 107, 195, + 106, 195, 195, 195, 195, 881, 195, 195, 195, 195, + 195, 195, 195, 198, 881, 881, 198, 198, 881, 198, + 198, 881, 198, 198, 198, 198, 881, 198, 198, 198, + + 198, 198, 198, 198, 209, 881, 881, 209, 209, 881, + 209, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 296, 296, 881, 296, 881, 881, 881, 296, + 302, 302, 302, 881, 302, 881, 881, 881, 302, 369, + 369, 881, 369, 881, 881, 881, 369, 370, 370, 881, + 370, 881, 881, 881, 370, 374, 374, 881, 374, 881, + 881, 881, 374, 376, 376, 376, 881, 376, 881, 881, + 881, 376, 209, 881, 881, 209, 209, 881, 209, 447, + 447, 881, 447, 881, 881, 881, 447, 449, 449, 881, + + 449, 881, 881, 881, 449, 450, 450, 881, 450, 881, + 881, 881, 450, 452, 452, 452, 881, 452, 881, 881, + 881, 452, 456, 456, 456, 456, 881, 456, 881, 881, + 881, 456, 519, 519, 881, 519, 881, 881, 881, 519, + 520, 520, 881, 520, 881, 881, 881, 520, 521, 521, + 881, 521, 881, 881, 881, 521, 533, 533, 533, 881, + 533, 881, 881, 881, 533, 534, 534, 534, 534, 881, + 534, 881, 881, 881, 534, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 591, 591, 881, 591, + + 881, 881, 881, 591, 592, 592, 881, 592, 881, 881, + 881, 592, 608, 608, 608, 881, 608, 881, 881, 881, + 608, 609, 609, 609, 609, 881, 609, 881, 881, 881, + 609, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 209, 881, 881, 209, 209, 881, 209, 196, + 881, 881, 881, 196, 196, 881, 196, 196, 196, 881, + 881, 196, 196, 655, 655, 881, 655, 881, 881, 881, + 655, 659, 881, 659, 659, 881, 659, 881, 881, 881, + 659, 677, 677, 677, 881, 677, 881, 881, 881, 677, + + 678, 678, 678, 678, 881, 678, 881, 881, 881, 678, + 620, 620, 881, 881, 620, 881, 881, 881, 620, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 209, 881, 881, 209, 209, 881, 209, 196, 881, 881, + 881, 196, 196, 881, 196, 196, 196, 881, 881, 196, + 196, 723, 723, 881, 723, 881, 881, 881, 723, 724, + 881, 724, 724, 881, 724, 881, 881, 881, 724, 740, + 740, 740, 881, 740, 881, 881, 881, 740, 741, 741, + 741, 881, 881, 741, 881, 881, 881, 741, 750, 750, + + 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, + 750, 750, 750, 750, 750, 750, 750, 750, 750, 755, + 755, 881, 755, 755, 755, 881, 755, 881, 755, 755, + 755, 755, 881, 881, 755, 755, 755, 755, 755, 755, + 761, 761, 881, 761, 761, 761, 881, 761, 881, 761, + 761, 761, 761, 881, 881, 761, 761, 761, 761, 761, + 761, 209, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 209, 209, 881, 209, 209, 881, 209, 778, + 778, 881, 778, 881, 881, 881, 778, 779, 881, 779, + 779, 881, 779, 881, 881, 881, 779, 795, 795, 881, + + 881, 795, 881, 881, 881, 795, 761, 881, 881, 881, + 881, 881, 881, 761, 881, 761, 761, 761, 761, 881, + 881, 761, 761, 761, 761, 761, 761, 819, 819, 881, + 819, 881, 881, 881, 819, 820, 881, 820, 820, 881, + 820, 881, 881, 881, 820, 843, 843, 881, 843, 881, + 881, 881, 843, 844, 881, 844, 881, 881, 844, 881, + 881, 881, 844, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 15, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881 } ; -static yyconst short int yy_chk[5659] = +static yyconst short int yy_chk[5657] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1308,621 +1316,621 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 51, 3, 80, 2, 36, 3, 42, 37, - 54, 4, 37, 3, 52, 4, 3, 36, 5, 5, - 5, 4, 5, 42, 4, 56, 74, 51, 5, 39, - - 22, 2, 2, 52, 39, 56, 2, 855, 54, 70, - 70, 3, 5, 5, 2, 3, 3, 2, 3, 4, - 22, 93, 74, 4, 4, 80, 4, 6, 6, 6, - 76, 6, 93, 11, 11, 11, 11, 6, 81, 5, - 3, 12, 12, 12, 12, 27, 27, 22, 4, 27, - 27, 6, 6, 78, 78, 103, 76, 9, 9, 9, - 9, 9, 83, 83, 103, 83, 9, 9, 9, 27, - 30, 30, 30, 30, 30, 30, 84, 48, 6, 7, - 7, 7, 9, 7, 11, 155, 48, 81, 62, 129, - 94, 157, 12, 94, 27, 48, 84, 62, 155, 322, - - 129, 10, 10, 10, 10, 10, 62, 157, 9, 112, - 10, 10, 10, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 84, 49, 146, 10, 146, 322, 112, + 1, 2, 54, 3, 56, 2, 37, 3, 51, 37, + 875, 4, 36, 3, 56, 4, 3, 11, 11, 11, + 11, 4, 22, 36, 4, 12, 12, 12, 12, 39, + + 54, 2, 2, 51, 39, 42, 2, 81, 45, 71, + 71, 3, 22, 3, 2, 3, 3, 2, 3, 4, + 42, 4, 45, 4, 4, 82, 4, 5, 5, 5, + 52, 5, 6, 6, 6, 48, 6, 5, 11, 22, + 3, 63, 6, 75, 48, 104, 12, 867, 4, 52, + 63, 5, 5, 48, 104, 77, 6, 6, 81, 63, + 79, 79, 9, 9, 9, 9, 9, 84, 84, 75, + 84, 9, 9, 9, 82, 27, 27, 149, 5, 27, + 27, 77, 149, 6, 7, 7, 7, 9, 7, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 27, + + 30, 30, 30, 30, 30, 30, 10, 10, 10, 10, + 10, 159, 253, 9, 85, 10, 10, 10, 90, 90, + 90, 90, 90, 90, 27, 95, 253, 159, 95, 49, + 148, 10, 148, 156, 85, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, - 8, 8, 10, 8, 49, 49, 112, 847, 160, 49, - 89, 89, 89, 89, 89, 89, 354, 49, 160, 354, - 49, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 127, 127, 127, 127, 127, 127, 170, 170, 846, + 7, 7, 7, 7, 8, 8, 8, 10, 8, 49, + 49, 85, 94, 130, 49, 128, 128, 128, 128, 128, + 128, 295, 49, 94, 130, 49, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 156, 161, 295, 170, + 173, 173, 866, 161, 170, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 21, 147, 144, 144, 174, 174, 147, 167, 156, 154, + 13, 13, 13, 13, 13, 21, 491, 146, 146, 158, - 21, 158, 167, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 28, 158, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 186, 186, 286, 28, - 28, 28, 28, 28, 28, 323, 184, 59, 59, 138, - 138, 59, 59, 144, 156, 138, 138, 159, 257, 138, - 248, 138, 28, 159, 28, 28, 28, 28, 28, 28, - 34, 59, 154, 255, 248, 257, 34, 286, 255, 34, - 34, 323, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 59, 184, 34, 34, + 177, 177, 184, 184, 187, 21, 157, 188, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 28, 157, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 160, 189, 189, 28, 28, 28, 28, 28, 28, + 162, 230, 59, 59, 160, 158, 59, 59, 146, 260, + 162, 491, 230, 184, 260, 187, 188, 28, 264, 28, + 28, 28, 28, 28, 28, 34, 59, 245, 245, 865, + 263, 34, 263, 264, 34, 34, 341, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 59, 341, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 258, 254, 258, 38, 38, 38, 38, 38, - 38, 259, 398, 181, 181, 38, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 259, 261, 331, 331, - 38, 38, 38, 38, 38, 38, 46, 46, 46, 46, - 46, 261, 46, 46, 845, 398, 46, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 254, 185, 832, - - 46, 46, 46, 47, 181, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 50, 68, 68, 68, 114, - 68, 294, 294, 294, 68, 50, 68, 479, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 148, 114, - 68, 68, 282, 282, 479, 282, 105, 185, 105, 105, - 105, 85, 105, 105, 188, 177, 105, 85, 177, 177, - 85, 305, 330, 85, 85, 177, 114, 68, 148, 148, - 105, 105, 105, 148, 188, 50, 69, 85, 309, 85, - 177, 148, 308, 290, 148, 305, 69, 308, 227, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 227, - - 324, 188, 309, 85, 85, 86, 324, 831, 86, 86, - 290, 86, 86, 86, 86, 344, 297, 86, 86, 115, - 344, 115, 115, 330, 334, 115, 115, 297, 400, 115, - 334, 86, 86, 86, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 115, 115, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 828, 86, 86, 87, - 333, 400, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 333, 342, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - - 87, 342, 399, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 90, 345, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 399, 567, 567, 90, 90, 90, 90, - 90, 90, 368, 825, 117, 345, 117, 117, 117, 321, - 117, 117, 321, 368, 117, 202, 202, 202, 202, 202, - 202, 90, 90, 90, 90, 90, 90, 91, 117, 117, - 117, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 321, 381, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - - 91, 91, 91, 91, 91, 91, 91, 91, 91, 381, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 406, - 606, 606, 95, 95, 95, 95, 95, 95, 402, 823, - 118, 118, 95, 402, 118, 118, 173, 173, 173, 173, - 173, 173, 173, 173, 173, 173, 387, 95, 95, 95, - 95, 95, 95, 101, 118, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 120, 189, 120, 120, 120, - 387, 120, 120, 247, 247, 120, 247, 401, 474, 118, - - 222, 222, 222, 222, 222, 222, 189, 406, 474, 120, - 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 164, 164, 211, 211, 164, 164, 247, 814, - 211, 211, 401, 189, 211, 480, 211, 166, 541, 166, - 166, 166, 541, 166, 166, 480, 164, 166, 432, 121, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 536, 166, 166, 166, 122, 122, 122, 122, 122, 122, - 536, 164, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 289, 289, 289, 289, 605, 432, 605, 122, - 122, 122, 122, 122, 122, 130, 130, 130, 130, 130, - - 130, 130, 130, 130, 130, 130, 332, 813, 407, 130, - 130, 130, 130, 130, 130, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 301, 301, 301, 301, 301, - 301, 407, 554, 332, 130, 130, 130, 130, 130, 130, + 34, 34, 34, 34, 34, 34, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 291, 259, 418, + 38, 38, 38, 38, 38, 38, 262, 266, 339, 339, + 38, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 266, 418, 262, 330, 38, 38, 38, 38, 38, + 38, 46, 46, 46, 46, 46, 291, 46, 46, 852, + 331, 46, 126, 126, 126, 126, 126, 126, 126, 126, + + 126, 126, 259, 330, 310, 46, 46, 46, 47, 851, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 50, 69, 69, 69, 113, 69, 331, 115, 310, 69, + 50, 69, 191, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 417, 113, 69, 69, 115, 299, 299, + 299, 106, 191, 106, 106, 106, 86, 106, 106, 409, + 180, 106, 86, 180, 180, 86, 314, 302, 86, 86, + 180, 113, 69, 192, 115, 106, 106, 106, 302, 191, + 50, 70, 86, 313, 86, 180, 252, 252, 313, 252, + 314, 70, 409, 192, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 287, 287, 332, 287, 86, 86, + 87, 417, 332, 87, 87, 488, 87, 87, 87, 87, + 192, 252, 87, 87, 116, 488, 116, 116, 352, 342, + 116, 116, 848, 352, 116, 342, 87, 87, 87, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 116, + 116, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 413, 87, 87, 88, 338, 413, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 845, 350, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + + 88, 88, 88, 88, 88, 88, 350, 410, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 91, 338, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 410, 584, + 584, 91, 91, 91, 91, 91, 91, 362, 494, 118, + 362, 118, 118, 118, 329, 118, 118, 329, 494, 118, + 205, 205, 205, 205, 205, 205, 91, 91, 91, 91, + 91, 91, 92, 118, 118, 118, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 329, + 353, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 353, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 550, 623, 623, 96, 96, 96, + 96, 96, 96, 420, 550, 119, 119, 96, 420, 119, + 119, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 389, 96, 96, 96, 96, 96, 96, 102, 119, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 121, 376, 121, 121, 121, 389, 121, 121, 680, 680, + + 121, 150, 376, 412, 119, 225, 225, 225, 225, 225, + 225, 395, 493, 443, 121, 121, 121, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 139, 139, 493, + 843, 150, 150, 139, 139, 395, 150, 139, 412, 139, + 139, 166, 166, 834, 150, 166, 166, 150, 294, 294, + 294, 294, 443, 411, 122, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 166, 340, 378, 378, 123, + 123, 123, 123, 123, 123, 169, 169, 380, 380, 378, + 419, 169, 169, 505, 833, 169, 411, 169, 505, 380, + 166, 419, 832, 340, 123, 123, 123, 123, 123, 123, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 332, 370, 370, 131, 131, 131, 131, 131, 131, - 190, 408, 190, 190, 370, 192, 190, 190, 409, 477, - 190, 192, 408, 409, 192, 372, 372, 192, 192, 131, - 131, 131, 131, 131, 131, 190, 190, 372, 554, 459, - 196, 192, 441, 192, 196, 194, 812, 194, 194, 194, - - 196, 194, 194, 441, 339, 194, 339, 339, 339, 339, - 339, 339, 445, 459, 196, 196, 478, 192, 192, 194, - 194, 194, 195, 445, 477, 195, 195, 478, 195, 195, - 195, 195, 459, 803, 195, 195, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 802, 460, 195, 195, - 195, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 460, 556, 800, 195, 195, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 661, 661, 556, 460, - 198, 198, 198, 198, 198, 198, 221, 221, 221, 221, - - 221, 221, 221, 221, 221, 221, 378, 378, 378, 378, - 378, 378, 446, 446, 462, 198, 198, 198, 198, 198, - 198, 203, 662, 662, 446, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 462, 465, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 465, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 799, 466, 461, 204, 204, 204, 204, - - 204, 204, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 573, 573, 573, 573, 447, 447, 466, 461, - 463, 204, 204, 204, 204, 204, 204, 220, 447, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 260, - 461, 467, 466, 260, 463, 551, 671, 671, 540, 260, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 540, 463, 551, 260, 260, 467, 220, 223, 519, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 519, - 797, 467, 468, 223, 223, 223, 223, 223, 223, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 455, - - 455, 455, 455, 455, 455, 796, 468, 570, 223, 223, - 223, 223, 223, 223, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 469, 486, 489, 226, 226, - 226, 226, 226, 226, 369, 369, 369, 369, 369, 369, - 369, 369, 369, 369, 609, 570, 609, 491, 492, 469, - 486, 489, 491, 226, 226, 226, 226, 226, 226, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 616, 492, 616, 228, 228, 228, 228, 228, 228, - 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, - 485, 795, 485, 485, 485, 485, 485, 485, 785, 228, - - 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 495, 496, 533, 229, - 229, 229, 229, 229, 229, 375, 375, 375, 375, 375, - 375, 375, 375, 537, 635, 635, 635, 375, 538, 537, - 495, 496, 533, 784, 229, 229, 229, 229, 229, 229, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 668, 538, 668, 230, 230, 230, 230, 230, 230, - 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, - 435, 775, 435, 435, 435, 435, 435, 435, 773, 230, - 230, 230, 230, 230, 230, 265, 543, 265, 265, 265, - - 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 772, 435, - 543, 266, 266, 266, 266, 266, 266, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 504, 504, 504, - 504, 504, 504, 679, 679, 771, 266, 266, 266, 266, - 266, 266, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 449, 449, 547, 759, 268, 268, 268, 268, - 268, 268, 520, 557, 449, 452, 452, 452, 452, 452, - 452, 452, 452, 520, 545, 722, 722, 452, 547, 545, - 557, 268, 268, 268, 268, 268, 268, 285, 285, 285, - - 285, 285, 285, 285, 285, 285, 285, 454, 454, 454, - 454, 454, 454, 454, 454, 454, 454, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 511, 511, 511, - 511, 511, 511, 758, 285, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 549, - 680, 566, 299, 299, 299, 299, 299, 299, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 566, 608, - 756, 464, 666, 549, 608, 666, 755, 299, 299, 299, - 299, 299, 299, 302, 302, 302, 302, 302, 302, 302, - - 302, 302, 302, 302, 302, 464, 521, 521, 302, 302, - 302, 302, 302, 302, 672, 748, 607, 464, 521, 672, - 680, 746, 464, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 508, 302, 302, 302, 302, 302, 302, 303, - 607, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 340, 340, 340, 340, 340, 340, 340, 340, 340, - 340, 745, 727, 607, 727, 340, 340, 340, 340, 340, - 340, 510, 510, 510, 510, 510, 510, 510, 510, 510, - 510, 518, 610, 518, 518, 518, 518, 518, 518, 693, - 340, 340, 340, 340, 340, 340, 341, 341, 341, 341, - - 341, 341, 341, 341, 341, 341, 610, 744, 629, 630, - 341, 341, 341, 341, 341, 341, 514, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 728, 728, 693, 610, - 522, 522, 629, 630, 741, 341, 341, 341, 341, 341, - 341, 358, 522, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 359, 577, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 360, 577, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 360, 363, 363, 363, - 363, 363, 363, 363, 363, 363, 363, 363, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 615, 615, 611, 373, 373, 373, 373, 373, 373, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 530, 530, 530, 530, 530, 530, 779, 611, 779, 373, - 373, 373, 373, 373, 373, 376, 376, 376, 376, 376, - 376, 376, 376, 376, 376, 376, 376, 376, 524, 524, - 611, 376, 376, 376, 376, 376, 376, 615, 579, 542, - 524, 527, 527, 527, 527, 527, 527, 527, 527, 542, - 579, 669, 667, 527, 731, 731, 376, 376, 376, 376, - 376, 376, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 739, 669, 667, 379, 379, 379, - - 379, 379, 379, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 696, 696, 696, 696, 673, 546, 667, - 781, 781, 379, 379, 379, 379, 379, 379, 380, 546, - 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, - 412, 673, 412, 412, 412, 412, 412, 412, 412, 412, - 412, 412, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 555, 733, 734, 675, 413, 413, 413, 413, - 413, 413, 555, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 585, 585, 585, 585, 585, 585, 675, - 730, 413, 413, 413, 413, 413, 413, 431, 431, 431, - - 431, 431, 431, 431, 431, 431, 431, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 582, 641, 582, - 582, 582, 582, 582, 582, 591, 810, 810, 733, 582, - 641, 697, 681, 790, 431, 433, 591, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 434, 681, 434, - 434, 434, 434, 434, 434, 434, 434, 434, 434, 440, - 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, - 697, 678, 790, 440, 440, 440, 440, 440, 440, 584, - 584, 584, 584, 584, 584, 584, 584, 584, 584, 806, - 806, 806, 806, 678, 592, 678, 678, 729, 440, 440, - - 440, 440, 440, 440, 444, 592, 444, 444, 444, 444, - 444, 444, 444, 444, 444, 444, 450, 450, 450, 450, - 450, 450, 450, 450, 450, 450, 450, 450, 450, 593, - 593, 688, 450, 450, 450, 450, 450, 450, 594, 594, - 642, 593, 596, 596, 602, 602, 602, 602, 602, 602, - 594, 723, 642, 691, 596, 688, 721, 450, 450, 450, - 450, 450, 450, 453, 453, 453, 453, 453, 453, 453, - 453, 453, 453, 453, 453, 453, 902, 691, 902, 453, - 453, 453, 453, 453, 453, 599, 599, 599, 599, 599, - 599, 599, 599, 829, 829, 691, 718, 599, 650, 650, - - 650, 650, 650, 650, 453, 453, 453, 453, 453, 453, - 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, - 456, 456, 617, 717, 690, 456, 456, 456, 456, 456, - 456, 601, 601, 601, 601, 601, 601, 601, 601, 601, - 601, 875, 875, 875, 617, 644, 617, 617, 690, 689, - 456, 456, 456, 456, 456, 456, 457, 644, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, - 690, 617, 872, 689, 458, 872, 884, 458, 458, 884, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 689, 704, 458, 458, 458, 458, - - 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 502, - 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, - 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, - 623, 623, 623, 623, 623, 623, 623, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 633, 502, 509, 705, - 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, - 509, 705, 931, 931, 509, 509, 509, 509, 509, 509, - - 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, - 657, 703, 657, 657, 657, 657, 657, 657, 701, 509, - 509, 509, 509, 509, 509, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 700, 724, 749, 512, - 512, 512, 512, 512, 512, 643, 643, 643, 643, 643, - 643, 643, 643, 643, 643, 687, 699, 687, 687, 687, - 658, 724, 749, 685, 512, 512, 512, 512, 512, 512, - 513, 658, 513, 513, 513, 513, 513, 513, 513, 513, - 513, 513, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 726, 932, 932, 525, 525, - - 525, 525, 525, 525, 647, 706, 647, 647, 647, 647, - 647, 647, 892, 892, 892, 684, 647, 706, 682, 726, - 682, 682, 682, 525, 525, 525, 525, 525, 525, 528, - 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, - 528, 528, 726, 943, 943, 528, 528, 528, 528, 528, - 528, 649, 649, 649, 649, 649, 649, 649, 649, 649, - 649, 665, 665, 665, 665, 665, 665, 665, 665, 682, - 528, 528, 528, 528, 528, 528, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 776, 677, 778, - 750, 531, 531, 531, 531, 531, 531, 653, 653, 653, - - 653, 653, 653, 653, 653, 653, 653, 903, 914, 903, - 914, 776, 659, 778, 750, 787, 531, 531, 531, 531, - 531, 531, 532, 659, 532, 532, 532, 532, 532, 532, - 532, 532, 532, 532, 535, 750, 778, 962, 962, 787, - 535, 740, 740, 535, 535, 740, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, 535, 535, 740, - 740, 740, 535, 535, 535, 535, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, - - 535, 535, 535, 535, 535, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 563, 963, 963, 708, - 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 708, 563, 656, 807, 563, 563, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 563, 563, 807, 563, - 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 563, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 569, 660, 660, 683, - 655, 683, 683, 683, 915, 919, 915, 919, 760, 660, - - 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, - 760, 654, 640, 835, 569, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 702, 816, 702, 702, - 702, 702, 702, 702, 714, 714, 714, 714, 714, 714, - 683, 707, 707, 707, 707, 707, 707, 707, 707, 707, - 707, 816, 835, 571, 580, 638, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 583, 761, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, - 761, 751, 826, 583, 583, 583, 583, 583, 583, 711, - 637, 711, 711, 711, 711, 711, 711, 920, 636, 920, - - 735, 711, 735, 735, 735, 751, 826, 628, 583, 583, - 583, 583, 583, 583, 586, 586, 586, 586, 586, 586, - 586, 586, 586, 586, 586, 627, 625, 751, 586, 586, - 586, 586, 586, 586, 713, 713, 713, 713, 713, 713, - 713, 713, 713, 713, 924, 927, 924, 927, 937, 720, - 937, 735, 624, 586, 586, 586, 586, 586, 586, 587, - 720, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 590, 622, 590, 590, 590, 590, 590, 590, 590, - 590, 590, 590, 597, 597, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, 597, 621, 788, 809, 597, - - 597, 597, 597, 597, 597, 736, 620, 736, 736, 736, - 737, 763, 737, 737, 737, 738, 618, 738, 738, 738, - 614, 788, 809, 763, 597, 597, 597, 597, 597, 597, - 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, - 600, 600, 788, 801, 613, 809, 600, 600, 600, 600, - 600, 600, 938, 612, 938, 801, 736, 946, 947, 946, - 947, 737, 950, 956, 950, 956, 738, 957, 959, 957, - 959, 600, 600, 600, 600, 600, 600, 603, 595, 603, - 603, 603, 603, 603, 603, 603, 603, 603, 603, 604, - 742, 589, 742, 742, 742, 604, 742, 742, 604, 604, - - 742, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 604, 604, 604, 604, 742, 742, 742, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 626, 747, 588, 747, 747, 747, 747, 747, 747, 626, - 967, 575, 967, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 574, 568, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, - - 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, - 626, 565, 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, - 632, 564, 632, 632, 632, 632, 632, 632, 632, 632, - 632, 632, 743, 743, 743, 743, 743, 743, 743, 743, - 743, 743, 762, 762, 762, 762, 762, 762, 762, 762, - 762, 762, 769, 769, 769, 769, 769, 769, 965, 632, - 639, 965, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 645, 562, 645, 645, 645, 645, 645, 645, - 645, 645, 645, 645, 645, 648, 561, 648, 648, 648, - - 648, 648, 648, 648, 648, 648, 648, 648, 968, 559, - 968, 648, 648, 648, 648, 648, 648, 766, 558, 766, - 766, 766, 766, 766, 766, 971, 553, 971, 798, 766, - 798, 798, 798, 798, 798, 798, 648, 648, 648, 648, - 648, 648, 651, 651, 651, 651, 651, 651, 651, 651, - 651, 651, 651, 972, 552, 972, 651, 651, 651, 651, - 651, 651, 768, 768, 768, 768, 768, 768, 768, 768, - 768, 768, 774, 774, 774, 774, 774, 774, 774, 517, - 516, 651, 651, 651, 651, 651, 651, 652, 515, 652, - 652, 652, 652, 652, 652, 652, 652, 652, 652, 663, - - 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, - 663, 686, 507, 686, 686, 686, 686, 686, 686, 686, - 686, 686, 686, 692, 692, 692, 692, 692, 692, 692, - 692, 692, 692, 782, 782, 782, 782, 782, 782, 782, - 782, 782, 782, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 842, 842, 842, 842, 842, 842, 506, - 692, 694, 505, 694, 694, 694, 694, 694, 694, 694, - 694, 694, 694, 977, 501, 977, 793, 494, 793, 793, - 793, 793, 793, 793, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 860, 860, 860, 860, 860, 860, - - 694, 709, 493, 709, 709, 709, 709, 709, 709, 709, - 709, 709, 709, 709, 712, 793, 712, 712, 712, 712, - 712, 712, 712, 712, 712, 712, 712, 978, 490, 978, - 712, 712, 712, 712, 712, 712, 811, 811, 811, 811, - 811, 811, 811, 811, 811, 811, 815, 488, 815, 815, - 815, 815, 815, 815, 487, 712, 712, 712, 712, 712, - 712, 715, 715, 715, 715, 715, 715, 715, 715, 715, - 715, 484, 483, 482, 476, 715, 715, 715, 715, 715, - 715, 820, 820, 820, 820, 820, 820, 820, 820, 820, - 820, 838, 475, 838, 838, 838, 838, 838, 838, 473, - - 715, 715, 715, 715, 715, 715, 716, 472, 716, 716, - 716, 716, 716, 716, 716, 716, 716, 716, 719, 719, - 719, 719, 719, 719, 719, 719, 719, 719, 719, 752, - 838, 752, 752, 752, 752, 752, 752, 752, 752, 752, - 752, 753, 471, 753, 753, 753, 753, 753, 753, 753, - 753, 753, 753, 754, 470, 754, 754, 754, 754, 754, - 754, 754, 754, 754, 754, 757, 443, 757, 757, 757, - 757, 757, 757, 757, 757, 757, 757, 764, 442, 764, - 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, - 767, 439, 767, 767, 767, 767, 767, 767, 767, 767, - - 767, 767, 438, 437, 436, 430, 767, 767, 767, 767, - 767, 767, 821, 821, 821, 821, 821, 821, 821, 821, - 821, 821, 848, 429, 848, 848, 848, 848, 848, 848, - 428, 767, 767, 767, 767, 767, 767, 770, 427, 770, - 770, 770, 770, 770, 770, 770, 770, 770, 770, 786, - 426, 786, 786, 786, 786, 786, 786, 786, 786, 786, - 786, 789, 425, 789, 789, 789, 789, 789, 789, 789, - 789, 789, 789, 791, 424, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 792, 423, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 804, 422, 804, - - 804, 804, 804, 804, 804, 804, 804, 804, 804, 817, - 421, 817, 817, 817, 817, 817, 817, 817, 817, 817, - 817, 818, 420, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 819, 419, 819, 819, 819, 819, 819, - 819, 819, 819, 819, 819, 822, 822, 822, 822, 822, - 822, 822, 822, 822, 822, 833, 418, 833, 833, 833, - 833, 833, 833, 833, 833, 833, 833, 834, 417, 834, - 834, 834, 834, 834, 834, 834, 834, 834, 834, 836, - 416, 836, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 837, 415, 837, 837, 837, 837, 837, 837, 837, - - 837, 837, 837, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 844, 844, 844, 844, 844, 844, 844, - 844, 844, 844, 849, 849, 849, 849, 849, 849, 849, - 849, 849, 849, 852, 852, 852, 852, 852, 852, 852, - 852, 852, 852, 853, 853, 853, 853, 853, 853, 853, - 853, 853, 853, 857, 857, 857, 857, 857, 857, 414, - 849, 850, 850, 850, 850, 850, 850, 850, 850, 850, - 850, 854, 854, 854, 854, 854, 854, 854, 854, 854, - 854, 976, 411, 410, 976, 405, 404, 403, 976, 397, - - 857, 395, 394, 393, 392, 391, 390, 389, 850, 851, - 851, 851, 851, 851, 851, 851, 851, 851, 851, 859, - 859, 859, 859, 859, 859, 859, 859, 859, 859, 386, - 385, 384, 383, 367, 366, 365, 364, 362, 361, 357, - 356, 355, 353, 352, 351, 350, 851, 856, 856, 856, - 856, 856, 856, 856, 856, 856, 856, 349, 348, 347, - 346, 343, 338, 337, 336, 329, 328, 327, 326, 325, - 319, 317, 316, 315, 314, 313, 312, 311, 310, 307, - 306, 304, 296, 295, 856, 862, 862, 862, 862, 862, - 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, - - 862, 862, 862, 862, 862, 862, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 863, 863, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, 865, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 866, - 292, 291, 284, 283, 281, 280, 866, 279, 866, 866, - 866, 866, 278, 277, 866, 866, 866, 866, 866, 866, - 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, - - 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, - 867, 868, 276, 275, 274, 273, 868, 272, 868, 271, - 868, 868, 868, 868, 868, 270, 868, 868, 868, 868, - 868, 868, 869, 267, 264, 263, 262, 256, 253, 869, - 252, 869, 869, 869, 869, 251, 250, 869, 869, 869, - 869, 869, 869, 870, 249, 246, 870, 870, 245, 870, - 870, 244, 870, 870, 870, 870, 243, 242, 870, 870, - 870, 870, 870, 870, 871, 871, 241, 871, 240, 239, - 238, 871, 873, 237, 236, 873, 873, 235, 873, 873, - 234, 873, 873, 873, 873, 233, 232, 873, 873, 873, - - 873, 873, 873, 874, 231, 225, 874, 874, 224, 874, - 874, 217, 874, 874, 874, 874, 216, 874, 874, 874, - 215, 874, 874, 874, 876, 214, 213, 876, 212, 210, - 876, 876, 209, 876, 876, 876, 876, 876, 208, 876, - 876, 876, 876, 876, 876, 877, 877, 877, 877, 877, - 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 877, 877, 877, 877, 877, 877, 878, 878, 207, 878, - 205, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 879, 199, 191, - 187, 183, 879, 182, 879, 180, 879, 879, 879, 879, - - 879, 176, 879, 879, 879, 879, 879, 879, 880, 169, - 165, 163, 161, 153, 152, 880, 151, 880, 880, 880, - 880, 150, 880, 880, 880, 880, 880, 880, 880, 881, - 149, 143, 881, 881, 142, 881, 881, 141, 881, 881, - 881, 881, 140, 881, 881, 881, 881, 881, 881, 881, - 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 131, 340, 472, 473, 131, 131, 131, 131, 131, 131, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 306, 306, 306, 306, 306, 306, 472, 473, 823, 131, + 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 452, 472, 571, 132, + 132, 132, 132, 132, 132, 551, 168, 452, 168, 168, + 168, 551, 168, 168, 822, 347, 168, 347, 347, 347, + 347, 347, 347, 456, 132, 132, 132, 132, 132, 132, + 168, 168, 168, 193, 456, 193, 193, 476, 195, 193, + + 193, 457, 457, 193, 195, 458, 458, 195, 460, 460, + 195, 195, 199, 457, 571, 554, 199, 458, 193, 193, + 460, 476, 199, 820, 195, 474, 195, 554, 197, 819, + 197, 197, 197, 479, 197, 197, 199, 199, 197, 203, + 203, 203, 203, 203, 203, 203, 203, 203, 203, 474, + 195, 195, 197, 197, 197, 198, 817, 479, 198, 198, + 470, 198, 198, 198, 198, 479, 474, 198, 198, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 214, + 214, 198, 198, 198, 470, 214, 214, 568, 574, 214, + 816, 214, 221, 221, 221, 221, 221, 221, 221, 221, + + 221, 221, 555, 470, 568, 574, 555, 198, 198, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 587, + 815, 481, 482, 201, 201, 201, 201, 201, 201, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 386, + 386, 386, 386, 386, 386, 481, 482, 500, 201, 201, + 201, 201, 201, 201, 206, 681, 681, 587, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 500, 503, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 503, 206, 206, 206, + + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 690, 690, 483, 207, + 207, 207, 207, 207, 207, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 466, 466, 466, 466, 466, + 466, 471, 483, 477, 207, 207, 207, 207, 207, 207, + 223, 805, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 265, 483, 478, 471, 265, 477, 573, 622, + 700, 622, 265, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 471, 573, 583, 265, 265, 478, 223, + + 226, 477, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 583, 506, 478, 509, 226, 226, 226, 226, + 226, 226, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 804, 559, 510, 547, 480, 506, 559, 509, + 700, 226, 226, 226, 226, 226, 226, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 510, 547, + 480, 229, 229, 229, 229, 229, 229, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 480, 499, 795, + 499, 499, 499, 499, 499, 499, 229, 229, 229, 229, + 229, 229, 231, 231, 231, 231, 231, 231, 231, 231, + + 231, 231, 231, 231, 793, 552, 557, 231, 231, 231, + 231, 231, 231, 377, 377, 377, 377, 377, 377, 377, + 377, 377, 377, 518, 518, 518, 518, 518, 518, 552, + 557, 792, 231, 231, 231, 231, 231, 231, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 626, + 791, 626, 232, 232, 232, 232, 232, 232, 379, 379, + 379, 379, 379, 379, 379, 379, 379, 379, 446, 561, + 446, 446, 446, 446, 446, 446, 561, 232, 232, 232, + 232, 232, 232, 270, 563, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 271, 271, 271, 271, 271, + + 271, 271, 271, 271, 271, 271, 779, 446, 563, 271, + 271, 271, 271, 271, 271, 383, 383, 383, 383, 383, + 383, 383, 383, 635, 778, 635, 565, 383, 525, 525, + 525, 525, 525, 525, 271, 271, 271, 271, 271, 271, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 565, 654, 654, 654, 273, 273, 273, 273, 273, 273, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 532, 562, 532, 532, 532, 532, 532, 532, 562, 273, + 273, 273, 273, 273, 273, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 459, 459, 459, 459, 459, + + 459, 459, 459, 459, 459, 463, 463, 463, 463, 463, + 463, 463, 463, 590, 590, 590, 590, 463, 634, 634, + 699, 699, 290, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 776, 648, 649, + 304, 304, 304, 304, 304, 304, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 625, 685, 775, 475, + 685, 625, 648, 649, 634, 304, 304, 304, 304, 304, + 304, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 475, 556, 492, 307, 307, 307, 307, + + 307, 307, 768, 691, 556, 475, 492, 687, 691, 687, + 475, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 307, 307, 307, 307, 307, 307, 308, 624, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 348, + 348, 348, 348, 348, 348, 348, 348, 348, 348, 742, + 742, 766, 624, 348, 348, 348, 348, 348, 348, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 544, + 544, 544, 544, 544, 544, 624, 713, 717, 348, 348, + 348, 348, 348, 348, 349, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 688, 765, 692, 694, 349, 349, + + 349, 349, 349, 349, 522, 522, 522, 522, 522, 522, + 522, 522, 522, 522, 892, 713, 717, 892, 688, 533, + 692, 694, 764, 349, 349, 349, 349, 349, 349, 366, + 533, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 367, 594, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 368, 594, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 371, 371, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 761, + 627, 628, 381, 381, 381, 381, 381, 381, 524, 524, + + 524, 524, 524, 524, 524, 524, 524, 524, 602, 602, + 602, 602, 602, 602, 627, 628, 759, 381, 381, 381, + 381, 381, 381, 384, 384, 384, 384, 384, 384, 384, + 384, 384, 384, 384, 384, 384, 754, 627, 628, 384, + 384, 384, 384, 384, 384, 528, 528, 528, 528, 528, + 528, 528, 528, 528, 528, 619, 619, 619, 619, 619, + 619, 747, 750, 747, 384, 384, 384, 384, 384, 384, + 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, + 387, 387, 534, 535, 535, 387, 387, 387, 387, 387, + 387, 536, 536, 534, 560, 535, 538, 538, 707, 572, + + 707, 707, 707, 536, 749, 560, 748, 748, 538, 572, + 387, 387, 387, 387, 387, 387, 388, 596, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, 423, 596, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, + 751, 751, 743, 708, 424, 424, 424, 424, 424, 424, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 642, 642, 642, 642, 642, 642, 642, 708, 741, 424, + 424, 424, 424, 424, 424, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 541, 541, 541, 541, 541, + + 541, 541, 541, 630, 701, 801, 801, 541, 543, 543, + 543, 543, 543, 543, 543, 543, 543, 543, 630, 799, + 701, 799, 442, 444, 660, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 445, 660, 445, 445, 445, + 445, 445, 445, 445, 445, 445, 445, 451, 451, 451, + 451, 451, 451, 451, 451, 451, 451, 451, 922, 698, + 922, 451, 451, 451, 451, 451, 451, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 716, 716, 716, + 716, 698, 608, 698, 698, 738, 451, 451, 451, 451, + 451, 451, 455, 608, 455, 455, 455, 455, 455, 455, + + 455, 455, 455, 455, 461, 461, 461, 461, 461, 461, + 461, 461, 461, 461, 461, 461, 461, 636, 753, 744, + 461, 461, 461, 461, 461, 461, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 830, 830, 737, 636, + 686, 636, 636, 744, 724, 461, 461, 461, 461, 461, + 461, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 686, 709, 636, 464, 464, 464, + 464, 464, 464, 599, 661, 599, 599, 599, 599, 599, + 599, 849, 849, 753, 723, 599, 661, 686, 904, 709, + 810, 904, 464, 464, 464, 464, 464, 464, 467, 467, + + 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, + 709, 721, 710, 467, 467, 467, 467, 467, 467, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 810, + 826, 826, 826, 826, 609, 746, 710, 769, 467, 467, + 467, 467, 467, 467, 468, 609, 468, 468, 468, 468, + 468, 468, 468, 468, 468, 468, 469, 469, 710, 746, + 720, 769, 469, 951, 951, 469, 469, 719, 469, 469, + 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, + 469, 469, 746, 705, 469, 469, 469, 469, 469, 469, + 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, + + 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, + 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, + 469, 469, 469, 469, 469, 469, 469, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 610, 610, + 611, 611, 613, 613, 669, 669, 669, 669, 669, 669, + 610, 663, 611, 677, 613, 616, 616, 616, 616, 616, + 616, 616, 616, 663, 677, 516, 523, 616, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 895, + 895, 895, 523, 523, 523, 523, 523, 523, 618, 618, + 618, 618, 618, 618, 618, 618, 618, 618, 676, 704, + + 676, 676, 676, 676, 676, 676, 855, 523, 523, 523, + 523, 523, 523, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 697, 796, 807, 526, 526, 526, + 526, 526, 526, 638, 638, 638, 638, 638, 638, 638, + 638, 638, 638, 696, 923, 855, 923, 675, 678, 796, + 807, 674, 526, 526, 526, 526, 526, 526, 527, 678, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, + 539, 539, 539, 912, 912, 912, 539, 539, 539, 539, + 539, 539, 652, 652, 652, 652, 652, 652, 652, 652, + + 652, 652, 684, 684, 684, 684, 684, 684, 684, 684, + 673, 539, 539, 539, 539, 539, 539, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 659, 770, 771, 542, 542, 542, 542, 542, 542, 653, + 653, 653, 653, 653, 653, 653, 653, 653, 653, 657, + 702, 798, 702, 702, 702, 770, 771, 656, 542, 542, + 542, 542, 542, 542, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 798, 770, 655, 771, 545, + 545, 545, 545, 545, 545, 662, 662, 662, 662, 662, + 662, 662, 662, 662, 662, 934, 647, 934, 798, 679, + + 679, 702, 827, 836, 545, 545, 545, 545, 545, 545, + 546, 679, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 549, 935, 646, 935, 827, 836, 549, 760, + 760, 549, 549, 760, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 760, 760, 760, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 577, 577, 577, 577, 577, 577, 577, + + 577, 577, 577, 577, 580, 952, 952, 725, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 725, + 580, 644, 846, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 846, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 586, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 666, 643, 666, 666, 666, + 666, 666, 666, 939, 641, 939, 726, 666, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 726, 963, + + 963, 711, 586, 588, 588, 588, 588, 588, 588, 588, + 588, 588, 588, 588, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672, 985, 711, 703, 985, 703, 703, + 703, 718, 718, 718, 718, 718, 718, 718, 718, 718, + 718, 588, 597, 711, 597, 597, 597, 597, 597, 597, + 597, 597, 597, 597, 597, 600, 728, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 728, 982, + 982, 600, 600, 600, 600, 600, 600, 703, 722, 640, + 722, 722, 722, 722, 722, 722, 727, 727, 727, 727, + 727, 727, 727, 727, 727, 727, 600, 600, 600, 600, + + 600, 600, 603, 603, 603, 603, 603, 603, 603, 603, + 603, 603, 603, 940, 639, 940, 603, 603, 603, 603, + 603, 603, 731, 637, 731, 731, 731, 731, 731, 731, + 944, 947, 944, 947, 731, 734, 734, 734, 734, 734, + 734, 603, 603, 603, 603, 603, 603, 604, 780, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 607, + 780, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 614, 614, 614, 614, 614, 614, 614, 614, 614, + 614, 614, 614, 614, 633, 829, 808, 614, 614, 614, + 614, 614, 614, 733, 733, 733, 733, 733, 733, 733, + + 733, 733, 733, 755, 632, 755, 755, 755, 631, 829, + 808, 629, 614, 614, 614, 614, 614, 614, 617, 617, + 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, + 740, 808, 829, 612, 617, 617, 617, 617, 617, 617, + 781, 740, 763, 763, 763, 763, 763, 763, 763, 763, + 763, 763, 781, 756, 755, 756, 756, 756, 606, 617, + 617, 617, 617, 617, 617, 620, 783, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 621, 783, 957, + 958, 957, 958, 621, 983, 983, 621, 621, 605, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + + 621, 621, 592, 591, 756, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 645, 767, + 585, 767, 767, 767, 767, 767, 767, 645, 966, 582, + 966, 645, 645, 645, 645, 645, 645, 645, 645, 645, + 645, 645, 645, 645, 581, 579, 645, 645, 645, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 645, 578, + + 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 651, 821, + 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, + 967, 821, 967, 757, 576, 757, 757, 757, 789, 789, + 789, 789, 789, 789, 970, 758, 970, 758, 758, 758, + 794, 794, 794, 794, 794, 794, 794, 651, 658, 575, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 664, 570, 664, 664, 664, 664, 664, 664, 664, 664, + 664, 664, 664, 667, 757, 667, 667, 667, 667, 667, + 667, 667, 667, 667, 667, 667, 758, 569, 567, 667, + + 667, 667, 667, 667, 667, 782, 782, 782, 782, 782, + 782, 782, 782, 782, 782, 818, 531, 818, 818, 818, + 818, 818, 818, 530, 667, 667, 667, 667, 667, 667, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 670, 976, 529, 976, 670, 670, 670, 670, 670, 670, + 786, 521, 786, 786, 786, 786, 786, 786, 977, 520, + 977, 813, 786, 813, 813, 813, 813, 813, 813, 670, + 670, 670, 670, 670, 670, 671, 519, 671, 671, 671, + 671, 671, 671, 671, 671, 671, 671, 682, 682, 682, + 682, 682, 682, 682, 682, 682, 682, 682, 682, 706, + + 813, 706, 706, 706, 706, 706, 706, 706, 706, 706, + 706, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 762, 515, 762, 762, 762, 508, 762, 762, 507, + 504, 762, 788, 788, 788, 788, 788, 788, 788, 788, + 788, 788, 979, 502, 979, 762, 762, 762, 712, 714, + 501, 714, 714, 714, 714, 714, 714, 714, 714, 714, + 714, 802, 802, 802, 802, 802, 802, 802, 802, 802, + 802, 803, 803, 803, 803, 803, 803, 803, 803, 803, + 803, 862, 862, 862, 862, 862, 862, 498, 714, 729, + 497, 729, 729, 729, 729, 729, 729, 729, 729, 729, + + 729, 729, 732, 496, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 987, 490, 987, 732, 732, + 732, 732, 732, 732, 814, 814, 814, 814, 814, 814, + 814, 814, 814, 814, 835, 489, 835, 835, 835, 835, + 835, 835, 487, 732, 732, 732, 732, 732, 732, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 988, + 991, 988, 991, 735, 735, 735, 735, 735, 735, 831, + 831, 831, 831, 831, 831, 831, 831, 831, 831, 858, + 486, 858, 858, 858, 858, 858, 858, 485, 735, 735, + 735, 735, 735, 735, 736, 484, 736, 736, 736, 736, + + 736, 736, 736, 736, 736, 736, 739, 739, 739, 739, + 739, 739, 739, 739, 739, 739, 739, 772, 858, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 772, 773, + 454, 773, 773, 773, 773, 773, 773, 773, 773, 773, + 773, 774, 453, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 777, 450, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 784, 449, 784, 784, 784, + 784, 784, 784, 784, 784, 784, 784, 784, 787, 448, + 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, + 992, 997, 992, 997, 787, 787, 787, 787, 787, 787, + + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 868, 447, 868, 868, 868, 868, 868, 868, 441, 787, + 787, 787, 787, 787, 787, 790, 440, 790, 790, 790, + 790, 790, 790, 790, 790, 790, 790, 806, 439, 806, + 806, 806, 806, 806, 806, 806, 806, 806, 806, 809, + 438, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 811, 437, 811, 811, 811, 811, 811, 811, 811, + 811, 811, 811, 812, 436, 812, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 824, 435, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 837, 434, 837, + + 837, 837, 837, 837, 837, 837, 837, 837, 837, 838, + 433, 838, 838, 838, 838, 838, 838, 838, 838, 838, + 838, 839, 432, 839, 839, 839, 839, 839, 839, 839, + 839, 839, 839, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 842, 842, 842, 842, 842, 842, 842, + 842, 842, 842, 853, 431, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 854, 430, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 856, 429, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 857, + 428, 857, 857, 857, 857, 857, 857, 857, 857, 857, + + 857, 860, 860, 860, 860, 860, 860, 860, 860, 860, + 860, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 872, 872, 872, 872, 872, 872, 872, 872, 872, + 872, 873, 873, 873, 873, 873, 873, 873, 873, 873, + 873, 877, 877, 877, 877, 877, 877, 427, 869, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 874, + 874, 874, 874, 874, 874, 874, 874, 874, 874, 880, + 880, 880, 880, 880, 880, 998, 996, 998, 877, 996, + + 426, 425, 422, 996, 421, 416, 870, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 415, 414, 408, + 407, 405, 404, 403, 402, 401, 400, 399, 398, 397, + 394, 393, 392, 391, 871, 876, 876, 876, 876, 876, + 876, 876, 876, 876, 876, 375, 374, 373, 372, 370, + 369, 365, 364, 363, 361, 360, 359, 358, 357, 356, + 355, 354, 351, 346, 345, 344, 337, 336, 335, 334, + 333, 327, 876, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, - 882, 883, 883, 139, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 885, 137, 136, 885, 885, 135, 885, 885, - 134, 885, 885, 885, 885, 133, 132, 885, 885, 885, - 885, 885, 885, 886, 886, 128, 886, 124, 123, 119, - 886, 887, 887, 116, 887, 113, 108, 107, 887, 888, - 888, 888, 106, 888, 104, 100, 99, 888, 889, 98, - 97, 889, 889, 96, 889, 889, 92, 889, 889, 889, - 889, 79, 72, 889, 889, 889, 889, 889, 889, 890, - 65, 61, 890, 890, 60, 890, 890, 58, 890, 890, - 890, 890, 57, 55, 890, 890, 890, 890, 890, 890, - 891, 53, 45, 891, 891, 44, 891, 891, 43, 891, - 891, 891, 891, 41, 891, 891, 891, 40, 891, 891, - - 891, 893, 35, 31, 893, 25, 19, 893, 893, 17, - 893, 893, 893, 893, 893, 16, 893, 893, 893, 893, - 893, 893, 894, 894, 15, 894, 0, 894, 894, 894, - 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, - 894, 894, 894, 895, 0, 0, 0, 0, 0, 0, - 895, 0, 895, 895, 895, 895, 0, 0, 895, 895, - 895, 895, 895, 895, 896, 0, 0, 0, 0, 0, - 0, 896, 0, 896, 896, 896, 896, 0, 896, 896, - 896, 896, 896, 896, 896, 897, 0, 0, 897, 897, - 0, 897, 897, 0, 897, 897, 897, 897, 0, 897, - - 897, 897, 897, 897, 897, 897, 898, 0, 0, 898, - 898, 0, 898, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 900, 900, 0, 900, 0, 0, - 0, 900, 901, 901, 901, 0, 901, 0, 0, 0, - 901, 904, 904, 0, 904, 0, 0, 0, 904, 905, - 905, 0, 905, 0, 0, 0, 905, 906, 906, 0, - 906, 0, 0, 0, 906, 907, 907, 907, 0, 907, - 0, 0, 0, 907, 908, 0, 0, 908, 908, 0, - 908, 909, 909, 0, 909, 0, 0, 0, 909, 910, - - 910, 0, 910, 0, 0, 0, 910, 911, 911, 0, - 911, 0, 0, 0, 911, 912, 912, 912, 0, 912, - 0, 0, 0, 912, 913, 913, 913, 913, 0, 913, - 0, 0, 0, 913, 916, 916, 0, 916, 0, 0, - 0, 916, 917, 917, 0, 917, 0, 0, 0, 917, - 918, 918, 0, 918, 0, 0, 0, 918, 921, 921, - 921, 0, 921, 0, 0, 0, 921, 922, 922, 922, - 922, 0, 922, 0, 0, 0, 922, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, 925, 925, - - 0, 925, 0, 0, 0, 925, 926, 926, 0, 926, - 0, 0, 0, 926, 928, 928, 928, 0, 928, 0, - 0, 0, 928, 929, 929, 929, 929, 0, 929, 0, - 0, 0, 929, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 930, 930, 933, 0, 0, 933, 933, 0, - 933, 934, 0, 0, 0, 934, 934, 0, 934, 934, - 934, 0, 0, 934, 934, 935, 935, 0, 935, 0, - 0, 0, 935, 936, 0, 936, 936, 0, 936, 0, - 0, 0, 936, 939, 939, 939, 0, 939, 0, 0, - - 0, 939, 940, 940, 940, 940, 0, 940, 0, 0, - 0, 940, 941, 941, 0, 0, 941, 0, 0, 0, - 941, 942, 942, 942, 942, 942, 942, 942, 942, 942, - 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, - 942, 942, 944, 0, 0, 944, 944, 0, 944, 945, - 0, 0, 0, 945, 945, 0, 945, 945, 945, 0, - 0, 945, 945, 948, 948, 0, 948, 0, 0, 0, - 948, 949, 0, 949, 949, 0, 949, 0, 0, 0, - 949, 951, 951, 951, 0, 951, 0, 0, 0, 951, - 952, 952, 952, 0, 0, 952, 0, 0, 0, 952, - - 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, - 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, - 953, 954, 954, 0, 954, 954, 954, 0, 954, 0, - 954, 954, 954, 954, 0, 0, 954, 954, 954, 954, - 954, 954, 955, 955, 0, 955, 955, 955, 0, 955, - 0, 955, 955, 955, 955, 0, 0, 955, 955, 955, - 955, 955, 955, 958, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 958, 958, 0, 958, 958, 0, - 958, 960, 960, 0, 960, 0, 0, 0, 960, 961, - 0, 961, 961, 0, 961, 0, 0, 0, 961, 964, - - 964, 0, 0, 964, 0, 0, 0, 964, 966, 0, - 0, 0, 0, 0, 0, 966, 0, 966, 966, 966, - 966, 0, 0, 966, 966, 966, 966, 966, 966, 969, - 969, 0, 969, 0, 0, 0, 969, 970, 0, 970, - 970, 0, 970, 0, 0, 0, 970, 973, 973, 0, - 973, 0, 0, 0, 973, 974, 0, 974, 0, 0, - 974, 0, 0, 0, 974, 975, 975, 975, 975, 975, - 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, - 975, 975, 975, 975, 975, 975, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861 + 882, 882, 882, 882, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 884, 884, 884, 884, 884, + 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, + 884, 884, 884, 884, 884, 884, 885, 885, 885, 885, + 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, + 885, 885, 885, 885, 885, 885, 885, 886, 326, 324, + 323, 322, 321, 320, 886, 319, 886, 886, 886, 886, + 318, 317, 886, 886, 886, 886, 886, 886, 887, 887, + 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, + + 887, 887, 887, 887, 887, 887, 887, 887, 887, 888, + 316, 315, 312, 311, 888, 309, 888, 301, 888, 888, + 888, 888, 888, 300, 888, 888, 888, 888, 888, 888, + 889, 297, 296, 289, 288, 286, 285, 889, 284, 889, + 889, 889, 889, 283, 282, 889, 889, 889, 889, 889, + 889, 890, 281, 280, 890, 890, 279, 890, 890, 278, + 890, 890, 890, 890, 277, 276, 890, 890, 890, 890, + 890, 890, 891, 891, 275, 891, 272, 269, 268, 891, + 893, 267, 261, 893, 893, 258, 893, 893, 257, 893, + 893, 893, 893, 256, 255, 893, 893, 893, 893, 893, + + 893, 894, 254, 251, 894, 894, 250, 894, 894, 249, + 894, 894, 894, 894, 248, 894, 894, 894, 247, 894, + 894, 894, 896, 246, 244, 896, 243, 242, 896, 896, + 241, 896, 896, 896, 896, 896, 240, 896, 896, 896, + 896, 896, 896, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 898, 898, 239, 898, 238, 898, + 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, + 898, 898, 898, 898, 898, 899, 237, 236, 235, 234, + 899, 228, 899, 227, 899, 899, 899, 899, 899, 220, + + 899, 899, 899, 899, 899, 899, 900, 219, 218, 217, + 216, 215, 213, 900, 212, 900, 900, 900, 900, 211, + 900, 900, 900, 900, 900, 900, 900, 901, 210, 208, + 901, 901, 202, 901, 901, 194, 901, 901, 901, 901, + 190, 901, 901, 901, 901, 901, 901, 901, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 902, 903, + 903, 186, 903, 903, 903, 903, 903, 903, 903, 903, + 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, + 905, 185, 183, 905, 905, 179, 905, 905, 172, 905, + + 905, 905, 905, 167, 165, 905, 905, 905, 905, 905, + 905, 906, 906, 163, 906, 155, 154, 153, 906, 907, + 907, 152, 907, 151, 145, 144, 907, 908, 908, 908, + 143, 908, 142, 141, 140, 908, 909, 138, 137, 909, + 909, 136, 909, 909, 135, 909, 909, 909, 909, 134, + 133, 909, 909, 909, 909, 909, 909, 910, 129, 125, + 910, 910, 124, 910, 910, 120, 910, 910, 910, 910, + 117, 114, 910, 910, 910, 910, 910, 910, 911, 109, + 108, 911, 911, 107, 911, 911, 105, 911, 911, 911, + 911, 101, 911, 911, 911, 100, 911, 911, 911, 913, + + 99, 98, 913, 97, 93, 913, 913, 80, 913, 913, + 913, 913, 913, 73, 913, 913, 913, 913, 913, 913, + 914, 914, 66, 914, 62, 914, 914, 914, 914, 914, + 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, + 914, 915, 61, 60, 58, 57, 55, 53, 915, 44, + 915, 915, 915, 915, 43, 41, 915, 915, 915, 915, + 915, 915, 916, 40, 35, 31, 25, 19, 17, 916, + 16, 916, 916, 916, 916, 15, 916, 916, 916, 916, + 916, 916, 916, 917, 0, 0, 917, 917, 0, 917, + 917, 0, 917, 917, 917, 917, 0, 917, 917, 917, + + 917, 917, 917, 917, 918, 0, 0, 918, 918, 0, + 918, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 920, 920, 0, 920, 0, 0, 0, 920, + 921, 921, 921, 0, 921, 0, 0, 0, 921, 924, + 924, 0, 924, 0, 0, 0, 924, 925, 925, 0, + 925, 0, 0, 0, 925, 926, 926, 0, 926, 0, + 0, 0, 926, 927, 927, 927, 0, 927, 0, 0, + 0, 927, 928, 0, 0, 928, 928, 0, 928, 929, + 929, 0, 929, 0, 0, 0, 929, 930, 930, 0, + + 930, 0, 0, 0, 930, 931, 931, 0, 931, 0, + 0, 0, 931, 932, 932, 932, 0, 932, 0, 0, + 0, 932, 933, 933, 933, 933, 0, 933, 0, 0, + 0, 933, 936, 936, 0, 936, 0, 0, 0, 936, + 937, 937, 0, 937, 0, 0, 0, 937, 938, 938, + 0, 938, 0, 0, 0, 938, 941, 941, 941, 0, + 941, 0, 0, 0, 941, 942, 942, 942, 942, 0, + 942, 0, 0, 0, 942, 943, 943, 943, 943, 943, + 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, + 943, 943, 943, 943, 943, 943, 945, 945, 0, 945, + + 0, 0, 0, 945, 946, 946, 0, 946, 0, 0, + 0, 946, 948, 948, 948, 0, 948, 0, 0, 0, + 948, 949, 949, 949, 949, 0, 949, 0, 0, 0, + 949, 950, 950, 950, 950, 950, 950, 950, 950, 950, + 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, + 950, 950, 953, 0, 0, 953, 953, 0, 953, 954, + 0, 0, 0, 954, 954, 0, 954, 954, 954, 0, + 0, 954, 954, 955, 955, 0, 955, 0, 0, 0, + 955, 956, 0, 956, 956, 0, 956, 0, 0, 0, + 956, 959, 959, 959, 0, 959, 0, 0, 0, 959, + + 960, 960, 960, 960, 0, 960, 0, 0, 0, 960, + 961, 961, 0, 0, 961, 0, 0, 0, 961, 962, + 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, + 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, + 964, 0, 0, 964, 964, 0, 964, 965, 0, 0, + 0, 965, 965, 0, 965, 965, 965, 0, 0, 965, + 965, 968, 968, 0, 968, 0, 0, 0, 968, 969, + 0, 969, 969, 0, 969, 0, 0, 0, 969, 971, + 971, 971, 0, 971, 0, 0, 0, 971, 972, 972, + 972, 0, 0, 972, 0, 0, 0, 972, 973, 973, + + 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, + 973, 973, 973, 973, 973, 973, 973, 973, 973, 974, + 974, 0, 974, 974, 974, 0, 974, 0, 974, 974, + 974, 974, 0, 0, 974, 974, 974, 974, 974, 974, + 975, 975, 0, 975, 975, 975, 0, 975, 0, 975, + 975, 975, 975, 0, 0, 975, 975, 975, 975, 975, + 975, 978, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 978, 978, 0, 978, 978, 0, 978, 980, + 980, 0, 980, 0, 0, 0, 980, 981, 0, 981, + 981, 0, 981, 0, 0, 0, 981, 984, 984, 0, + + 0, 984, 0, 0, 0, 984, 986, 0, 0, 0, + 0, 0, 0, 986, 0, 986, 986, 986, 986, 0, + 0, 986, 986, 986, 986, 986, 986, 989, 989, 0, + 989, 0, 0, 0, 989, 990, 0, 990, 990, 0, + 990, 0, 0, 0, 990, 993, 993, 0, 993, 0, + 0, 0, 993, 994, 0, 994, 0, 0, 994, 0, + 0, 0, 994, 995, 995, 995, 995, 995, 995, 995, + 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, + 995, 995, 995, 995, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881 } ; static yy_state_type yy_last_accepting_state; @@ -1940,7 +1948,7 @@ #define INITIAL 0 #line 2 "toke.l" /* - * Copyright (c) 1996, 1998-2005, 2007-2016 + * Copyright (c) 1996, 1998-2005, 2007-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -2018,7 +2026,7 @@ static bool push_include_int(char *, bool); static bool pop_include(void); -static char *parse_include(char *); +static char *parse_include_int(const char *, bool); int (*trace_print)(const char *msg) = sudoers_trace_print; @@ -2029,6 +2037,8 @@ #define ECHO ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout)) +#define parse_include(_p) (parse_include_int((_p), false)) +#define parse_includedir(_p) (parse_include_int((_p), true)) #define push_include(_p) (push_include_int((_p), false)) #define push_includedir(_p) (push_include_int((_p), true)) #define YY_NO_INPUT 1 @@ -2045,7 +2055,7 @@ #define WANTDIGEST 6 -#line 2048 "lex.sudoers.c" +#line 2058 "lex.sudoers.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -2199,9 +2209,9 @@ register char *yy_cp, *yy_bp; register int yy_act; -#line 120 "toke.l" +#line 122 "toke.l" -#line 2204 "lex.sudoers.c" +#line 2214 "lex.sudoers.c" if ( yy_init ) { @@ -2253,13 +2263,13 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 862 ) + if ( yy_current_state >= 882 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5587 ); + while ( yy_base[yy_current_state] != 5585 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -2287,7 +2297,7 @@ case 1: YY_RULE_SETUP -#line 121 "toke.l" +#line 123 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -2295,12 +2305,12 @@ YY_BREAK case 2: YY_RULE_SETUP -#line 126 "toke.l" +#line 128 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 128 "toke.l" +#line 130 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -2312,7 +2322,7 @@ case 4: YY_RULE_SETUP -#line 137 "toke.l" +#line 139 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -2321,7 +2331,7 @@ YY_BREAK case 5: YY_RULE_SETUP -#line 143 "toke.l" +#line 145 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -2329,7 +2339,7 @@ YY_BREAK case 6: YY_RULE_SETUP -#line 148 "toke.l" +#line 150 "toke.l" { LEXTRACE("+= "); LEXRETURN('+'); @@ -2337,7 +2347,7 @@ YY_BREAK case 7: YY_RULE_SETUP -#line 153 "toke.l" +#line 155 "toke.l" { LEXTRACE("-= "); LEXRETURN('-'); @@ -2345,7 +2355,7 @@ YY_BREAK case 8: YY_RULE_SETUP -#line 158 "toke.l" +#line 160 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2355,7 +2365,7 @@ YY_BREAK case 9: YY_RULE_SETUP -#line 165 "toke.l" +#line 167 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -2367,7 +2377,7 @@ case 10: YY_RULE_SETUP -#line 174 "toke.l" +#line 176 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -2376,7 +2386,7 @@ YY_BREAK case 11: YY_RULE_SETUP -#line 180 "toke.l" +#line 182 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -2411,7 +2421,7 @@ YY_BREAK case 12: YY_RULE_SETUP -#line 212 "toke.l" +#line 214 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2420,7 +2430,7 @@ YY_BREAK case 13: YY_RULE_SETUP -#line 218 "toke.l" +#line 220 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2431,7 +2441,7 @@ case 14: YY_RULE_SETUP -#line 226 "toke.l" +#line 228 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2442,7 +2452,7 @@ YY_BREAK case 15: YY_RULE_SETUP -#line 234 "toke.l" +#line 236 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2453,7 +2463,7 @@ YY_BREAK case 16: YY_RULE_SETUP -#line 242 "toke.l" +#line 244 "toke.l" { BEGIN INITIAL; yyless(0); @@ -2462,7 +2472,7 @@ YY_BREAK case 17: YY_RULE_SETUP -#line 248 "toke.l" +#line 250 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2473,7 +2483,7 @@ case 18: YY_RULE_SETUP -#line 256 "toke.l" +#line 258 "toke.l" { /* Only return DIGEST if the length is correct. */ if ((yy_size_t)sudoersleng == digest_len * 2) { @@ -2489,7 +2499,7 @@ YY_BREAK case 19: YY_RULE_SETUP -#line 269 "toke.l" +#line 271 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len; @@ -2513,7 +2523,7 @@ YY_BREAK case 20: YY_RULE_SETUP -#line 290 "toke.l" +#line 292 "toke.l" { char *path; @@ -2534,7 +2544,7 @@ YY_BREAK case 21: YY_RULE_SETUP -#line 308 "toke.l" +#line 310 "toke.l" { char *path; @@ -2543,7 +2553,7 @@ LEXRETURN(ERROR); } - if ((path = parse_include(sudoerstext)) == NULL) + if ((path = parse_includedir(sudoerstext)) == NULL) yyterminate(); LEXTRACE("INCLUDEDIR\n"); @@ -2558,7 +2568,7 @@ YY_BREAK case 22: YY_RULE_SETUP -#line 329 "toke.l" +#line 331 "toke.l" { char deftype; int n; @@ -2601,7 +2611,7 @@ YY_BREAK case 23: YY_RULE_SETUP -#line 369 "toke.l" +#line 371 "toke.l" { int n; @@ -2630,7 +2640,7 @@ YY_BREAK case 24: YY_RULE_SETUP -#line 395 "toke.l" +#line 397 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2639,7 +2649,7 @@ YY_BREAK case 25: YY_RULE_SETUP -#line 401 "toke.l" +#line 403 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2648,7 +2658,7 @@ YY_BREAK case 26: YY_RULE_SETUP -#line 407 "toke.l" +#line 409 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2656,7 +2666,7 @@ YY_BREAK case 27: YY_RULE_SETUP -#line 412 "toke.l" +#line 414 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2664,7 +2674,7 @@ YY_BREAK case 28: YY_RULE_SETUP -#line 417 "toke.l" +#line 419 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2672,7 +2682,7 @@ YY_BREAK case 29: YY_RULE_SETUP -#line 422 "toke.l" +#line 424 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2680,7 +2690,7 @@ YY_BREAK case 30: YY_RULE_SETUP -#line 427 "toke.l" +#line 429 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2688,7 +2698,7 @@ YY_BREAK case 31: YY_RULE_SETUP -#line 432 "toke.l" +#line 434 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2696,7 +2706,7 @@ YY_BREAK case 32: YY_RULE_SETUP -#line 437 "toke.l" +#line 439 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2704,7 +2714,7 @@ YY_BREAK case 33: YY_RULE_SETUP -#line 442 "toke.l" +#line 444 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2712,7 +2722,7 @@ YY_BREAK case 34: YY_RULE_SETUP -#line 447 "toke.l" +#line 449 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -2720,7 +2730,7 @@ YY_BREAK case 35: YY_RULE_SETUP -#line 452 "toke.l" +#line 454 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -2728,7 +2738,7 @@ YY_BREAK case 36: YY_RULE_SETUP -#line 457 "toke.l" +#line 459 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOW); @@ -2736,7 +2746,7 @@ YY_BREAK case 37: YY_RULE_SETUP -#line 462 "toke.l" +#line 464 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOW); @@ -2744,7 +2754,7 @@ YY_BREAK case 38: YY_RULE_SETUP -#line 467 "toke.l" +#line 469 "toke.l" { /* empty group or netgroup */ LEXTRACE("ERROR "); @@ -2753,7 +2763,7 @@ YY_BREAK case 39: YY_RULE_SETUP -#line 473 "toke.l" +#line 475 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -2764,7 +2774,7 @@ YY_BREAK case 40: YY_RULE_SETUP -#line 481 "toke.l" +#line 483 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -2775,7 +2785,7 @@ YY_BREAK case 41: YY_RULE_SETUP -#line 489 "toke.l" +#line 491 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -2785,7 +2795,7 @@ YY_BREAK case 42: YY_RULE_SETUP -#line 496 "toke.l" +#line 498 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -2795,7 +2805,7 @@ YY_BREAK case 43: YY_RULE_SETUP -#line 503 "toke.l" +#line 505 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -2809,7 +2819,7 @@ YY_BREAK case 44: YY_RULE_SETUP -#line 514 "toke.l" +#line 516 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -2823,7 +2833,7 @@ YY_BREAK case 45: YY_RULE_SETUP -#line 525 "toke.l" +#line 527 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -2832,7 +2842,31 @@ YY_BREAK case 46: YY_RULE_SETUP -#line 531 "toke.l" +#line 533 "toke.l" +{ + LEXTRACE("CMND_TIMEOUT "); + LEXRETURN(CMND_TIMEOUT); + } + YY_BREAK +case 47: +YY_RULE_SETUP +#line 538 "toke.l" +{ + LEXTRACE("NOTBEFORE "); + LEXRETURN(NOTBEFORE); + } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 543 "toke.l" +{ + LEXTRACE("NOTAFTER "); + LEXRETURN(NOTAFTER); + } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 548 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -2842,9 +2876,9 @@ #endif } YY_BREAK -case 47: +case 50: YY_RULE_SETUP -#line 540 "toke.l" +#line 557 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -2854,9 +2888,9 @@ #endif } YY_BREAK -case 48: +case 51: YY_RULE_SETUP -#line 548 "toke.l" +#line 565 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -2866,9 +2900,9 @@ #endif } YY_BREAK -case 49: +case 52: YY_RULE_SETUP -#line 557 "toke.l" +#line 574 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -2878,9 +2912,9 @@ #endif } YY_BREAK -case 50: +case 53: YY_RULE_SETUP -#line 566 "toke.l" +#line 583 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -2889,9 +2923,9 @@ LEXRETURN(ALIAS); } YY_BREAK -case 51: +case 54: YY_RULE_SETUP -#line 574 "toke.l" +#line 591 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -2901,9 +2935,9 @@ LEXRETURN(COMMAND); } YY_BREAK -case 52: +case 55: YY_RULE_SETUP -#line 583 "toke.l" +#line 600 "toke.l" { digest_len = SHA224_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2911,9 +2945,9 @@ LEXRETURN(SHA224_TOK); } YY_BREAK -case 53: +case 56: YY_RULE_SETUP -#line 590 "toke.l" +#line 607 "toke.l" { digest_len = SHA256_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2921,9 +2955,9 @@ LEXRETURN(SHA256_TOK); } YY_BREAK -case 54: +case 57: YY_RULE_SETUP -#line 597 "toke.l" +#line 614 "toke.l" { digest_len = SHA384_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2931,9 +2965,9 @@ LEXRETURN(SHA384_TOK); } YY_BREAK -case 55: +case 58: YY_RULE_SETUP -#line 604 "toke.l" +#line 621 "toke.l" { digest_len = SHA512_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2941,9 +2975,9 @@ LEXRETURN(SHA512_TOK); } YY_BREAK -case 56: +case 59: YY_RULE_SETUP -#line 611 "toke.l" +#line 628 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -2951,9 +2985,9 @@ yyterminate(); } /* sudo -e */ YY_BREAK -case 57: +case 60: YY_RULE_SETUP -#line 618 "toke.l" +#line 635 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -2969,9 +3003,9 @@ } } /* a pathname */ YY_BREAK -case 58: +case 61: YY_RULE_SETUP -#line 633 "toke.l" +#line 650 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2979,9 +3013,9 @@ BEGIN INSTR; } YY_BREAK -case 59: +case 62: YY_RULE_SETUP -#line 640 "toke.l" +#line 657 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -2990,49 +3024,49 @@ LEXRETURN(WORD); } YY_BREAK -case 60: +case 63: YY_RULE_SETUP -#line 648 "toke.l" +#line 665 "toke.l" { LEXTRACE("( "); LEXRETURN('('); } YY_BREAK -case 61: +case 64: YY_RULE_SETUP -#line 653 "toke.l" +#line 670 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); } YY_BREAK -case 62: +case 65: YY_RULE_SETUP -#line 658 "toke.l" +#line 675 "toke.l" { LEXTRACE(", "); LEXRETURN(','); } /* return ',' */ YY_BREAK -case 63: +case 66: YY_RULE_SETUP -#line 663 "toke.l" +#line 680 "toke.l" { LEXTRACE("= "); LEXRETURN('='); } /* return '=' */ YY_BREAK -case 64: +case 67: YY_RULE_SETUP -#line 668 "toke.l" +#line 685 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); } /* return ':' */ YY_BREAK -case 65: +case 68: YY_RULE_SETUP -#line 673 "toke.l" +#line 690 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3040,9 +3074,9 @@ } } YY_BREAK -case 66: +case 69: YY_RULE_SETUP -#line 680 "toke.l" +#line 697 "toke.l" { if (YY_START == INSTR) { LEXTRACE("ERROR "); @@ -3055,25 +3089,25 @@ LEXRETURN(COMMENT); } /* return newline */ YY_BREAK -case 67: +case 70: YY_RULE_SETUP -#line 692 "toke.l" +#line 709 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } YY_BREAK -case 68: +case 71: YY_RULE_SETUP -#line 696 "toke.l" +#line 713 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; continued = true; } /* throw away EOL after \ */ YY_BREAK -case 69: +case 72: YY_RULE_SETUP -#line 702 "toke.l" +#line 719 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3088,9 +3122,9 @@ LEXRETURN(COMMENT); } /* comment, not uid/gid */ YY_BREAK -case 70: +case 73: YY_RULE_SETUP -#line 716 "toke.l" +#line 733 "toke.l" { LEXTRACE("ERROR "); LEXRETURN(ERROR); @@ -3103,7 +3137,7 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): -#line 721 "toke.l" +#line 738 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3114,12 +3148,12 @@ yyterminate(); } YY_BREAK -case 71: +case 74: YY_RULE_SETUP -#line 731 "toke.l" +#line 748 "toke.l" ECHO; YY_BREAK -#line 3122 "lex.sudoers.c" +#line 3156 "lex.sudoers.c" case YY_END_OF_BUFFER: { @@ -3410,7 +3444,7 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 862 ) + if ( yy_current_state >= 882 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3445,11 +3479,11 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 862 ) + if ( yy_current_state >= 882 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 861); + yy_is_jam = (yy_current_state == 881); return yy_is_jam ? 0 : yy_current_state; } @@ -4010,7 +4044,7 @@ return 0; } #endif -#line 731 "toke.l" +#line 748 "toke.l" struct path_list { SLIST_ENTRY(path_list) entries; @@ -4336,17 +4370,16 @@ } static char * -parse_include(char *base) +parse_include_int(const char *base, bool isdir) { - char *cp, *ep, *path, *pp; + const char *cp, *ep; + char *path, *pp; int dirlen = 0, len = 0, subst = 0; size_t shost_len = 0; debug_decl(parse_include, SUDOERS_DEBUG_PARSER) /* Pull out path from #include line. */ - cp = base + sizeof("#include"); - if (*cp == 'i') - cp += 3; /* includedir */ + cp = base + (isdir ? sizeof("#includedir") : sizeof("#include")); while (isblank((unsigned char) *cp)) cp++; ep = cp; diff -Nru sudo-1.8.19p1/plugins/sudoers/toke.l sudo-1.8.20p2/plugins/sudoers/toke.l --- sudo-1.8.19p1/plugins/sudoers/toke.l 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/toke.l 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ %{ /* - * Copyright (c) 1996, 1998-2005, 2007-2016 + * Copyright (c) 1996, 1998-2005, 2007-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -78,7 +78,7 @@ static bool push_include_int(char *, bool); static bool pop_include(void); -static char *parse_include(char *); +static char *parse_include_int(const char *, bool); int (*trace_print)(const char *msg) = sudoers_trace_print; @@ -89,6 +89,8 @@ #define ECHO ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout)) +#define parse_include(_p) (parse_include_int((_p), false)) +#define parse_includedir(_p) (parse_include_int((_p), true)) #define push_include(_p) (push_include_int((_p), false)) #define push_includedir(_p) (push_include_int((_p), true)) %} @@ -313,7 +315,7 @@ LEXRETURN(ERROR); } - if ((path = parse_include(sudoerstext)) == NULL) + if ((path = parse_includedir(sudoerstext)) == NULL) yyterminate(); LEXTRACE("INCLUDEDIR\n"); @@ -528,6 +530,21 @@ } +TIMEOUT { + LEXTRACE("CMND_TIMEOUT "); + LEXRETURN(CMND_TIMEOUT); + } + +NOTBEFORE { + LEXTRACE("NOTBEFORE "); + LEXRETURN(NOTBEFORE); + } + +NOTAFTER { + LEXTRACE("NOTAFTER "); + LEXRETURN(NOTAFTER); + } + ROLE { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -1053,17 +1070,16 @@ } static char * -parse_include(char *base) +parse_include_int(const char *base, bool isdir) { - char *cp, *ep, *path, *pp; + const char *cp, *ep; + char *path, *pp; int dirlen = 0, len = 0, subst = 0; size_t shost_len = 0; debug_decl(parse_include, SUDOERS_DEBUG_PARSER) /* Pull out path from #include line. */ - cp = base + sizeof("#include"); - if (*cp == 'i') - cp += 3; /* includedir */ + cp = base + (isdir ? sizeof("#includedir") : sizeof("#include")); while (isblank((unsigned char) *cp)) cp++; ep = cp; diff -Nru sudo-1.8.19p1/plugins/sudoers/visudo.c sudo-1.8.20p2/plugins/sudoers/visudo.c --- sudo-1.8.19p1/plugins/sudoers/visudo.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/visudo.c 2017-05-10 15:38:44.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2007-2016 + * Copyright (c) 1996, 1998-2005, 2007-2017 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -61,6 +61,7 @@ #endif #include "sudoers.h" +#include "interfaces.h" #include "parse.h" #include "redblack.h" #include "sudoers_version.h" @@ -815,9 +816,11 @@ } /* STUB */ -struct interface *get_interfaces(void) +struct interface_list * +get_interfaces(void) { - return NULL; + static struct interface_list dummy = SLIST_HEAD_INITIALIZER(interfaces); + return &dummy; } /* @@ -1134,12 +1137,17 @@ } else { if (!quiet) { if (errno == ELOOP) { - sudo_warnx(U_("%s:%d cycle in %s \"%s\""), + fprintf(stderr, strict ? + U_("Error: %s:%d cycle in %s \"%s\"") : + U_("Warning: %s:%d cycle in %s \"%s\""), file, lineno, alias_type_to_string(type), name); } else { - sudo_warnx(U_("%s:%d %s \"%s\" referenced but not defined"), + fprintf(stderr, strict ? + U_("Error: %s:%d %s \"%s\" referenced but not defined") : + U_("Warning: %s:%d %s \"%s\" referenced but not defined"), file, lineno, alias_type_to_string(type), name); } + fputc('\n', stderr); if (strict && errorfile == NULL) { errorfile = rcstr_addref(file); errorlineno = lineno; @@ -1289,8 +1297,9 @@ { struct alias *a = (struct alias *)v1; - sudo_warnx_nodebug(U_("%s:%d unused %s \"%s\""), + fprintf(stderr, U_("Warning: %s:%d unused %s \"%s\""), a->file, a->lineno, alias_type_to_string(a->type), a->name); + fputc('\n', stderr); return 0; } diff -Nru sudo-1.8.19p1/plugins/sudoers/visudo_json.c sudo-1.8.20p2/plugins/sudoers/visudo_json.c --- sudo-1.8.19p1/plugins/sudoers/visudo_json.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/plugins/sudoers/visudo_json.c 2017-05-10 15:38:43.000000000 +0000 @@ -254,23 +254,7 @@ /* Optional digest. */ if (c->digest != NULL) { fputs(",\n", fp); - switch (c->digest->digest_type) { - case SUDO_DIGEST_SHA224: - digest_name = "sha224"; - break; - case SUDO_DIGEST_SHA256: - digest_name = "sha256"; - break; - case SUDO_DIGEST_SHA384: - digest_name = "sha384"; - break; - case SUDO_DIGEST_SHA512: - digest_name = "sha512"; - break; - default: - digest_name = "invalid digest"; - break; - } + digest_name = digest_type_to_name(c->digest->digest_type); value.type = JSON_STRING; value.u.string = c->digest->digest_str; print_pair_json(fp, NULL, digest_name, &value, NULL, indent); @@ -781,11 +765,17 @@ } /* Print tags */ - if (TAGS_SET(cs->tags)) { + if (cs->timeout > 0 || TAGS_SET(cs->tags)) { struct cmndtag tag = cs->tags; fprintf(fp, "%*s\"Options\": [\n", indent, ""); indent += 4; + if (cs->timeout > 0) { + value.type = JSON_NUMBER; + value.u.number = cs->timeout; + print_pair_json(fp, "{ ", "command_timeout", &value, + TAGS_SET(tag) ? " },\n" : " }\n", indent); + } if (tag.nopasswd != UNSPEC) { value.type = JSON_BOOL; value.u.boolean = !tag.nopasswd; Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/ca.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/ca.mo differ diff -Nru sudo-1.8.19p1/po/ca.po sudo-1.8.20p2/po/ca.po --- sudo-1.8.19p1/po/ca.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/po/ca.po 2017-05-10 15:38:43.000000000 +0000 @@ -3,64 +3,64 @@ # Walter Garcia-Fontes , 2016. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.16b1\n" +"Project-Id-Version: sudo 1.8.19b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-02-19 15:48-0700\n" -"PO-Revision-Date: 2016-04-06 15:07+0200\n" +"POT-Creation-Date: 2016-11-21 17:45-0700\n" +"PO-Revision-Date: 2016-12-29 15:48+0100\n" "Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" "Language: ca\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" -#: lib/util/aix.c:85 lib/util/aix.c:164 +#: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" msgstr "no s'ha pogut obrir userdb" -#: lib/util/aix.c:219 +#: lib/util/aix.c:227 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "no s'ha pogut passar al registre \"%s\" per a %s" -#: lib/util/aix.c:244 +#: lib/util/aix.c:252 msgid "unable to restore registry" msgstr "no s'ha pogut restaurar el registre" -#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 -#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 -#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 #: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 -#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 -#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 -#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 -#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 -#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 -#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 -#: src/sudo_edit.c:925 src/sudo_edit.c:945 +#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 +#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 +#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 +#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 +#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 +#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 +#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 +#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 +#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 +#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 +#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 +#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 -#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 -#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 -#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 +#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 +#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 #: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 #: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 -#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 -#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 -#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 -#: src/sudo_edit.c:925 src/sudo_edit.c:945 +#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 +#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 +#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 +#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "no s'ha pogut assignar memòria" @@ -68,117 +68,118 @@ msgid "Unknown signal" msgstr "Senyal desconegut" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 #: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valor no vàlid" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 #: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valor massa gran" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 #: lib/util/strtonum.c:182 msgid "value too small" msgstr "valor massa petit" -#: lib/util/sudo_conf.c:223 +#: lib/util/sudo_conf.c:203 #, c-format -msgid "invalid Path value `%s' in %s, line %u" -msgstr "valor de Path no vàlid `%s' a %s, línia %u" +msgid "invalid Path value \"%s\" in %s, line %u" +msgstr "valor Path no vàlid «%s» a %s, línia %u" -#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 +#: lib/util/sudo_conf.c:369 lib/util/sudo_conf.c:422 #, c-format -msgid "invalid value for %s `%s' in %s, line %u" -msgstr "valor no vàid per a %s `%s' a %s, línia %u" +msgid "invalid value for %s \"%s\" in %s, line %u" +msgstr "valor no vàlid per a %s «%s» a %s, línia %u" -#: lib/util/sudo_conf.c:410 +#: lib/util/sudo_conf.c:390 #, c-format -msgid "unsupported group source `%s' in %s, line %u" -msgstr "font de grup no suportat `%s' a %s, línia %u" +msgid "unsupported group source \"%s\" in %s, line %u" +msgstr "font de grup no suportat «%s» a %s, línia %u" -#: lib/util/sudo_conf.c:426 +#: lib/util/sudo_conf.c:406 #, c-format -msgid "invalid max groups `%s' in %s, line %u" -msgstr "grups `%s' max no vàlids a %s, línia %u" +msgid "invalid max groups \"%s\" in %s, line %u" +msgstr "grups «%s» max no vàlids a %s, línia %u" -#: lib/util/sudo_conf.c:585 +#: lib/util/sudo_conf.c:561 #, c-format msgid "unable to stat %s" msgstr "no es pot obrir %s" -#: lib/util/sudo_conf.c:588 +#: lib/util/sudo_conf.c:564 #, c-format msgid "%s is not a regular file" msgstr "%s no és un fitxer regular" -#: lib/util/sudo_conf.c:591 +#: lib/util/sudo_conf.c:567 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s és propietat de l'uid %u, hauria de ser %u" -#: lib/util/sudo_conf.c:595 +#: lib/util/sudo_conf.c:571 #, c-format msgid "%s is world writable" msgstr "%s és escrivible per tothom" -#: lib/util/sudo_conf.c:598 +#: lib/util/sudo_conf.c:574 #, c-format msgid "%s is group writable" msgstr "%s és escrivible pel grup" -#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 +#: lib/util/sudo_conf.c:584 src/selinux.c:201 src/selinux.c:213 src/sudo.c:366 #, c-format msgid "unable to open %s" msgstr "no s'ha pogut obrir %s" -#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 -#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 -#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 -#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 -#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 -#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 -#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 -#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 -#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 +#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 +#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 +#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 +#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 +#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 +#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 +#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 +#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 +#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "no es pot establir el gestor per al senyal %d" -#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 +#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 msgid "unable to fork" msgstr "no s'ha pogut bifurcar" -#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 -#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 -#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 -#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 +#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 +#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 +#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 +#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 +#: src/exec_pty.c:1510 msgid "unable to add event to queue" msgstr "no s'ha pogut afegir un esdeveniment a la cua" -#: src/exec.c:392 +#: src/exec.c:391 msgid "unable to create sockets" msgstr "no s'ha pogut crear el sòcol" -#: src/exec.c:447 +#: src/exec.c:446 msgid "policy plugin failed session initialization" msgstr "el connector de política ha fallat la inicialització de la sessió" -#: src/exec.c:492 +#: src/exec.c:491 msgid "error in event loop" msgstr "error al bucle d'esdeveniment" -#: src/exec.c:510 +#: src/exec.c:509 msgid "unable to restore tty label" msgstr "no s'ha pogut restaurar l'etiqueta tty" -#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 +#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "no s'ha pogut restaurar el gestor per al senyal %d" -#: src/exec.c:721 src/exec_pty.c:1180 +#: src/exec.c:726 src/exec_pty.c:1236 msgid "error reading from signal pipe" msgstr "error en llegir del conducte del senyal" @@ -190,25 +191,25 @@ msgid "unable to allocate pty" msgstr "no s'ha pogut assignar pty" -#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 -#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 +#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 +#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 msgid "unable to create pipe" msgstr "no s'ha pogut crear un conducte" -#: src/exec_pty.c:1213 +#: src/exec_pty.c:1269 msgid "error reading from pipe" msgstr "error en llegir del conducte" -#: src/exec_pty.c:1238 +#: src/exec_pty.c:1296 msgid "error reading from socketpair" msgstr "error en llegir del parell de sòcols" -#: src/exec_pty.c:1247 +#: src/exec_pty.c:1305 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "tipus de resposta inesperada al canal posterior: %d" -#: src/exec_pty.c:1349 +#: src/exec_pty.c:1407 msgid "unable to set controlling tty" msgstr "no s'ha pogut configurar la tty controladora" @@ -217,8 +218,8 @@ #: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 #: src/load_plugins.c:191 #, c-format -msgid "error in %s, line %d while loading plugin `%s'" -msgstr "error a %s, línia %d quan s'estava carregant el connector `%s'" +msgid "error in %s, line %d while loading plugin \"%s\"" +msgstr "error a %s, línia %d quan s'estava carregant el connector «%s»" #: src/load_plugins.c:87 #, c-format @@ -242,8 +243,8 @@ #: src/load_plugins.c:180 #, c-format -msgid "unable to find symbol `%s' in %s" -msgstr "no s'ha pogut trobar el símbol `%s' a %s" +msgid "unable to find symbol \"%s\" in %s" +msgstr "no s'ha pogut trobar el símbol «%s» a %s" #: src/load_plugins.c:187 #, c-format @@ -257,8 +258,8 @@ #: src/load_plugins.c:202 #, c-format -msgid "ignoring policy plugin `%s' in %s, line %d" -msgstr "s'ignorarà el connector de política `%s' a %s, línia %d" +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "s'ignorarà el connector de política «%s» a %s, línia %d" #: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" @@ -266,20 +267,20 @@ #: src/load_plugins.c:207 #, c-format -msgid "ignoring duplicate policy plugin `%s' in %s, line %d" -msgstr "s'ignorarà el connector entrada/sortida duplicat `%s' a %s, línia %d" +msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" +msgstr "s'ignorarà el connector entrada/sortida duplicat «%s» a %s, línia %d" #: src/load_plugins.c:228 #, c-format -msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" -msgstr "s'ignorarà el connector entrada/sortida duplica `%s' a %s, línia %d" +msgid "ignoring duplicate I/O plugin \"%s\" in %s, line %d" +msgstr "s'ignorarà el connector entrada/sortida duplica «%s» a %s, línia %d" #: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "el connector de política %s no inclou un mètode check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 #, c-format msgid "internal error, %s overflow" msgstr "error intern, sobreeiximent de %s" @@ -312,15 +313,15 @@ msgid "the `-A' and `-S' options may not be used together" msgstr "no es poden usar a l'hora les opcions `-A' i `-S'" -#: src/parse_args.c:504 +#: src/parse_args.c:510 msgid "sudoedit is not supported on this platform" msgstr "aquesta plataforma no dóna suport a sudoedit" -#: src/parse_args.c:577 +#: src/parse_args.c:583 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Sols es pot especificar una de les opcions -e, -h, -i, -K, -l, -s, -v o -V" -#: src/parse_args.c:591 +#: src/parse_args.c:597 #, c-format msgid "" "%s - edit files as another user\n" @@ -329,7 +330,7 @@ "%s - edita fitxers com un altre usuari\n" "\n" -#: src/parse_args.c:593 +#: src/parse_args.c:599 #, c-format msgid "" "%s - execute a command as another user\n" @@ -338,7 +339,7 @@ "%s - executa una ordre com un altre usuari\n" "\n" -#: src/parse_args.c:598 +#: src/parse_args.c:604 #, c-format msgid "" "\n" @@ -347,198 +348,202 @@ "\n" "Opcions:\n" -#: src/parse_args.c:600 +#: src/parse_args.c:606 msgid "use a helper program for password prompting" msgstr "usa un programa auxiliar per a la pregunta de la contrasenya" -#: src/parse_args.c:603 +#: src/parse_args.c:609 msgid "use specified BSD authentication type" msgstr "usa el tipus d'autenticació BSD especificat" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "run command in the background" msgstr "executa l'ordre en el segon pla" -#: src/parse_args.c:608 +#: src/parse_args.c:614 msgid "close all file descriptors >= num" msgstr "tanca tots els descriptors de fitxer >= num" -#: src/parse_args.c:611 +#: src/parse_args.c:617 msgid "run command with the specified BSD login class" msgstr "executa l'ordre amb la classe d'inici de sesssió BSD especificada" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "preserve user environment when running command" msgstr "preserva l'entorn de l'usuari quan s'executi l'ordre" -#: src/parse_args.c:616 +#: src/parse_args.c:622 msgid "edit files instead of running a command" msgstr "edita els fitxers en comptes d'executar una ordre" -#: src/parse_args.c:618 +#: src/parse_args.c:624 msgid "run command as the specified group name or ID" msgstr "executa l'ordre com el nom o ID especificats de grup" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "set HOME variable to target user's home dir" msgstr "estableix la variable HOME per apuntar al directori de l'usuari" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "display help message and exit" msgstr "mostra el missatge d'ajuda i surt" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command on host (if supported by plugin)" msgstr "executa l'ordre a l'amfitrió (si està suportat pel connector)" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "run login shell as the target user; a command may also be specified" msgstr "executa l'intèrpret d'ordres de l'inici de sessió com a usuari de destinació; també es pot especificar una ordre" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "remove timestamp file completely" msgstr "suprimeix completament el fitxer de marca de temps" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "invalidate timestamp file" msgstr "fitxer de marca de temps no vàlid" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "fes una llista dels privilegis de l'usuari o verifica una ordre específica; usueu-lo dues vegades per a formats més llargs" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "non-interactive mode, no prompts are used" msgstr "mode no interactiu, no es preguntarà res" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "preserve group vector instead of setting to target's" msgstr "preserva el vector de grup en comptes d'establir-lo d'acord amb la destinació" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "use the specified password prompt" msgstr "usa la pregunta específica de contrasenya" -#: src/parse_args.c:641 +#: src/parse_args.c:647 msgid "create SELinux security context with specified role" msgstr "crea un context de seguretat SELinux amb el rol especificat" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "read password from standard input" msgstr "llegeix la contrasenya des de l'entrada estàndard" -#: src/parse_args.c:646 +#: src/parse_args.c:652 msgid "run shell as the target user; a command may also be specified" msgstr "executa l'intèrpret d'ordres com a usuari de destinació; també es pot especificar una ordre" -#: src/parse_args.c:649 +#: src/parse_args.c:655 msgid "create SELinux security context with specified type" msgstr "crea el context de seguretat SELinux amb el tipus especificat" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "in list mode, display privileges for user" msgstr "en mode llista, mostra els privilegis per a l'usuari" -#: src/parse_args.c:654 +#: src/parse_args.c:660 msgid "run command (or edit file) as specified user name or ID" msgstr "executa l'ordre (o edita el fitxer) com el nom o ID especificats d'usuari" -#: src/parse_args.c:656 +#: src/parse_args.c:662 msgid "display version information and exit" msgstr "mostra la informació de versió i surt" -#: src/parse_args.c:658 +#: src/parse_args.c:664 msgid "update user's timestamp without running a command" msgstr "actualitza la marca de temps de l'usuari sense executar una ordre" -#: src/parse_args.c:660 +#: src/parse_args.c:666 msgid "stop processing command line arguments" msgstr "deixa de processar els arguments de línia d'ordres" -#: src/selinux.c:78 +#: src/selinux.c:77 msgid "unable to open audit system" msgstr "no s'ha pogut obrir el sistema d'auditoria" -#: src/selinux.c:88 +#: src/selinux.c:87 msgid "unable to send audit message" msgstr "no s'ha pogut enviar el missatge d'auditoria" -#: src/selinux.c:116 +#: src/selinux.c:115 #, c-format msgid "unable to fgetfilecon %s" msgstr "no s'ha pogut fgetfilecon %s" -#: src/selinux.c:121 +#: src/selinux.c:120 #, c-format msgid "%s changed labels" msgstr "%s ha canviat les etiquetes" -#: src/selinux.c:126 +#: src/selinux.c:125 #, c-format msgid "unable to restore context for %s" msgstr "no s'ha pogut restaurar el context per a %s" -#: src/selinux.c:166 +#: src/selinux.c:165 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "no s'ha pogut obrir %s, no es canviaran les etiquetes per a la tty" -#: src/selinux.c:175 +#: src/selinux.c:173 msgid "unable to get current tty context, not relabeling tty" msgstr "no s'ha pogut obtenir el context tty actual, no es canviaran les etiquetes per a la tty" -#: src/selinux.c:182 +#: src/selinux.c:180 +msgid "unknown security class \"chr_file\", not relabeling tty" +msgstr "classe de seguretat «char_file» desconeguda, no es canviaran les etiquetes de la tty" + +#: src/selinux.c:185 msgid "unable to get new tty context, not relabeling tty" msgstr "no s'ha pogut obtenir el nou context tty, no es canviaran les etiquetes tty" -#: src/selinux.c:189 +#: src/selinux.c:192 msgid "unable to set new tty context" msgstr "no s'ha pogut establir el nou context tty" -#: src/selinux.c:255 +#: src/selinux.c:256 #, c-format msgid "you must specify a role for type %s" msgstr "heu d'especificar un rol per al tipus %s" -#: src/selinux.c:261 +#: src/selinux.c:262 #, c-format msgid "unable to get default type for role %s" msgstr "no s'ha pogut obtenir un tipus predeterminat per al rol %s" -#: src/selinux.c:279 +#: src/selinux.c:280 #, c-format msgid "failed to set new role %s" msgstr "no s'ha pogut establir el nou rol %s" -#: src/selinux.c:283 +#: src/selinux.c:284 #, c-format msgid "failed to set new type %s" msgstr "no s'ha pogut establir el nou tipus %s" -#: src/selinux.c:295 +#: src/selinux.c:296 #, c-format msgid "%s is not a valid context" msgstr "%s no és un context vàlid" -#: src/selinux.c:330 +#: src/selinux.c:331 msgid "failed to get old_context" msgstr "no s'ha pogut obtenir old_context" -#: src/selinux.c:336 +#: src/selinux.c:337 msgid "unable to determine enforcing mode." msgstr "no s'ha pogut determinar el mode de fer complir" -#: src/selinux.c:353 +#: src/selinux.c:354 #, c-format msgid "unable to set tty context to %s" msgstr "no s'ha pogut establir el context tty a %s" -#: src/selinux.c:392 +#: src/selinux.c:393 #, c-format msgid "unable to set exec context to %s" msgstr "no s'ha pogut establir el context exec a %s" -#: src/selinux.c:399 +#: src/selinux.c:400 #, c-format msgid "unable to set key creation context to %s" msgstr "no s'ha pogut establir el context de creació de clau a %s" @@ -557,12 +562,12 @@ msgid "unable to run %s as a login shell" msgstr "no s'ha pogut executar %s com a intèrpret d'ordres d'inici de sessió" -#: src/sesh.c:125 src/sudo.c:1274 +#: src/sesh.c:125 src/sudo.c:1297 #, c-format msgid "unable to execute %s" msgstr "no s'ha pogut executar %s" -#: src/signal.c:68 +#: src/signal.c:69 #, c-format msgid "unable to save handler for signal %d" msgstr "no s'ha pogut desar el gestorper al senyal %d" @@ -628,21 +633,21 @@ msgid "unable to initialize policy plugin" msgstr "no s'ha pogut inicialitzar el connector de polítiques" -#: src/sudo.c:276 +#: src/sudo.c:274 msgid "plugin did not return a command to execute" msgstr "el connector no ha retornat una ordre a executar" -#: src/sudo.c:292 +#: src/sudo.c:290 #, c-format msgid "error initializing I/O plugin %s" msgstr "no se pogut iniciliatzar el connector %s entrada/sortida" -#: src/sudo.c:318 +#: src/sudo.c:316 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "mode 0x%x inesperat de sudo" -#: src/sudo.c:461 +#: src/sudo.c:460 msgid "unable to get group vector" msgstr "no s'ha pogut obtenir el vector de grup" @@ -651,170 +656,174 @@ msgid "unknown uid %u: who are you?" msgstr "uid %u desconegut: qui sou?" -#: src/sudo.c:859 +#: src/sudo.c:578 +msgid "unable to determine tty" +msgstr "no s'ha pogut determinar la tty" + +#: src/sudo.c:866 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s ha de ser propietat de l'uid %d i tenir el bit setuid establert" -#: src/sudo.c:862 +#: src/sudo.c:869 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "" "l'uid efectiu no és %d, és %s a un sistema de fitxers amb l'opció\n" "'nosuid' establarta o un sistema de fitxers NFS sense d'usuari primari? " -#: src/sudo.c:868 +#: src/sudo.c:875 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "l'uid efectiu no és %d, és el sudo instal·lat com a setuid root?" -#: src/sudo.c:999 -#, c-format -msgid "unknown login class %s" -msgstr "classe d'inici de sessió %s desconeguda" - -#: src/sudo.c:1012 -msgid "unable to set user context" -msgstr "no s'ha pogut establir el context d'usuari" - -#: src/sudo.c:1026 +#: src/sudo.c:956 msgid "unable to set supplementary group IDs" msgstr "no s'han pogut establir els IDs de grup suplementaris" -#: src/sudo.c:1033 +#: src/sudo.c:963 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "no s'ha pogut establir el gid efectiu per a runas gid %u" -#: src/sudo.c:1039 +#: src/sudo.c:969 #, c-format msgid "unable to set gid to runas gid %u" msgstr "no s'ha pogut establir el gid a runas gid %u" -#: src/sudo.c:1046 +#: src/sudo.c:1040 +#, c-format +msgid "unknown login class %s" +msgstr "classe d'inici de sessió %s desconeguda" + +#: src/sudo.c:1053 +msgid "unable to set user context" +msgstr "no s'ha pogut establir el context d'usuari" + +#: src/sudo.c:1069 msgid "unable to set process priority" msgstr "no s'ha pogut establir la prioritat del procés" -#: src/sudo.c:1054 +#: src/sudo.c:1077 #, c-format msgid "unable to change root to %s" msgstr "no s'ha pogut canviar l'usuari primari a %s" -#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 +#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "no s'ha pogut canviar a runas uid (%u, %u)" -#: src/sudo.c:1098 +#: src/sudo.c:1121 #, c-format msgid "unable to change directory to %s" msgstr "no s'ha pogut canviar el directori a %s" -#: src/sudo.c:1156 +#: src/sudo.c:1179 #, c-format msgid "unexpected child termination condition: %d" msgstr "condició de terminació del fill inesperada: %d" -#: src/sudo.c:1302 +#: src/sudo.c:1325 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "no hi ha el mètode `check_policy' al connector de polítiques %s" -#: src/sudo.c:1320 +#: src/sudo.c:1343 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "el connector de política %s no dóna suport a llistar privilegis" -#: src/sudo.c:1337 +#: src/sudo.c:1360 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "el connector de polítiques %s no dóna suport a l'opció -v" -#: src/sudo.c:1352 +#: src/sudo.c:1375 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "el connector de polítiques %s no dóna suport a les opcions -k/-K" -#: src/sudo_edit.c:181 +#: src/sudo_edit.c:181 src/sudo_edit.c:270 msgid "unable to restore current working directory" msgstr "no s'ha pogut restaurar el directori actual de treball" -#: src/sudo_edit.c:526 src/sudo_edit.c:630 +#: src/sudo_edit.c:577 src/sudo_edit.c:689 #, c-format msgid "%s: not a regular file" msgstr "%s: no és un fitxer regular" -#: src/sudo_edit.c:533 +#: src/sudo_edit.c:584 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: no es permet l'edició de enllaços simbòlics" -#: src/sudo_edit.c:536 +#: src/sudo_edit.c:587 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: no es permet l'edició de fitxers a un directori amb permís d'escriptura" -#: src/sudo_edit.c:567 src/sudo_edit.c:669 +#: src/sudo_edit.c:620 src/sudo_edit.c:728 #, c-format msgid "%s: short write" msgstr "%s: escriptura breu" -#: src/sudo_edit.c:631 +#: src/sudo_edit.c:690 #, c-format msgid "%s left unmodified" msgstr "%s s'ha deixat sense modificar" -#: src/sudo_edit.c:644 src/sudo_edit.c:830 +#: src/sudo_edit.c:703 src/sudo_edit.c:889 #, c-format msgid "%s unchanged" msgstr "%s sense canviar" -#: src/sudo_edit.c:658 src/sudo_edit.c:680 +#: src/sudo_edit.c:717 src/sudo_edit.c:739 #, c-format msgid "unable to write to %s" msgstr "no s'ha pogut escriure a %s" -#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 -#: src/sudo_edit.c:855 src/sudo_edit.c:859 +#: src/sudo_edit.c:718 src/sudo_edit.c:737 src/sudo_edit.c:740 +#: src/sudo_edit.c:914 src/sudo_edit.c:918 #, c-format msgid "contents of edit session left in %s" msgstr "els continguts de la sessió d'edició s'han deixat a %s" -#: src/sudo_edit.c:677 +#: src/sudo_edit.c:736 msgid "unable to read temporary file" msgstr "no s'ha pogut llegir el fitxer temporal" -#: src/sudo_edit.c:760 +#: src/sudo_edit.c:819 msgid "sesh: internal error: odd number of paths" msgstr "sesh: error intern: nombre imparell de camins" -#: src/sudo_edit.c:762 +#: src/sudo_edit.c:821 msgid "sesh: unable to create temporary files" msgstr "sesh: no es poden crear fitxers temporal" -#: src/sudo_edit.c:764 src/sudo_edit.c:862 +#: src/sudo_edit.c:823 src/sudo_edit.c:921 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: error desconegut %d" -#: src/sudo_edit.c:854 +#: src/sudo_edit.c:913 msgid "unable to copy temporary files back to their original location" msgstr "no es poden copiar els fitxers temporals un altre cop a la seva ubicació original" -#: src/sudo_edit.c:858 +#: src/sudo_edit.c:917 msgid "unable to copy some of the temporary files back to their original location" msgstr "no es poden copiar alguns dels fitxers temporals un altre cop a la seva ubicació original" -#: src/sudo_edit.c:901 +#: src/sudo_edit.c:961 #, c-format msgid "unable to change uid to root (%u)" msgstr "no s'ha pogut canviar l'uid a l'usuari primari (%u)" -#: src/sudo_edit.c:918 +#: src/sudo_edit.c:978 msgid "plugin error: missing file list for sudoedit" msgstr "error de connector: no hi ha la llista de fitxers per a sudoedit" -#: src/sudo_edit.c:959 src/sudo_edit.c:972 +#: src/sudo_edit.c:1019 src/sudo_edit.c:1032 msgid "unable to read the clock" msgstr "no es pot llegir el rellotge" @@ -826,30 +835,30 @@ msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "no s'ha especificat un programa askpass, proveu d'establir SUDO_ASKPASS" -#: src/tgetpass.c:276 +#: src/tgetpass.c:261 #, c-format msgid "unable to set gid to %u" msgstr "no s'ha pogut establir el gid a %u" -#: src/tgetpass.c:280 +#: src/tgetpass.c:265 #, c-format msgid "unable to set uid to %u" msgstr "no s'ha pogut establir el uid a %u" -#: src/tgetpass.c:285 +#: src/tgetpass.c:270 #, c-format msgid "unable to run %s" msgstr "no s'ha pogut executar %s" -#: src/utmp.c:266 +#: src/utmp.c:268 msgid "unable to save stdin" msgstr "no s'ha pogut desar el stdin" -#: src/utmp.c:268 +#: src/utmp.c:270 msgid "unable to dup2 stdin" msgstr "no s'ha pogut fer dup2 stdin" -#: src/utmp.c:271 +#: src/utmp.c:273 msgid "unable to restore stdin" msgstr "no s'ha pogut restaurar stdin" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/cs.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/cs.mo differ diff -Nru sudo-1.8.19p1/po/cs.po sudo-1.8.20p2/po/cs.po --- sudo-1.8.19p1/po/cs.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/cs.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,14 +1,14 @@ # Portable object template file for sudo # This file is put in the public domain. # Todd C. Miller , 2011-2013 -# Petr Pisar , 2013, 2014, 2015, 2016. +# Petr Pisar , 2013, 2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 19:31+01:00\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 10:54+02:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -32,36 +32,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "nelze alokovat paměť" @@ -70,18 +71,18 @@ msgid "Unknown signal" msgstr "Neznámý signál" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "neplatná hodnota" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "hodnota je příliš velká" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "hodnota je příliš malá" @@ -136,85 +137,89 @@ msgid "unable to open %s" msgstr "%s nelze otevřít" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "obsluhu pro signál %d nelze nastavit" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "nelze vytvořit potomka" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "z PRIV_LIMIT nelze odstranit PRIV_PROC_EXEC" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "chyba při čtení ze signální roury" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "chyba při čtení z dvojice socketů" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "neočekávaný druh odpovědi na zpětném kanálu: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "událost nelze přidat do fronty" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "nelze vytvořit sockety" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "nelze vytvořit rouru" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "řídicí terminál nelze nastavit" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "nelze vytvořit potomka" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "nelze obnovit značku TTY" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "modul s politikami zrušil inicializaci relace" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "chyba ve smyčce s událostmi" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "nelze obnovit značku TTY" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "nelze obnovit obsluhu signálu %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "chyba při čtení ze signální roury" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "z PRIV_LIMIT nelze odstranit PRIV_PROC_EXEC" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "nelze alokovat PTY" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "nelze vytvořit rouru" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "chyba při čtení z roury" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "chyba při čtení z dvojice socketů" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "neočekávaný druh odpovědi na zpětném kanálu: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "řídicí terminál nelze nastavit" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "nelze vytvořit sockety" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -283,48 +288,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "modul s politikou %s neobsahuje metodu check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "vnitřní chyba, přetečení v %s" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument u -C musí být číslo větší nebo rovno 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "nesmíte zadávat přepínače „-i“ a „-s“ spolu" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "nesmíte zadávat přepínače „-i“ a „-E“ spolu" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "přepínač „-E“ není platný v režimu úprav" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "v režimu úprav nesmíte zadávat proměnné prostředí" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "přepínač „-U“ smí být použit jen s přepínačem „-l“" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "přepínače „-A“ a „-S“ smí nesmí být použity spolu" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "na této platformě není sudoedit podporován" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Smí být zadán pouze jeden z přepínačů -e, -h, -i, -K, -l, -s, -v nebo -V" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -333,7 +338,7 @@ "%s – upraví soubory jako jiný uživatel\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -342,7 +347,7 @@ "%s – vykoná příkaz jako jiný uživatel\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -351,111 +356,115 @@ "\n" "Přepínače:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "dotazuje se na heslo prostřednictvím pomocného programu" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "použije zadaný druh BSD autentizace" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "spustí příkaz na pozadí" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "uzavře všechny deskriptory souboru >= číslu" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "spustí příkaz se zadanou přihlašovací třídou BSD" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "při spuštění příkazu zachová prostředí" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "místo spuštění příkazu upraví soubory" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "spustí příkaz jako skupina určení názvem nebo ID" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "nastaví proměnnou HOME na domovský adresář uživatele" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "zobrazí nápovědu a skončí" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "spustí příkaz na stroji (je-li podporováno modulem)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "spustí přihlašovací shell jako cílový uživatel; příkaz lze rovněž zadat" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "úplně odstraní soubor s časovými údaji" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "zneplatní soubor s časovými údaji" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "vypíše oprávnění uživatele nebo zkontroluje určitý příkaz; pro delší výstup použijte dvakrát" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "neinteraktivní režim, nepoužijí se žádné dotazy" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "zachová vektor skupin namísto nastavení na skupiny cíle" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "použije určený dotaz na heslo" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "vytvoří selinuxový bezpečnostní kontext se zadanou rolí" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "načte heslo ze standardní vstupu" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "spustí shell jako cílový uživatel; příkaz lze rovněž zadat" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "vytvoří selinuxový bezpečnostní kontext se zadaným typem" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "po uplynutí zadaného času ukončí příkaz" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "v režimu výpisu zobrazí oprávnění uživatele" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "spustí příkaz (nebo upraví soubor) jako uživatel určený jménem nebo ID" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "zobrazí údaje o verzi a skončí" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "aktualizuje časové údaje uživatele bez spuštění příkazu" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "přestane zpracovávat argumenty příkazového řádku" @@ -565,7 +574,7 @@ msgid "unable to run %s as a login shell" msgstr "%s nelze spustit jako přihlašovací shell" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "%s nelze spustit" @@ -650,97 +659,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "neočekávaný režim programu sudo 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "nelze získat vektor skupin" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "neznámé UID %u: kdo jsi?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "nelze určit terminál" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s musí být vlastněn UID %d a mít nastaven bit setuid" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "efektivní UID není %d, nalézá se %s na souborovém systému s nastavenou volbou „nosuid“ nebo na souborovém systému NFS bez práv roota?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "efektivní UID není %d, je sudo nainstalované jako setuid vlastněné rootem?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "nelze nastavit ID doplňkových skupin" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "efektivní GID nelze nastavit na %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID nelze nastavit na %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "neznámá přihlašovací třída %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "nelze nastavit kontext uživatele" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "nelze nastavit prioritu procesu" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "kořenový adresář nelze změnit na %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "nelze změnit UID na (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "pracovní adresář nelze změnit na %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "neočekávaný důvod ukončení potomka: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "modulu s politikami %s chybí metoda „check_policy“" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "modul s politikami %s nepodporuje získání seznamu oprávnění" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "modul s politikami %s nepodporuje přepínač -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "modul s politikami %s nepodporuje přepínače -k/-K" @@ -863,6 +872,9 @@ msgid "unable to restore stdin" msgstr "standardní vstup nelze obnovit" +#~ msgid "error reading from pipe" +#~ msgstr "chyba při čtení z roury" + #~ msgid "unable to set terminal to raw mode" #~ msgstr "terminál nelze přepnout do syrového režimu" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/da.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/da.mo differ diff -Nru sudo-1.8.19p1/po/da.po sudo-1.8.20p2/po/da.po --- sudo-1.8.19p1/po/da.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/po/da.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,6 +1,6 @@ # Danish translation of sudo. # This file is put in the public domain. -# Joe Hansen , 2011, 2012, 2013, 2014, 2015, 2016. +# Joe Hansen , 2011, 2012, 2013, 2014, 2015, 2016, 2017. # # audit -> overvågning # overflow -> overløb @@ -11,64 +11,64 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.17b1\n" +"Project-Id-Version: sudo 1.8.19b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-05-18 14:30-0600\n" -"PO-Revision-Date: 2016-06-25 23:06+0100\n" +"POT-Creation-Date: 2016-11-21 17:45-0700\n" +"PO-Revision-Date: 2017-02-07 23:06+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" -#: lib/util/aix.c:85 lib/util/aix.c:165 +#: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" msgstr "kan ikke åbne userdb" -#: lib/util/aix.c:220 +#: lib/util/aix.c:227 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "kan ikke skifte til register »%s« for %s" -#: lib/util/aix.c:245 +#: lib/util/aix.c:252 msgid "unable to restore registry" msgstr "kan ikke gendanne register" -#: lib/util/aix.c:268 lib/util/gidlist.c:64 lib/util/gidlist.c:74 -#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 -#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:870 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 #: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:693 src/exec_pty.c:701 src/load_plugins.c:52 -#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:204 src/sudo.c:399 src/sudo.c:418 src/sudo.c:482 -#: src/sudo.c:656 src/sudo.c:666 src/sudo.c:686 src/sudo.c:705 src/sudo.c:714 -#: src/sudo.c:723 src/sudo.c:740 src/sudo.c:781 src/sudo.c:791 src/sudo.c:811 -#: src/sudo.c:1193 src/sudo.c:1214 src/sudo.c:1406 src/sudo.c:1500 -#: src/sudo_edit.c:151 src/sudo_edit.c:725 src/sudo_edit.c:822 -#: src/sudo_edit.c:935 src/sudo_edit.c:955 +#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 +#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 +#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 +#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 +#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 +#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 +#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 +#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 +#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 +#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 +#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 +#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/aix.c:268 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 -#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 -#: src/conversation.c:76 src/exec.c:870 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:693 -#: src/exec_pty.c:701 src/load_plugins.c:215 src/load_plugins.c:238 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 +#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 +#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 #: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 #: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:204 src/sudo.c:399 src/sudo.c:418 src/sudo.c:482 -#: src/sudo.c:811 src/sudo.c:1193 src/sudo.c:1214 src/sudo.c:1406 -#: src/sudo.c:1500 src/sudo_edit.c:151 src/sudo_edit.c:725 src/sudo_edit.c:822 -#: src/sudo_edit.c:935 src/sudo_edit.c:955 +#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 +#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 +#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "kunne ikke allokere hukommelse" @@ -76,117 +76,118 @@ msgid "Unknown signal" msgstr "ukendt signal" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 #: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ugyldig værdi" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 #: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "værdi for stor" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 #: lib/util/strtonum.c:182 msgid "value too small" msgstr "værdi for lille" -#: lib/util/sudo_conf.c:223 +#: lib/util/sudo_conf.c:203 #, c-format -msgid "invalid Path value `%s' in %s, line %u" +msgid "invalid Path value \"%s\" in %s, line %u" msgstr "ugyldig stiværdi »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 +#: lib/util/sudo_conf.c:369 lib/util/sudo_conf.c:422 #, c-format -msgid "invalid value for %s `%s' in %s, line %u" +msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "ugyldig værdi for %s »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:410 +#: lib/util/sudo_conf.c:390 #, c-format -msgid "unsupported group source `%s' in %s, line %u" +msgid "unsupported group source \"%s\" in %s, line %u" msgstr "ikke understøttet gruppekilde »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:426 +#: lib/util/sudo_conf.c:406 #, c-format -msgid "invalid max groups `%s' in %s, line %u" +msgid "invalid max groups \"%s\" in %s, line %u" msgstr "ugyldigt maks. for grupper »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:585 +#: lib/util/sudo_conf.c:561 #, c-format msgid "unable to stat %s" msgstr "kan ikke køre stat %s" -#: lib/util/sudo_conf.c:588 +#: lib/util/sudo_conf.c:564 #, c-format msgid "%s is not a regular file" msgstr "%s er ikke en regulær fil" -#: lib/util/sudo_conf.c:591 +#: lib/util/sudo_conf.c:567 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s er ejet af uid %u, burde være %u" -#: lib/util/sudo_conf.c:595 +#: lib/util/sudo_conf.c:571 #, c-format msgid "%s is world writable" msgstr "%s er skrivbar for alle" -#: lib/util/sudo_conf.c:598 +#: lib/util/sudo_conf.c:574 #, c-format msgid "%s is group writable" msgstr "%s er skrivbar for gruppe" -#: lib/util/sudo_conf.c:608 src/selinux.c:201 src/selinux.c:213 src/sudo.c:368 +#: lib/util/sudo_conf.c:584 src/selinux.c:201 src/selinux.c:213 src/sudo.c:366 #, c-format msgid "unable to open %s" msgstr "kan ikke åbne %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:410 src/exec.c:412 -#: src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:420 src/exec.c:423 -#: src/exec.c:439 src/exec.c:441 src/exec.c:602 src/exec.c:797 -#: src/exec_pty.c:466 src/exec_pty.c:731 src/exec_pty.c:801 src/exec_pty.c:803 -#: src/exec_pty.c:815 src/exec_pty.c:817 src/exec_pty.c:1301 -#: src/exec_pty.c:1303 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1324 src/exec_pty.c:1335 src/exec_pty.c:1337 -#: src/exec_pty.c:1339 src/exec_pty.c:1341 src/exec_pty.c:1343 -#: src/exec_pty.c:1345 src/exec_pty.c:1347 src/signal.c:148 src/signal.c:159 +#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 +#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 +#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 +#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 +#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 +#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 +#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 +#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 +#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "kan ikke angive håndtering for signal %d" -#: src/exec.c:127 src/exec_pty.c:847 src/exec_pty.c:1385 src/tgetpass.c:259 +#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 msgid "unable to fork" msgstr "kunne ikke forgrene" -#: src/exec.c:305 src/exec.c:313 src/exec.c:875 src/exec_pty.c:587 -#: src/exec_pty.c:592 src/exec_pty.c:662 src/exec_pty.c:669 src/exec_pty.c:955 -#: src/exec_pty.c:965 src/exec_pty.c:1010 src/exec_pty.c:1017 -#: src/exec_pty.c:1450 src/exec_pty.c:1457 src/exec_pty.c:1464 +#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 +#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 +#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 +#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 +#: src/exec_pty.c:1510 msgid "unable to add event to queue" msgstr "kan ikke tilføje hændelse til kø" -#: src/exec.c:393 +#: src/exec.c:391 msgid "unable to create sockets" msgstr "kunne ikke oprette sokler" -#: src/exec.c:448 +#: src/exec.c:446 msgid "policy plugin failed session initialization" msgstr "udvidelsesmodul for politik mislykkedes i sessionsinitialisering" -#: src/exec.c:493 +#: src/exec.c:491 msgid "error in event loop" msgstr "fejl i hændelsesloop" -#: src/exec.c:511 +#: src/exec.c:509 msgid "unable to restore tty label" msgstr "kunne ikke gendanne tty-etiket" -#: src/exec.c:610 src/exec_pty.c:498 src/signal.c:87 +#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "kan ikke gendanne håndtering for signal %d" -#: src/exec.c:728 src/exec_pty.c:1192 +#: src/exec.c:726 src/exec_pty.c:1236 msgid "error reading from signal pipe" msgstr "fejl under læsning fra signaldatakanal" @@ -198,25 +199,25 @@ msgid "unable to allocate pty" msgstr "kunne ikke allokere pty" -#: src/exec_pty.c:775 src/exec_pty.c:784 src/exec_pty.c:792 -#: src/exec_pty.c:1293 src/exec_pty.c:1382 src/signal.c:129 src/tgetpass.c:255 +#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 +#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 msgid "unable to create pipe" msgstr "kunne ikke oprette datakanal (pipe)" -#: src/exec_pty.c:1225 +#: src/exec_pty.c:1269 msgid "error reading from pipe" msgstr "fejl ved læsning fra datakanal" -#: src/exec_pty.c:1250 +#: src/exec_pty.c:1296 msgid "error reading from socketpair" msgstr "fejl ved læsning fra socketpair" -#: src/exec_pty.c:1259 +#: src/exec_pty.c:1305 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "uventet svartype på bagkanal (backchannel): %d" -#: src/exec_pty.c:1361 +#: src/exec_pty.c:1407 msgid "unable to set controlling tty" msgstr "kunne ikke angive kontrollerende tty" @@ -225,7 +226,7 @@ #: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 #: src/load_plugins.c:191 #, c-format -msgid "error in %s, line %d while loading plugin `%s'" +msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "fejl i %s, linje %d under indlæsning af udvidelsesmodulet »%s«" #: src/load_plugins.c:87 @@ -251,7 +252,7 @@ #: src/load_plugins.c:180 #, c-format -msgid "unable to find symbol `%s' in %s" +msgid "unable to find symbol \"%s\" in %s" msgstr "kunne ikke finde symbol »%s« i %s" #: src/load_plugins.c:187 @@ -266,7 +267,7 @@ #: src/load_plugins.c:202 #, c-format -msgid "ignoring policy plugin `%s' in %s, line %d" +msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignorerer politikudvidelsesmodul »%s« i %s, linje %d" #: src/load_plugins.c:204 @@ -275,12 +276,12 @@ #: src/load_plugins.c:207 #, c-format -msgid "ignoring duplicate policy plugin `%s' in %s, line %d" +msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" msgstr "ignorerer duplikat politikudvidelsesmodul »%s« i %s, linje %d" #: src/load_plugins.c:228 #, c-format -msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" +msgid "ignoring duplicate I/O plugin \"%s\" in %s, line %d" msgstr "ignorerer duplikat I/O-udvidelsesmodul »%s« i %s, linje %d" #: src/load_plugins.c:331 @@ -288,7 +289,7 @@ 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:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:477 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 #, c-format msgid "internal error, %s overflow" msgstr "intern fejl, %s-overløb" @@ -321,15 +322,15 @@ msgid "the `-A' and `-S' options may not be used together" msgstr "tilvalgene »-A« og »-S« må ikke bruges sammen" -#: src/parse_args.c:504 +#: src/parse_args.c:510 msgid "sudoedit is not supported on this platform" msgstr "sudoedit er ikke understøttet på denne platform" -#: src/parse_args.c:577 +#: src/parse_args.c:583 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:591 +#: src/parse_args.c:597 #, c-format msgid "" "%s - edit files as another user\n" @@ -338,7 +339,7 @@ "%s - rediger filer som en anden bruger\n" "\n" -#: src/parse_args.c:593 +#: src/parse_args.c:599 #, c-format msgid "" "%s - execute a command as another user\n" @@ -347,7 +348,7 @@ "%s - udfør en kommando som en anden bruger\n" "\n" -#: src/parse_args.c:598 +#: src/parse_args.c:604 #, c-format msgid "" "\n" @@ -356,111 +357,111 @@ "\n" "Tilvalg:\n" -#: src/parse_args.c:600 +#: src/parse_args.c:606 msgid "use a helper program for password prompting" msgstr "brug et hjælpeprogram for indhentelse af adgangskode" -#: src/parse_args.c:603 +#: src/parse_args.c:609 msgid "use specified BSD authentication type" msgstr "brug angivet BSD-godkendelsestype" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "run command in the background" msgstr "kør kommando i baggrunden" -#: src/parse_args.c:608 +#: src/parse_args.c:614 msgid "close all file descriptors >= num" msgstr "luk alle filbeskrivelser >= num" -#: src/parse_args.c:611 +#: src/parse_args.c:617 msgid "run command with the specified BSD login class" msgstr "kør kommando med angivet BSD-logindklasse" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "preserve user environment when running command" msgstr "bevar brugermiljø når kommando udføres" -#: src/parse_args.c:616 +#: src/parse_args.c:622 msgid "edit files instead of running a command" msgstr "rediger filer i stedet for at køre en kommando" -#: src/parse_args.c:618 +#: src/parse_args.c:624 msgid "run command as the specified group name or ID" msgstr "udfør kommando som det angivne gruppenavn eller ID" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "set HOME variable to target user's home dir" msgstr "angiv HOME-variabel til målbrugers hjemmemappe" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "display help message and exit" msgstr "vis hjælpetekst og afslut" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command on host (if supported by plugin)" msgstr "kør kommando på vært (hvis understøttet af udvidelsesmodul)" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "run login shell as the target user; a command may also be specified" msgstr "kør en logindskal som målbrugeren; en kommando kan også angives" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "remove timestamp file completely" msgstr "fjern tidsstempelfil fuldstændig" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "invalidate timestamp file" msgstr "ugyldiggør tidsstempelfil" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "vis brugers privilegier eller kontroller en specifik kommando; brug to gange for længere format" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "non-interactive mode, no prompts are used" msgstr "ikkeinteraktiv tilstand, vil ikke spørge bruger" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "preserve group vector instead of setting to target's" msgstr "bevar gruppevektor i stedet for at sætte til målets" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "use the specified password prompt" msgstr "brug angivet logind for adgangskode" -#: src/parse_args.c:641 +#: src/parse_args.c:647 msgid "create SELinux security context with specified role" msgstr "opret SELinux-sikkerhedskontekt med angivet rolle" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "read password from standard input" msgstr "læs adgangskode fra standardinddata" -#: src/parse_args.c:646 +#: src/parse_args.c:652 msgid "run shell as the target user; a command may also be specified" msgstr "kør skal som målbruger; en kommando kan også specificeres" -#: src/parse_args.c:649 +#: src/parse_args.c:655 msgid "create SELinux security context with specified type" msgstr "opret SELinux-sikkerhedskontekt med angivet type" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "in list mode, display privileges for user" msgstr "i vis-tilstand, vis privilegier for bruger" -#: src/parse_args.c:654 +#: src/parse_args.c:660 msgid "run command (or edit file) as specified user name or ID" msgstr "kør kommando (eller rediger fil) som angivet brugernavn eller ID" -#: src/parse_args.c:656 +#: src/parse_args.c:662 msgid "display version information and exit" msgstr "vis versionsinformation og afslut" -#: src/parse_args.c:658 +#: src/parse_args.c:664 msgid "update user's timestamp without running a command" msgstr "opdater brugers tidsstempel uden at køre en kommando" -#: src/parse_args.c:660 +#: src/parse_args.c:666 msgid "stop processing command line arguments" msgstr "stop behandling af parametre for kommandolinjen" @@ -572,7 +573,7 @@ msgid "unable to run %s as a login shell" msgstr "kan ikke køre %s som en indlogningsskal" -#: src/sesh.c:125 src/sudo.c:1252 +#: src/sesh.c:125 src/sudo.c:1297 #, c-format msgid "unable to execute %s" msgstr "kan ikke køre %s" @@ -625,209 +626,213 @@ msgid "warning, resource control assignment failed for project \"%s\"" msgstr "advarsel, ressourcekontroltildeling fejlede for projekt »%s«" -#: src/sudo.c:215 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:217 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Konfigurationsindstillinger: %s\n" -#: src/sudo.c:225 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "fatal fejl, kan ikke indlæse udvidelsesmoduler" -#: src/sudo.c:233 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "kan ikke initialisere udvidelsesmodul for politik" -#: src/sudo.c:277 +#: src/sudo.c:274 msgid "plugin did not return a command to execute" msgstr "udvidelsesmodul returnerede ikke en kommando til afvikling" -#: src/sudo.c:293 +#: src/sudo.c:290 #, c-format msgid "error initializing I/O plugin %s" msgstr "fejl under initialisering af I/O-udvidelsesmodulet %s" -#: src/sudo.c:319 +#: src/sudo.c:316 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "uventet sudo-tilstand 0x%x" -#: src/sudo.c:462 +#: src/sudo.c:460 msgid "unable to get group vector" msgstr "kan ikke indhente gruppevektor" -#: src/sudo.c:523 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "ukendt uid %u: hvem er du?" -#: src/sudo.c:860 +#: src/sudo.c:578 +msgid "unable to determine tty" +msgstr "kunne ikke bestemme tty" + +#: src/sudo.c:866 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s skal være ejet af uid %d og have setuid bit angivet" -#: src/sudo.c:863 +#: src/sudo.c:869 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "effektiv uid er ikke %d, er %s på et filsystem med indstillingen »nosuid« angivet eller et NFS-filsytsem uden administratorprivilegier (root)?" -#: src/sudo.c:869 +#: src/sudo.c:875 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "effektiv uid er ikke %d, er sudo installeret setuid root?" -#: src/sudo.c:1001 +#: src/sudo.c:956 +msgid "unable to set supplementary group IDs" +msgstr "kunne ikke angive supplerende gruppe-id'er" + +#: src/sudo.c:963 +#, 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:969 +#, c-format +msgid "unable to set gid to runas gid %u" +msgstr "kunne ikke angive gid til runas gid %u" + +#: src/sudo.c:1040 #, c-format msgid "unknown login class %s" msgstr "ukendt logindklasse %s" -#: src/sudo.c:1014 +#: src/sudo.c:1053 msgid "unable to set user context" msgstr "kan ikke angive brugerkontekst" -#: src/sudo.c:1024 +#: src/sudo.c:1069 msgid "unable to set process priority" msgstr "kunne ikke angive procesprioritet" -#: src/sudo.c:1032 +#: src/sudo.c:1077 #, c-format msgid "unable to change root to %s" msgstr "kunne ikke ændre administrator (root) til %s" -#: src/sudo.c:1045 src/sudo.c:1051 src/sudo.c:1058 +#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "kunne ikke ændre til runas uid (%u, %u)" -#: src/sudo.c:1076 +#: src/sudo.c:1121 #, c-format msgid "unable to change directory to %s" msgstr "kunne ikke ændre mappe til %s" -#: src/sudo.c:1134 +#: src/sudo.c:1179 #, c-format msgid "unexpected child termination condition: %d" msgstr "uventet underbetingelse for terminering: %d" -#: src/sudo.c:1280 +#: src/sudo.c:1325 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "politikudvidelsesmodulet %s mangler i metoden »check_policy«" -#: src/sudo.c:1298 +#: src/sudo.c:1343 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "politikudvidelsesmodul %s understøter ikke listning af privilegier" -#: src/sudo.c:1315 +#: src/sudo.c:1360 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "politikudvidelsesmodul %s understøtter ikke tilvalget -v" -#: src/sudo.c:1330 +#: src/sudo.c:1375 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "politikudvidelsesmodul %s understøtter ikke tilvalget -k/-K" -#: src/sudo.c:1353 -msgid "unable to set supplementary group IDs" -msgstr "kunne ikke angive supplerende gruppe-id'er" - -#: src/sudo.c:1361 -#, 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:1368 -#, c-format -msgid "unable to set gid to runas gid %u" -msgstr "kunne ikke angive gid til runas gid %u" - -#: src/sudo_edit.c:181 +#: src/sudo_edit.c:181 src/sudo_edit.c:270 msgid "unable to restore current working directory" msgstr "kan ikke gendanne nuværende arbejdsmappe" -#: src/sudo_edit.c:528 src/sudo_edit.c:639 +#: src/sudo_edit.c:577 src/sudo_edit.c:689 #, c-format msgid "%s: not a regular file" msgstr "%s: ikke en regulær fil" -#: src/sudo_edit.c:535 +#: src/sudo_edit.c:584 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: redigering af symbolske henvisninger er ikke tilladt" -#: src/sudo_edit.c:538 +#: src/sudo_edit.c:587 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: redigering af filer i en skrivbar mappe er ikke tilladt" -#: src/sudo_edit.c:571 src/sudo_edit.c:678 +#: src/sudo_edit.c:620 src/sudo_edit.c:728 #, c-format msgid "%s: short write" msgstr "%s: kort skrivning" -#: src/sudo_edit.c:640 +#: src/sudo_edit.c:690 #, c-format msgid "%s left unmodified" msgstr "%s tilbage uændrede" -#: src/sudo_edit.c:653 src/sudo_edit.c:839 +#: src/sudo_edit.c:703 src/sudo_edit.c:889 #, c-format msgid "%s unchanged" msgstr "%s uændrede" -#: src/sudo_edit.c:667 src/sudo_edit.c:689 +#: src/sudo_edit.c:717 src/sudo_edit.c:739 #, c-format msgid "unable to write to %s" msgstr "kan ikke skrive til %s" -#: src/sudo_edit.c:668 src/sudo_edit.c:687 src/sudo_edit.c:690 -#: src/sudo_edit.c:864 src/sudo_edit.c:868 +#: src/sudo_edit.c:718 src/sudo_edit.c:737 src/sudo_edit.c:740 +#: src/sudo_edit.c:914 src/sudo_edit.c:918 #, c-format msgid "contents of edit session left in %s" msgstr "indhold fra redigeringssession tilbage i %s" -#: src/sudo_edit.c:686 +#: src/sudo_edit.c:736 msgid "unable to read temporary file" msgstr "kan ikke læse midlertidig fil" -#: src/sudo_edit.c:769 +#: src/sudo_edit.c:819 msgid "sesh: internal error: odd number of paths" msgstr "sesh: intern fejl: forkert antal stier" -#: src/sudo_edit.c:771 +#: src/sudo_edit.c:821 msgid "sesh: unable to create temporary files" msgstr "sesh: kan ikke oprette midlertidige filer" -#: src/sudo_edit.c:773 src/sudo_edit.c:871 +#: src/sudo_edit.c:823 src/sudo_edit.c:921 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: ukendt fejl %d" -#: src/sudo_edit.c:863 +#: src/sudo_edit.c:913 msgid "unable to copy temporary files back to their original location" msgstr "kan ikke kopiere midlertidige filer tilbage til deres originale placering" -#: src/sudo_edit.c:867 +#: src/sudo_edit.c:917 msgid "unable to copy some of the temporary files back to their original location" msgstr "kan ikke kopiere nogle af de midlertidige filer tilbage til deres originale placering" -#: src/sudo_edit.c:911 +#: src/sudo_edit.c:961 #, c-format msgid "unable to change uid to root (%u)" msgstr "kunne ikke ændre uid til root (%u)" -#: src/sudo_edit.c:928 +#: src/sudo_edit.c:978 msgid "plugin error: missing file list for sudoedit" msgstr "fejl i udvidelsesmodul: mangler filliste for sudoedit" -#: src/sudo_edit.c:969 src/sudo_edit.c:982 +#: src/sudo_edit.c:1019 src/sudo_edit.c:1032 msgid "unable to read the clock" msgstr "kunne ikke læse uret" @@ -839,44 +844,29 @@ msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "intet askpass-program angivet, forsøg at angive SUDO_ASKPASS" -#: src/tgetpass.c:270 +#: src/tgetpass.c:261 #, c-format msgid "unable to set gid to %u" msgstr "kan ikke angive gid til %u" -#: src/tgetpass.c:274 +#: src/tgetpass.c:265 #, c-format msgid "unable to set uid to %u" msgstr "kan ikke angive uid til %u" -#: src/tgetpass.c:279 +#: src/tgetpass.c:270 #, c-format msgid "unable to run %s" msgstr "kan ikke køre %s" -#: src/utmp.c:266 +#: src/utmp.c:268 msgid "unable to save stdin" msgstr "kan ikke gemme til stdin" -#: src/utmp.c:268 +#: src/utmp.c:270 msgid "unable to dup2 stdin" msgstr "kan ikke dup2 stdin" -#: src/utmp.c:271 +#: src/utmp.c:273 msgid "unable to restore stdin" msgstr "kan ikke gendanne stdin" - -#~ msgid "unable to set terminal to raw mode" -#~ msgstr "kunne ikke angive terminal til tilstanden rå (raw)" - -#~ msgid "internal error, tried allocate zero bytes" -#~ msgstr "intern fejl, forsøgte at allokere nul byte" - -#~ msgid "unable to open socket" -#~ msgstr "kunne ikke åbne sokkel" - -#~ msgid "%s: %s: %s\n" -#~ msgstr "%s: %s: %s\n" - -#~ msgid "%s: %s\n" -#~ msgstr "%s: %s\n" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/de.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/de.mo differ diff -Nru sudo-1.8.19p1/po/de.po sudo-1.8.20p2/po/de.po --- sudo-1.8.19p1/po/de.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/de.po 2017-05-10 15:38:43.000000000 +0000 @@ -2,13 +2,13 @@ # This file is distributed under the same license as the sudo package. # # Jakob Kramer , 2012, 2013, 2014. -# Mario Blättermann , 2012, 2014-2016. +# Mario Blättermann , 2012, 2014-2017. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 21:35+0100\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 21:25+0200\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" @@ -17,7 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Poedit 1.8.12\n" #: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" @@ -34,36 +34,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "Speicher konnte nicht zugewiesen werden" @@ -72,18 +73,18 @@ msgid "Unknown signal" msgstr "Unbekanntes Signal" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ungültiger Wert" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "Wert zu groß" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "Wert zu klein" @@ -137,85 +138,89 @@ msgid "unable to open %s" msgstr "%s konnte nicht geöffnet werden" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "Handler für Signal %d konnte nicht gesetzt werden" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "Es konnte nicht geforkt werden" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "PRIV_PROC_EXEC konnte nicht von PRIV_LIMIT entfernt werden" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "Fehler beim Lesen der Signal-Pipe" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "Fehler beim Lesen des Socket-Paars" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "Unerwarteter Antworttyp auf Rückmeldungskanal: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "Ereignis konnte nicht zur Warteschlange hinzugefügt werden" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "Sockets konnten nicht hergestellt werden" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "Weiterleitung konnte nicht erstellt werden" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "Es konnte nicht geforkt werden" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "TTY-Kennzeichnung konnte nicht wiederhergestellt werden" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "Regelwerks-Plugin konnte Sitzung nicht initialisieren" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "Fehler in Ereignisschleife" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "TTY-Kennzeichnung konnte nicht wiederhergestellt werden" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "Handler für Signal %d konnte nicht wiederhergestellt werden" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "Fehler beim Lesen der Signal-Pipe" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "PRIV_PROC_EXEC konnte nicht von PRIV_LIMIT entfernt werden" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "PTY konnte nicht vergeben werden" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "Weiterleitung konnte nicht erstellt werden" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "Fehler beim Lesen der Pipe" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "Fehler beim Lesen des Socket-Paars" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "Unerwarteter Antworttyp auf Rückmeldungskanal: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "Sockets konnten nicht hergestellt werden" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -284,48 +289,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "Das Regelwerks-Plugin %s enthält keine check_policy-Methode" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "Interner Fehler: %s-Überlauf" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "Das Argument für -C muss eine Zahl größer oder gleich 3 sein" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "Die Optionen »-i« und »-s« können nicht gemeinsam benutzt werden" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "Die Optionen »-i« und »-E« können nicht gemeinsam benutzt werden" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "Die Option »-E« ist im Bearbeiten-Modus ungültig" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "Im Bearbeiten-Modus können keine Umgebungsvariablen gesetzt werden" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "Die »-U«-Option kann nur zusammen mit »-l« benutzt werden" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "Die Optionen »-A« und »-S« können nicht gemeinsam benutzt werden" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ist auf dieser Plattform nicht verfügbar" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Nur eine der Optionen -e, -h, -i, -K, -l, -s, -v oder -V darf angegeben werden" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -334,7 +339,7 @@ "%s - Dateien als anderer Benutzer verändern\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -343,7 +348,7 @@ "%s - Einen Befehl als anderer Benutzer ausführen\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -352,111 +357,115 @@ "\n" "Optionen:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "Hilfsprogramm zum Eingeben des Passworts verwenden" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "Angegebenen BSD-Legitimierungstypen verwenden" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "Befehl im Hintergrund ausführen" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "Alle Dateideskriptoren >= num schließen" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "Befehl unter angegebener Login-Klasse ausführen" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "Benutzerumgebung beim Starten des Befehls beibehalten" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "Dateien bearbeiten, statt einen Befehl auszuführen" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "Befehl unter angegebenem Gruppennamen oder Gruppen-ID ausführen" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "HOME-Variable als Home-Verzeichnis des Zielbenutzers setzen" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "Hilfe ausgeben und beenden" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "Befehl auf entferntem System ausführen (falls vom Plugin unterstützt)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "Anmeldeshell als Zielbenutzer starten; es kann auch ein Befehl angegeben werden" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "Zeitstempeldateien komplett entfernen" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "Zeitstempeldatei ungültig machen" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "Benutzerrechte aufzählen oder einen bestimmten Befehl testen; für ein längeres Format zweimal angeben" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "Nicht-interaktiver Modus, es werden keine Prompts verwendet" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "Gruppen-Vektor beibehalten, statt auf den des Zielbenutzers zu setzen" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "Angegebenen Passwort-Prompt benutzen" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "SELinux-Sicherheitskontext mit angegebener Funktion erstellen" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "Passwort von der Standardeingabe lesen" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "Shell als Zielbenutzer ausführen; es kann auch ein Befehl angegeben werden" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "SELinux-Sicherheitskontext mit angegebenem Typ erstellen" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "Befehlausführung nach der angegebenen Zeitbegrenzung abbrechen" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "im Aufzählungsmodus, Rechte des Benutzers anzeigen" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "Befehl oder Datei unter angegebenem Benutzernamen oder Benutzer-ID ausführen bzw. ändern" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "Versionsinformation anzeigen und beenden" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "Den Zeitstempel des Benutzers erneuern, ohne einen Befehl auszuführen" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "Aufhören, die Befehlszeilenargumente zu verarbeiten" @@ -570,7 +579,7 @@ msgid "unable to run %s as a login shell" msgstr "%s konnte nicht als Anmeldeshell ausgeführt werden" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "%s konnte nicht ausgeführt werden" @@ -655,97 +664,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "Unerwarteter sudo-Modus 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "Gruppenvektor konnte nicht geholt werden" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "Unbekannte UID %u: Wer sind Sie?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "TTY konnte nicht ermittelt werden" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s muss dem Benutzer mit UID %d gehören und das »setuid«-Bit gesetzt haben" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "Effektive UID ist nicht %d. Liegt %s auf einem Dateisystem mit gesetzter »nosuid«-Option oder auf einem NFS-Dateisystem ohne Root-Rechte?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "Effektive UID ist nicht %d. Wurde sudo mit »setuid root« installiert?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "Zusätzliche Gruppenkennungen konnten nicht gesetzt werden" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "Effektive GID konnte nicht auf »runas«-GID %u gesetzt werden" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID konnte nicht auf »runas«-GID %u gesetzt werden" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "Unbekannte Anmeldungsklasse %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "Benutzerkontext konnte nicht gesetzt werden" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "Prozesspriorität konnte nicht gesetzt werden" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "Wurzelverzeichnis konnte nicht zu %s geändert werden" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "Es konnte nicht zu »runas«-GID gewechselt werden (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "In Verzeichnis »%s« konnte nicht gewechselt werden" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "Unerwartete Abbruchbedingung eines Unterprozesses: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "Dem Regelwerks-Plugin %s fehlt die »check_policy«-Methode" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "Regelwerks-Plugin %s unterstützt das Auflisten von Privilegien nicht" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "Regelwerks-Plugin %s unterstützt die Option -v nicht" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "Regelwerks-Plugin %s unterstützt die Optionen -k und -K nicht" @@ -867,3 +876,6 @@ #: src/utmp.c:273 msgid "unable to restore stdin" msgstr "Standardeingabe konnte nicht wiederhergestellt werden" + +#~ msgid "error reading from pipe" +#~ msgstr "Fehler beim Lesen der Pipe" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/eo.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/eo.mo differ diff -Nru sudo-1.8.19p1/po/eo.po sudo-1.8.20p2/po/eo.po --- sudo-1.8.19p1/po/eo.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/po/eo.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,69 +1,69 @@ # Esperanto translations for sudo package. # This file is put in the public domain. -# Felipe Castro , 2013, 2014, 2015, 2016. +# Felipe Castro , 2013, 2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.16b1\n" +"Project-Id-Version: sudo 1.8.19b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-02-19 15:48-0700\n" -"PO-Revision-Date: 2016-03-04 15:30-0300\n" +"POT-Creation-Date: 2016-11-21 17:45-0700\n" +"PO-Revision-Date: 2017-01-25 12:28-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.5.4\n" -#: lib/util/aix.c:85 lib/util/aix.c:164 +#: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" msgstr "ne eblas malfermi la uzanto-datumbazon" -#: lib/util/aix.c:219 +#: lib/util/aix.c:227 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "ne eblas ŝanĝiĝi al registrejo \"%s\" por %s" -#: lib/util/aix.c:244 +#: lib/util/aix.c:252 msgid "unable to restore registry" msgstr "ne eblas restarigi registrejon" -#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 -#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 -#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 #: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 -#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 -#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 -#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 -#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 -#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 -#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 -#: src/sudo_edit.c:925 src/sudo_edit.c:945 +#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 +#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 +#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 +#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 +#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 +#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 +#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 +#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 +#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 +#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 +#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 +#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 -#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 -#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 -#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 +#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 +#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 #: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 #: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 -#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 -#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 -#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 -#: src/sudo_edit.c:925 src/sudo_edit.c:945 +#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 +#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 +#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 +#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "ne eblas generi memoron" @@ -71,117 +71,118 @@ msgid "Unknown signal" msgstr "Nekonata signalo" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 #: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "nevalida valoro" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 #: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valoro tro grandas" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 #: lib/util/strtonum.c:182 msgid "value too small" msgstr "valoro tro malgrandas" -#: lib/util/sudo_conf.c:223 +#: lib/util/sudo_conf.c:203 #, c-format -msgid "invalid Path value `%s' in %s, line %u" -msgstr "nevalida voja valoro '%s' en %s, linio %u" +msgid "invalid Path value \"%s\" in %s, line %u" +msgstr "nevalida voja valoro \"%s\" en %s, linio %u" -#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 +#: lib/util/sudo_conf.c:369 lib/util/sudo_conf.c:422 #, c-format -msgid "invalid value for %s `%s' in %s, line %u" -msgstr "nevalida valoro por %s '%s' en %s, linio %u" +msgid "invalid value for %s \"%s\" in %s, line %u" +msgstr "nevalida valoro por %s \"%s\" en %s, linio %u" -#: lib/util/sudo_conf.c:410 +#: lib/util/sudo_conf.c:390 #, c-format -msgid "unsupported group source `%s' in %s, line %u" -msgstr "nekomprenata grupa fonto '%s' en %s, linio %u" +msgid "unsupported group source \"%s\" in %s, line %u" +msgstr "nekomprenata grupa fonto \"%s\" en %s, linio %u" -#: lib/util/sudo_conf.c:426 +#: lib/util/sudo_conf.c:406 #, c-format -msgid "invalid max groups `%s' in %s, line %u" -msgstr "nevalidaj maksimumaj grupoj '%s' en %s, linio %u" +msgid "invalid max groups \"%s\" in %s, line %u" +msgstr "nevalidaj maksimumaj grupoj \"%s\" en %s, linio %u" -#: lib/util/sudo_conf.c:585 +#: lib/util/sudo_conf.c:561 #, c-format msgid "unable to stat %s" msgstr "ne eblas trovi je %s" -#: lib/util/sudo_conf.c:588 +#: lib/util/sudo_conf.c:564 #, c-format msgid "%s is not a regular file" msgstr "%s estas ne regula dosiero" -#: lib/util/sudo_conf.c:591 +#: lib/util/sudo_conf.c:567 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s estas estrata de uid %u, devas esti %u" -#: lib/util/sudo_conf.c:595 +#: lib/util/sudo_conf.c:571 #, c-format msgid "%s is world writable" msgstr "%s estas skribebla de ĉiuj" -#: lib/util/sudo_conf.c:598 +#: lib/util/sudo_conf.c:574 #, c-format msgid "%s is group writable" msgstr "%s estas skribebla de la tuta grupo" -#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 +#: lib/util/sudo_conf.c:584 src/selinux.c:201 src/selinux.c:213 src/sudo.c:366 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi %s" -#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 -#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 -#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 -#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 -#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 -#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 -#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 -#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 -#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 +#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 +#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 +#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 +#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 +#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 +#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 +#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 +#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 +#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "ne eblas difini traktilon por la signalo %d" -#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 +#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 msgid "unable to fork" msgstr "ne eblas forki" -#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 -#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 -#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 -#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 +#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 +#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 +#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 +#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 +#: src/exec_pty.c:1510 msgid "unable to add event to queue" msgstr "ne eblas aldoni al la atendovico eventon" -#: src/exec.c:392 +#: src/exec.c:391 msgid "unable to create sockets" msgstr "ne eblas krei konektingojn" -#: src/exec.c:447 +#: src/exec.c:446 msgid "policy plugin failed session initialization" msgstr "konduta kromprogramo fiaskis dum seanca komenciĝo" -#: src/exec.c:492 +#: src/exec.c:491 msgid "error in event loop" msgstr "eraro en la eventa iteracio" -#: src/exec.c:510 +#: src/exec.c:509 msgid "unable to restore tty label" msgstr "ne eblis reatingi tty-etikedon" -#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 +#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "ne eblas restarigi traktilon por la signalo %d" -#: src/exec.c:721 src/exec_pty.c:1180 +#: src/exec.c:726 src/exec_pty.c:1236 msgid "error reading from signal pipe" msgstr "eraro dum legi la signalan tubon" @@ -193,25 +194,25 @@ msgid "unable to allocate pty" msgstr "ne eblis generi pty-on" -#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 -#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 +#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 +#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 msgid "unable to create pipe" msgstr "ne eblas krei tubon" -#: src/exec_pty.c:1213 +#: src/exec_pty.c:1269 msgid "error reading from pipe" msgstr "eraro dum legi el tubo" -#: src/exec_pty.c:1238 +#: src/exec_pty.c:1296 msgid "error reading from socketpair" msgstr "eraro dum legi la konektingan paron" -#: src/exec_pty.c:1247 +#: src/exec_pty.c:1305 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "neatendita respondotipo ĉe la postkanalo: %d" -#: src/exec_pty.c:1349 +#: src/exec_pty.c:1407 msgid "unable to set controlling tty" msgstr "ne eblas elekti la regan tty-on" @@ -220,8 +221,8 @@ #: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 #: src/load_plugins.c:191 #, c-format -msgid "error in %s, line %d while loading plugin `%s'" -msgstr "eraro en %s, linio %d dum ŝargi kromprogramon '%s'" +msgid "error in %s, line %d while loading plugin \"%s\"" +msgstr "eraro en %s, linio %d dum ŝargi kromprogramon \"%s\"" #: src/load_plugins.c:87 #, c-format @@ -245,8 +246,8 @@ #: src/load_plugins.c:180 #, c-format -msgid "unable to find symbol `%s' in %s" -msgstr "ne eblas trovi simbolon '%s' en %s" +msgid "unable to find symbol \"%s\" in %s" +msgstr "ne eblas trovi simbolon \"%s\" en %s" #: src/load_plugins.c:187 #, c-format @@ -256,33 +257,33 @@ #: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "malkongrua granda eldono %d de kromprogramo (estu %d) trovita en %s" +msgstr "malkongrua granda versio %d de kromprogramo (atendite %d) trovita en %s" #: src/load_plugins.c:202 #, c-format -msgid "ignoring policy plugin `%s' in %s, line %d" -msgstr "ignoranta kondutan kromprogramon '%s' en %s, linio %d" +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "ni malatentas kondutan kromprogramon \"%s\" en %s, linio %d" #: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" -msgstr "nur unu konduta kromprogramo eblas specifiĝi" +msgstr "nur unu konduta kromprogramo povas esti indikata" #: src/load_plugins.c:207 #, c-format -msgid "ignoring duplicate policy plugin `%s' in %s, line %d" -msgstr "ignoranta duobligantan kondutan kromprogramon '%s' en %s, linio %d" +msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" +msgstr "ni malatentas duobligantan kondutan kromprogramon \"%s\" en %s, linio %d" #: src/load_plugins.c:228 #, c-format -msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" -msgstr "ignoranta duobligitan eneligan kromprogramon '%s' en %s, linio %d" +msgid "ignoring duplicate I/O plugin \"%s\" in %s, line %d" +msgstr "ni malatentas duobligitan eneligan kromprogramon \"%s\" en %s, linio %d" #: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "konduta kromprogramo %s ne inkluzivas la metodon check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 #, c-format msgid "internal error, %s overflow" msgstr "interna eraro, superfluo en %s" @@ -315,15 +316,15 @@ msgid "the `-A' and `-S' options may not be used together" msgstr "'-A' kaj '-S' ne eblas uziĝi kune" -#: src/parse_args.c:504 +#: src/parse_args.c:510 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ne estas havebla en ĉi tiu platformon" -#: src/parse_args.c:577 +#: src/parse_args.c:583 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Vi rajtas specifi nur unu el -e, -h, -i, -K, -l, -s, -v aŭ -V" -#: src/parse_args.c:591 +#: src/parse_args.c:597 #, c-format msgid "" "%s - edit files as another user\n" @@ -332,7 +333,7 @@ "%s - redakti dosierojn kiel alia uzanto\n" "\n" -#: src/parse_args.c:593 +#: src/parse_args.c:599 #, c-format msgid "" "%s - execute a command as another user\n" @@ -341,7 +342,7 @@ "%s - plenumigi komandon kiel alia uzanto\n" "\n" -#: src/parse_args.c:598 +#: src/parse_args.c:604 #, c-format msgid "" "\n" @@ -350,198 +351,202 @@ "\n" "Parametroj:\n" -#: src/parse_args.c:600 +#: src/parse_args.c:606 msgid "use a helper program for password prompting" msgstr "uzi helpoprogrogramon por pasvortilo" -#: src/parse_args.c:603 +#: src/parse_args.c:609 msgid "use specified BSD authentication type" msgstr "uzi specifitan BSD-konstatan tipon" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "run command in the background" msgstr "plenumigi komandon fone" -#: src/parse_args.c:608 +#: src/parse_args.c:614 msgid "close all file descriptors >= num" msgstr "fermi ĉiujn dosierpriskribilojn >= numeron" -#: src/parse_args.c:611 +#: src/parse_args.c:617 msgid "run command with the specified BSD login class" msgstr "plenumigi komandon per specifita BSD-ensaluta klaso" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "preserve user environment when running command" msgstr "konservi uzanto-medivariablojn dum plenumigi komandon" -#: src/parse_args.c:616 +#: src/parse_args.c:622 msgid "edit files instead of running a command" msgstr "redakti dosierojn anstataŭ plenumigi komandon" -#: src/parse_args.c:618 +#: src/parse_args.c:624 msgid "run command as the specified group name or ID" msgstr "plenumigi komandon kiel la specifitan grupnomon aŭ identigilon" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "set HOME variable to target user's home dir" msgstr "valorizi medivariablon HOME je la hejma dosierujo de la cela uzanto" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "display help message and exit" msgstr "elmontri helpan mesaĝon kaj eliri" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command on host (if supported by plugin)" msgstr "plenumigi komandon en gastiganto (se permesata de kromprogramo)" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "run login shell as the target user; a command may also be specified" msgstr "plenumigi ensalutan ŝelon kiel celan uzanton; komando ankaŭ enmeteblas" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "remove timestamp file completely" msgstr "tute forigi tempo-indikilan dosieron" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "invalidate timestamp file" msgstr "eksvalidigi tempo-indikilan dosieron" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "listigi privilegiojn de la uzanto aŭ kontroli specifan komandon; uzu dufoje por pli longa formato" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "non-interactive mode, no prompts are used" msgstr "neinteraga reĝimo, ne demandos al uzanto" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "preserve group vector instead of setting to target's" msgstr "konservi grupan vektoron anstataŭ elekti celan" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "use the specified password prompt" msgstr "uzi specifitan pasvortilon" -#: src/parse_args.c:641 +#: src/parse_args.c:647 msgid "create SELinux security context with specified role" msgstr "krei SELinux-sekurecan kuntekston kun specifita rolo" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "read password from standard input" msgstr "legi pasvorton el norma enigo" -#: src/parse_args.c:646 +#: src/parse_args.c:652 msgid "run shell as the target user; a command may also be specified" msgstr "plenumigi ŝelon kiel cela uzanto; komando ankaŭ specifebla" -#: src/parse_args.c:649 +#: src/parse_args.c:655 msgid "create SELinux security context with specified type" msgstr "krei SELinux-sekurecan kuntekston kun specifita rolo" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "in list mode, display privileges for user" msgstr "en lista reĝimo elmontri privilegiojn por uzanto" -#: src/parse_args.c:654 +#: src/parse_args.c:660 msgid "run command (or edit file) as specified user name or ID" msgstr "plenumigi komandon (aŭ redakti dosieron) kiel specifita uzanto" -#: src/parse_args.c:656 +#: src/parse_args.c:662 msgid "display version information and exit" msgstr "elmontri eldonan informon kaj eliri" -#: src/parse_args.c:658 +#: src/parse_args.c:664 msgid "update user's timestamp without running a command" msgstr "ĝisdatigi la tempo-indikilon de la uzanto, sed ne plenumigi komandon" -#: src/parse_args.c:660 +#: src/parse_args.c:666 msgid "stop processing command line arguments" msgstr "ĉesigi procedi komandliniajn parametrojn" -#: src/selinux.c:78 +#: src/selinux.c:77 msgid "unable to open audit system" msgstr "ne eblas malfermi aŭdan sistemon" -#: src/selinux.c:88 +#: src/selinux.c:87 msgid "unable to send audit message" msgstr "ne eblas sendi aŭdan mesaĝon" -#: src/selinux.c:116 +#: src/selinux.c:115 #, c-format msgid "unable to fgetfilecon %s" msgstr "ne eblas voki fgetfilecon %s" -#: src/selinux.c:121 +#: src/selinux.c:120 #, c-format msgid "%s changed labels" msgstr "%s ŝanĝis etikedojn" -#: src/selinux.c:126 +#: src/selinux.c:125 #, c-format msgid "unable to restore context for %s" msgstr "ne eblas restarigi kuntekston por %s" -#: src/selinux.c:166 +#: src/selinux.c:165 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "ne eblas malfermi %s, ne remarkanta tty-on" -#: src/selinux.c:175 +#: src/selinux.c:173 msgid "unable to get current tty context, not relabeling tty" msgstr "ne eblas akiri aktualan tty-kuntekston, ne remarkanta" -#: src/selinux.c:182 +#: src/selinux.c:180 +msgid "unknown security class \"chr_file\", not relabeling tty" +msgstr "nekonata sekurecan klason \"chr_file\", ni ne remarkas tty" + +#: src/selinux.c:185 msgid "unable to get new tty context, not relabeling tty" -msgstr "ne eblas akiri novan tty-kuntekston, ne remarkanta" +msgstr "ne eblas akiri novan tty-kuntekston, ni ne remarkas tty" -#: src/selinux.c:189 +#: src/selinux.c:192 msgid "unable to set new tty context" msgstr "ne eblas elekti novan tty-kuntekston" -#: src/selinux.c:255 +#: src/selinux.c:256 #, c-format msgid "you must specify a role for type %s" msgstr "vi devas specifi rolon por tipon %s" -#: src/selinux.c:261 +#: src/selinux.c:262 #, c-format msgid "unable to get default type for role %s" msgstr "ne eblas akiri aŭtomatan tipon por rolo %s" -#: src/selinux.c:279 +#: src/selinux.c:280 #, c-format msgid "failed to set new role %s" msgstr "malsukcesis elekti novan rolon %s" -#: src/selinux.c:283 +#: src/selinux.c:284 #, c-format msgid "failed to set new type %s" msgstr "malsukcesis elekti novan tipon %s" -#: src/selinux.c:295 +#: src/selinux.c:296 #, c-format msgid "%s is not a valid context" msgstr "%s ne estas valida kunteksto" -#: src/selinux.c:330 +#: src/selinux.c:331 msgid "failed to get old_context" msgstr "malsukcesis je old_context" -#: src/selinux.c:336 +#: src/selinux.c:337 msgid "unable to determine enforcing mode." msgstr "ne povas determini eldevigan reĝimon." -#: src/selinux.c:353 +#: src/selinux.c:354 #, c-format msgid "unable to set tty context to %s" msgstr "ne eblas agordi tty-kuntekston al %s" -#: src/selinux.c:392 +#: src/selinux.c:393 #, c-format msgid "unable to set exec context to %s" msgstr "ne eblas elekti exec-kuntekston al %s" -#: src/selinux.c:399 +#: src/selinux.c:400 #, c-format msgid "unable to set key creation context to %s" msgstr "ne eblas elekti kuntekston de kreo de ŝlosilo al %s" @@ -560,12 +565,12 @@ msgid "unable to run %s as a login shell" msgstr "ne eblas lanĉi %s kiel ensalut-ŝelo" -#: src/sesh.c:125 src/sudo.c:1274 +#: src/sesh.c:125 src/sudo.c:1297 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" -#: src/signal.c:68 +#: src/signal.c:69 #, c-format msgid "unable to save handler for signal %d" msgstr "ne eblas konservi traktilon por la signalo %d" @@ -631,21 +636,21 @@ msgid "unable to initialize policy plugin" msgstr "ne eblas komenci konduktan kromprogramon" -#: src/sudo.c:276 +#: src/sudo.c:274 msgid "plugin did not return a command to execute" msgstr "kromprogramo ne liveris komandon por plenumi" -#: src/sudo.c:292 +#: src/sudo.c:290 #, c-format msgid "error initializing I/O plugin %s" msgstr "eraro dum komenci eneligan kromprogramon %s" -#: src/sudo.c:318 +#: src/sudo.c:316 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "neatendita sudo-reĝimon 0x%x" -#: src/sudo.c:461 +#: src/sudo.c:460 msgid "unable to get group vector" msgstr "ne eblas elekti grupan vektoron" @@ -654,168 +659,172 @@ msgid "unknown uid %u: who are you?" msgstr "nekonata uid %u: kiu vi estas?" -#: src/sudo.c:859 +#: src/sudo.c:578 +msgid "unable to determine tty" +msgstr "ne eblas determini tty-on" + +#: src/sudo.c:866 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" -msgstr "%s devas esti estrita de uid %d kaj la setuid-bito devas esti elektita" +msgstr "%s devas esti posedata de uid %d kaj la setuid-bito devas esti markita" -#: src/sudo.c:862 +#: src/sudo.c:869 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "efektiva uid ne estas %d; ĉu %s estas en dosiersistemo kun la elekto 'nosuid' aŭ reta dosiersistemo sen ĉefuzanto-privilegioj?" -#: src/sudo.c:868 +#: src/sudo.c:875 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "efektiva uid ne estas %d; ĉu sudo estas instalita kiel setuid-radiko?" -#: src/sudo.c:999 -#, c-format -msgid "unknown login class %s" -msgstr "nekonata ensaluta klaso %s" - -#: src/sudo.c:1012 -msgid "unable to set user context" -msgstr "ne eblas elekti uzanto-kuntekston" - -#: src/sudo.c:1026 +#: src/sudo.c:956 msgid "unable to set supplementary group IDs" msgstr "ne eblas elekti suplementajn grupajn identigilojn" -#: src/sudo.c:1033 +#: src/sudo.c:963 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "ne eblas elekti efikan gid-on al plenumigkiela gid %u" -#: src/sudo.c:1039 +#: src/sudo.c:969 #, c-format msgid "unable to set gid to runas gid %u" msgstr "ne eblas elekti gid-on kiel plenumigkielan gid-on %u" -#: src/sudo.c:1046 +#: src/sudo.c:1040 +#, c-format +msgid "unknown login class %s" +msgstr "nekonata ensaluta klaso %s" + +#: src/sudo.c:1053 +msgid "unable to set user context" +msgstr "ne eblas elekti uzanto-kuntekston" + +#: src/sudo.c:1069 msgid "unable to set process priority" msgstr "ne eblas elekti procezan prioritaton" -#: src/sudo.c:1054 +#: src/sudo.c:1077 #, c-format msgid "unable to change root to %s" msgstr "ne eblas ŝanĝi ĉefuzanton al %s" -#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 +#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "ne eblas ŝanĝi al plenumigkiela uid (%u, %u)" -#: src/sudo.c:1098 +#: src/sudo.c:1121 #, c-format msgid "unable to change directory to %s" msgstr "ne eblas ŝanĝi dosierujon al %s" -#: src/sudo.c:1156 +#: src/sudo.c:1179 #, c-format msgid "unexpected child termination condition: %d" msgstr "neatendita ido ekzekutiĝis laŭ la kondiĉo: %d" -#: src/sudo.c:1302 +#: src/sudo.c:1325 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "konduta kromprogramo %s ne inkluzivas la metodon 'check_policy'" -#: src/sudo.c:1320 +#: src/sudo.c:1343 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "konduta kromprogramo %s ne komprenas listigon de privilegioj" -#: src/sudo.c:1337 +#: src/sudo.c:1360 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "konduta kromprogramo %s ne komprenas la parametron -v" -#: src/sudo.c:1352 +#: src/sudo.c:1375 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "konduta kromprogramo %s ne komprenas la parametrojn -k kaj -K" -#: src/sudo_edit.c:181 +#: src/sudo_edit.c:181 src/sudo_edit.c:270 msgid "unable to restore current working directory" msgstr "ne eblas restarigi nune kurantan dosierujon" -#: src/sudo_edit.c:526 src/sudo_edit.c:630 +#: src/sudo_edit.c:577 src/sudo_edit.c:689 #, c-format msgid "%s: not a regular file" msgstr "%s: ne regula dosiero" -#: src/sudo_edit.c:533 +#: src/sudo_edit.c:584 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: redakto de simbolaj ligoj ne estas permesata" -#: src/sudo_edit.c:536 +#: src/sudo_edit.c:587 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: redakto de dosieroj en skribebla dosierujo ne estas permesata" -#: src/sudo_edit.c:567 src/sudo_edit.c:669 +#: src/sudo_edit.c:620 src/sudo_edit.c:728 #, c-format msgid "%s: short write" msgstr "%s: mallonga skribado" -#: src/sudo_edit.c:631 +#: src/sudo_edit.c:690 #, c-format msgid "%s left unmodified" msgstr "%s restas ne modifita" -#: src/sudo_edit.c:644 src/sudo_edit.c:830 +#: src/sudo_edit.c:703 src/sudo_edit.c:889 #, c-format msgid "%s unchanged" msgstr "%s ne ŝanĝita" -#: src/sudo_edit.c:658 src/sudo_edit.c:680 +#: src/sudo_edit.c:717 src/sudo_edit.c:739 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" -#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 -#: src/sudo_edit.c:855 src/sudo_edit.c:859 +#: src/sudo_edit.c:718 src/sudo_edit.c:737 src/sudo_edit.c:740 +#: src/sudo_edit.c:914 src/sudo_edit.c:918 #, c-format msgid "contents of edit session left in %s" msgstr "enhavo de redakta seanco restas en %s" -#: src/sudo_edit.c:677 +#: src/sudo_edit.c:736 msgid "unable to read temporary file" msgstr "ne eblas legi provizoran dosieron" -#: src/sudo_edit.c:760 +#: src/sudo_edit.c:819 msgid "sesh: internal error: odd number of paths" msgstr "sesh: interna eraro: malpara nombro da vojoj" -#: src/sudo_edit.c:762 +#: src/sudo_edit.c:821 msgid "sesh: unable to create temporary files" msgstr "sesh: ne eblas krei provizorajn dosierojn" -#: src/sudo_edit.c:764 src/sudo_edit.c:862 +#: src/sudo_edit.c:823 src/sudo_edit.c:921 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nekonata eraro %d" -#: src/sudo_edit.c:854 +#: src/sudo_edit.c:913 msgid "unable to copy temporary files back to their original location" msgstr "ne eblas retrokopii provizorajn dosierojn al ilia originala loko" -#: src/sudo_edit.c:858 +#: src/sudo_edit.c:917 msgid "unable to copy some of the temporary files back to their original location" msgstr "ne eblas retrokopii kelkajn el la provizoraj dosieroj al ilia originala loko" -#: src/sudo_edit.c:901 +#: src/sudo_edit.c:961 #, c-format msgid "unable to change uid to root (%u)" msgstr "ne eblas ŝanĝi uid-on al ĉefuzanto (%u)" -#: src/sudo_edit.c:918 +#: src/sudo_edit.c:978 msgid "plugin error: missing file list for sudoedit" msgstr "kromprograma eraro: malhavas dosieran liston por sudoedit" -#: src/sudo_edit.c:959 src/sudo_edit.c:972 +#: src/sudo_edit.c:1019 src/sudo_edit.c:1032 msgid "unable to read the clock" msgstr "ne eblas legi la horloĝon" @@ -827,30 +836,30 @@ msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "neniu pasvorto-programo specifita, provi valorizi SUDO_ASKPASS-on" -#: src/tgetpass.c:276 +#: src/tgetpass.c:261 #, c-format msgid "unable to set gid to %u" msgstr "ne eblas elekti gid-on al %u" -#: src/tgetpass.c:280 +#: src/tgetpass.c:265 #, c-format msgid "unable to set uid to %u" msgstr "ne eblas elekti uid-on al %u" -#: src/tgetpass.c:285 +#: src/tgetpass.c:270 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" -#: src/utmp.c:266 +#: src/utmp.c:268 msgid "unable to save stdin" msgstr "ne eblas konservi enigon" -#: src/utmp.c:268 +#: src/utmp.c:270 msgid "unable to dup2 stdin" msgstr "ne eblas kopii al enigo" -#: src/utmp.c:271 +#: src/utmp.c:273 msgid "unable to restore stdin" msgstr "ne eblas restarigi enigon" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/fr.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/fr.mo differ diff -Nru sudo-1.8.19p1/po/fr.po sudo-1.8.20p2/po/fr.po --- sudo-1.8.19p1/po/fr.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/fr.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,15 +1,15 @@ # Messages français pour sudo. -# Copyright (C) 2016 Free Software Foundation, Inc. +# Copyright (C) 2017 Free Software Foundation, Inc. # This file is put in the public domain. # Todd C. Miller , 2011-2013 -# Frédéric Marchal , 2016 +# Frédéric Marchal , 2017 # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 10:11+0100\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 10:49+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -34,36 +34,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "impossible d'allouer la mémoire" @@ -72,18 +73,18 @@ msgid "Unknown signal" msgstr "Signal inconnu" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valeur incorrecte" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valeur trop grande" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "valeur trop petite" @@ -137,85 +138,89 @@ msgid "unable to open %s" msgstr "impossible d'ouvrir %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "impossible de spécifier le gestionnaire pour le signal %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "erreur de fork" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "impossible de supprimer PRIV_PROC_EXEC de PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "erreur lors de la lecture du tube signal" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "erreur de lecture sur la paire de sockets" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "réponse inattendue sur le backchannel : %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "impossible d'ajouter l'événement à la queue" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "impossible de créer des sockets" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "impossible de créer le tube" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "impossible de choisir le tty de contrôle" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "erreur de fork" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "impossible de rétablir l'étiquette du tty" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "le greffon de règles a échoué lors de l'initialisation de la session" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "erreur dans la boucle des événements" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "impossible de rétablir l'étiquette du tty" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "impossible de rétablir le gestionnaire pour le signal %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "erreur lors de la lecture du tube signal" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "impossible de supprimer PRIV_PROC_EXEC de PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "impossible d'allouer le pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "impossible de créer le tube" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "erreur de lecture sur le tube" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "erreur de lecture sur la paire de sockets" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "réponse inattendue sur le backchannel : %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "impossible de choisir le tty de contrôle" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "impossible de créer des sockets" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -284,48 +289,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "le greffon de règles %s ne contient pas de méthode check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "erreur interne, débordement %s" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "l'argument à -C doit être un nombre plus grand ou égal à 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "vous ne pouvez pas spécifier les options « -i » et « -s » en même temps" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "vous ne pouvez pas spécifier les options « -i » et « -E » en même temps" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "l'option « -E » n'est pas valable en mode édition" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "vous ne pouvez pas spécifier de variable d'environnement en mode édition" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "l'option « -U » ne peut être utilisée qu'avec l'option « -l »" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "les options « -A » et « -S » ne peuvent pas être utilisées ensemble" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit n'est pas pris en charge sur cette plate-forme" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Seule une des options -e, -h, -i, -K, -l, -s, -v ou -V peut être spécifiée" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -334,7 +339,7 @@ "%s – édite les fichiers en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -343,7 +348,7 @@ "%s – exécute une commande en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -352,111 +357,115 @@ "\n" "Options:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "utiliser un programme adjoint pour demander le mot de passe" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "utiliser le type d'authentification BSD spécifié" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "exécuter la commande en arrière-plan" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "fermer tous les descripteurs de fichiers >= n°" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "exécuter la commande avec la classe de login BSD" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "préserver l'environnement de l'utilisateur en exécutant la commande" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "éditer les fichiers au lieu d'exécuter une commande" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "exécuter la commande en tant que le nom ou ID de groupe spécifié" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "assigner à la variable HOME le répertoire personnel de l'utilisateur cible" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "afficher le message d'aide et terminer" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "exécuter la commande sur l'hôte (si supporté par le greffon)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "exécuter le shell de login comme l'utilisateur cible. Une commande peut aussi être spécifiée" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "supprime complètement le fichier d'horodatage" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "invalide le fichier d'horodatage" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "afficher les privilèges de l'utilisateur ou vérifie une commande spécifique. Utilisez deux fois pour une forme plus longue" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "mode non interactif, aucune invite utilisée" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "préserve le vecteur des groupes au lieu de le changer en celui de la cible" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "utiliser l'invite de mot de passe spécifié" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "créer le contexte de sécurité SELinux avec le rôle spécifié" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "lire le mot de passe depuis l'entrée standard" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "exécuter le shell en tant que l'utilisateur cible. Une commande peut aussi être spécifiée" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "créer le contexte de sécurité SELinux avec le type spécifié" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "terminer la commande après la limite de temps spécifiée" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "en mode liste, afficher les privilèges de l'utilisateur" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "exécuter la commande (ou éditer le fichier) sous le nom d'utilisateur ou le ID spécifié" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "afficher les informations de version et terminer" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "mettre à jour l'horodatage de l'utilisateur sans exécuter de commande" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "arrêter de traiter les arguments en ligne de commande" @@ -566,7 +575,7 @@ msgid "unable to run %s as a login shell" msgstr "impossible d'exécuter %s comme un shell de login" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "impossible d'exécuter %s" @@ -651,97 +660,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "mode sudo 0x%x inattendu" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "impossible d'obtenir le vecteur de groupes" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid %u inconnu : qui êtes-vous ?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "impossible de déterminer le tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s doit être la propriété du uid %d et avoir le bit setuid mis" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "le uid effectif n'est pas %d. Est-ce que %s est sur un système de fichiers avec l'option « nosuid » ou un système de fichiers NFS sans privilèges root ?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "le uid effectif n'est pas %d. Est-ce que sudo est installé setuid root ?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "impossible d'attribuer les ID de groupe supplémentaires" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "impossible de changer le gid effectif à runas gid %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossible de changer le gid à runas gid %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "classe de login %s inconnue" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "impossible de changer le contexte utilisateur" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "impossible de changer la priorité du processus" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "impossible de changer root en %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "impossible de changer vers runas uid (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "impossible de changer le répertoire vers %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "condition de fin de l'enfant inconnue: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "le greffon de règles %s n'a pas de méthode « check_policy »" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "le greffon de règles %s ne supporte pas les privilèges de listage" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "le greffon de règles %s ne supporte pas l'option -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "le greffon de règles %s ne supporte pas les options -k/-K" @@ -864,6 +873,9 @@ msgid "unable to restore stdin" msgstr "impossible de rétablir stdin" +#~ msgid "error reading from pipe" +#~ msgstr "erreur de lecture sur le tube" + #~ msgid "unable to set terminal to raw mode" #~ msgstr "impossible de mettre le terminal en mode brut" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/hr.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/hr.mo differ diff -Nru sudo-1.8.19p1/po/hr.po sudo-1.8.20p2/po/hr.po --- sudo-1.8.19p1/po/hr.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/hr.po 2017-05-10 15:38:43.000000000 +0000 @@ -4,10 +4,10 @@ # Božidar Putanec , 2016. msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.19b1\n" +"Project-Id-Version: sudo-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 10:59-0800\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 20:52-0700\n" "Last-Translator: Božidar Putanec \n" "Language-Team: Croatian \n" "Language: hr\n" @@ -16,12 +16,14 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Poedit 1.8.9\n" "X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: ../../Downloads/sudo-1.8.20b1\n" +"X-Poedit-SearchPath-0: .\n" #: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" -msgstr "ne mogu otvoriti korisničku bazu podataka" +msgstr "ne mogu otvoriti userdb korisnika" #: lib/util/aix.c:227 #, c-format @@ -30,60 +32,61 @@ #: lib/util/aix.c:252 msgid "unable to restore registry" -msgstr "ne mogu vratiti registar" +msgstr "ne mogu obnoviti registar" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" -msgstr "ne mogu alocirati memoriju" +msgstr "ne mogu dodijeliti memoriju" #: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Nepoznat signal" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "neispravna vrijednost" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "veličina je prevelika" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "veličina je premala" @@ -100,17 +103,17 @@ #: lib/util/sudo_conf.c:390 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" -msgstr "nepodržan izvor grupe „%s” u %s, redak %u" +msgstr "nepodržani grupin izvor (group source) „%s” u %s, redak %u" #: lib/util/sudo_conf.c:406 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" -msgstr "neispravan maksimalni broj grupe „%s” u %s, redak %u" +msgstr "neispravna maksimalna veličina za grupu „%s” u %s, redak %u" #: lib/util/sudo_conf.c:561 #, c-format msgid "unable to stat %s" -msgstr "ne mogu izvršiti stat %s" +msgstr "ne mogu izvršiti stat za %s" #: lib/util/sudo_conf.c:564 #, c-format @@ -120,17 +123,17 @@ #: lib/util/sudo_conf.c:567 #, c-format msgid "%s is owned by uid %u, should be %u" -msgstr "vlasnik %s je uid %u, treba biti %u" +msgstr "vlasnik %s je uid %u, a trebao bi biti %u" #: lib/util/sudo_conf.c:571 #, c-format msgid "%s is world writable" -msgstr "%s ima dopuštenje za pisanje svih korisnika" +msgstr "svi imaju pristup k(a) %s i smiju ga mijenjati" #: lib/util/sudo_conf.c:574 #, c-format msgid "%s is group writable" -msgstr "%s ima dopuštenje za pisanje svih grupa" +msgstr "grupa ima pristup k(a) %s i smije ga mijenjati" #: lib/util/sudo_conf.c:584 src/selinux.c:201 src/selinux.c:213 src/sudo.c:366 #, c-format @@ -138,88 +141,91 @@ msgstr "ne mogu otvoriti %s" # Handler, an asynchronous callback (computer programming) subroutine in computing -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" -msgstr "za signal %d ne mogu postaviti posrednika" - -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "ne mogu razdvojiti" - -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 -msgid "unable to add event to queue" -msgstr "" -"unable to add event to queue\n" -"ne mogu dodati događaj u red" - -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "ne mogu napraviti utičnice" - -#: src/exec.c:446 -msgid "policy plugin failed session initialization" -msgstr "priključak police nije uspio inicijalizirati sjednicu" - -#: src/exec.c:491 -msgid "error in event loop" -msgstr "greška u petlji (događaja)" - -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "ne mogu vratiti tty oznaku" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 -#, c-format -msgid "unable to restore handler for signal %d" -msgstr "ne mogu iznova posredovati za signal %d" - -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "greška čitanja iz cjevovoda signala" +msgstr "za signal %d ne mogu postaviti rukovatelja" #: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "ne mogu ukloniti PRIV_PROC_EXEC iz PRIV_LIMIT" -#: src/exec_pty.c:188 -msgid "unable to allocate pty" -msgstr "ne mogu alocirati pty" - -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "ne mogu napraviti cjevovod" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "greška čitanja iz cjevovoda" +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "greška čitanja iz signalne cijevi" -#: src/exec_pty.c:1296 +#: src/exec_monitor.c:363 msgid "error reading from socketpair" -msgstr "greška čitanja iz para utičnica" +msgstr "greška čitanja iz para utičnica (socketpair)" -#: src/exec_pty.c:1305 +#: src/exec_monitor.c:372 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "neočekivana vrsta odgovora na povratnom kanalu: %d" -#: src/exec_pty.c:1407 +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 +msgid "unable to add event to queue" +msgstr "ne mogu pridodati događaj u red čekanja" + +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "ne mogu napraviti cijev" + +#: src/exec_monitor.c:562 msgid "unable to set controlling tty" msgstr "ne mogu postaviti kontrolni tty" +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "ne mogu kreirati potproces (fork)" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "ne mogu obnoviti tty oznaku" + +# initialization > inicirati > dati/davati inicijativu, pobudu; pokrenuti/pokretati, započeti/započinjati +#: src/exec_nopty.c:233 src/exec_pty.c:1240 +msgid "policy plugin failed session initialization" +msgstr "priključak propisa nije uspio inicirati sesiju" + +#: src/exec_nopty.c:281 src/exec_pty.c:1278 +msgid "error in event loop" +msgstr "greška u petlji događaja" + +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "ne mogu obnoviti rukovatelja za signal %d" + +#: src/exec_pty.c:133 +msgid "unable to allocate pty" +msgstr "ne mogu dodijeliti pty" + +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "ne mogu napraviti utičnice" + #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 #: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 @@ -241,7 +247,7 @@ #: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" -msgstr "samo vlasnik smije imati dopuštenje za pisanje %s" +msgstr "%s mora biti dostupan za pisanje samo vlasniku" #: src/load_plugins.c:172 #, c-format @@ -256,97 +262,97 @@ #: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" -msgstr "nepoznata vrsta police %d pronađena u %s" +msgstr "nepoznata vrsta propisa %d pronađena u %s" #: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "nekompatibilni priključak, inačica %d (očekujem %d) pronađen u %s" +msgstr "nekompatibilni priključak, inačica %d (očekivan %d) pronađen u %s" #: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "zanemarujem priključak „%s” u %s, redak %d" +msgstr "ignorira se priključak propisa „%s” u %s, redak %d" #: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" -msgstr "možete navesti samo jedan priključak police" +msgstr "smijete navesti samo jedan priključak propisa" #: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" -msgstr "zanemarujem duplikat priključka police „%s” u %s, redak %d" +msgstr "ignorira se duplikat priključka propisa „%s” u %s, redak %d" #: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin \"%s\" in %s, line %d" -msgstr "zanemarujem duplikat U/I priključka „%s” u %s, redak %d" +msgstr "ignorira se duplikat U/I priključka „%s” u %s, redak %d" #: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" -msgstr "priključak police %s ne uključuje metodu check_policy" +msgstr "priključak propisa %s ne uključuje metodu check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "interna greška, %s preljev" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument za -C mora biti broj veći ili jednak 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" -msgstr "ne možete navesti opcije „-i“ i „-s“ zajedno" +msgstr "ne smijete navesti opcije „-i“ i „-s“ zajedno" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" -msgstr "ne možete navesti opcije „-i“ i -„E“ zajedno" +msgstr "ne smijete navesti opcije „-i“ i -„E“ zajedno" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" -msgstr "opcija „-E“ nije ispravna u načinu uređivanja" +msgstr "opcija „-E“ nije ispravna ako uređujete (in edit mode)" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" -msgstr "ne možete navesti varijable okoline u načinu uređivanja" +msgstr "ne smijete specificirati varijable okoline ako uređujete (in edit mode)" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" -msgstr "opciju „-U“ možete koristiti samo uz opciju „-l“" +msgstr "opciju „-U“ smijete koristiti samo uz opciju „-l“" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" -msgstr "ne možete koristiti opcije „-A“ i „-S“ zajedno" +msgstr "ne smijete koristiti opcije „-A“ i „-S“ zajedno" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit nije podržan na ovoj platformi" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Smijete navesti samo jednu od opcija -e, -h, -i, -K, -l, -s, -v i -V " -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" "\n" msgstr "" -"%s - uredi datoteke kao drugi korisnik\n" +"%s - uređivanje datoteke kao drugi korisnik\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" "\n" msgstr "" -"%s - izvrši naredbu kao drugi korisnik\n" +"%s - izvršenje naredbe kao drugi korisnik\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -355,121 +361,125 @@ "\n" "Opcije:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "koristi pomoćni program za unos lozinke" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" -msgstr "upotrijebi naveden BSD-ov način autorizacije" +msgstr "rabi naveden BSD-ov način autorizacije" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "pokreni naredbu u pozadini" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "zatvori sve opisivače datoteka >= num" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "pokreni naredbu s navedenim razredom prijave" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" -msgstr "očuvaj korisničku okolinu pri izvršavanju naredbe" +msgstr "očuvaj korisnikovu okolinu pri izvršavanju naredbe" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "uredi datoteke umjesto pokretanja naredbe" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "izvrši naredbu kao navedena grupa ili ID" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" -msgstr "postavi HOME varijablu na vlastiti direktorij korisnika" +msgstr "postavi HOME varijablu da cilja vlastiti korisnikov direktorij" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" -msgstr "prikaži ovu pomoć i iziđi" +msgstr "prikaži ovu pomoć pa iziđi" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "pokreni naredbu na udaljenom sustavu (ako to priključak podržava)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" -msgstr "pokreni ljusku prijave kao ciljani korisnik; naredba se također može navesti" +msgstr "pokreni prijavnicu (login shell) kao ciljani korisnik; smije se navesti i naredba" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "potpuno ukloni datoteku vremenskih oznaka" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "učini datoteku vremenskih oznaka nevažećom" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" -msgstr "lista ovlasti korisnika ili test neke specifične naredbe; dva put za duži format" +msgstr "izlistaj ovlasti korisnika ili provjeri specifičnu naredbu; dva put za duži format" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" -msgstr "neinteraktivni način, neće ispitivati korisnika" +msgstr "ne-interaktivni način, bez pitanja za korisnika" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" -msgstr "očuvaj grupni vektor umjesto postavljanja na odredišni" +msgstr "očuvaj grupni vektor umjesto postavljanja na ciljanog korisnika" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "koristi navedeno traženje lozinke" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "stvori SELinux sigurnosni kontekst s navedenom ulogom" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "čitaj lozinku sa standardnog ulaza" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" -msgstr "pokreni ljusku kao ciljani korisnik; naredba se također može navesti" +msgstr "pokreni ljusku (shell) kao ciljani korisnik; smije se navesti i naredba" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "stvori SELinux sigurnosni kontekst s navedenom ulogom" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "završi izvršenje naredbe nakon specificiranog vremenskog ograničenja" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" -msgstr "pri ispisu, ispiši korisničke ovlasti" +msgstr "kao listu ispiši korisnikove ovlasti" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "pokreni naredbu (ili uredi datoteku) kao navedeni korisnik" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" -msgstr "prikaži informacije o inačici i iziđi" +msgstr "prikaži informacije o inačici pa iziđi" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" -msgstr "ažuriraj korisničku vremensku oznaku bez pokretanja naredbe" +msgstr "osvježi korisnikovu vremensku oznaku bez pokretanja naredbe" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" -msgstr "zaustavi obradu argumenata naredbenog retka‫" +msgstr "zaustavi obradu argumenata naredbene linije" #: src/selinux.c:77 msgid "unable to open audit system" -msgstr "ne mogu otvoriti sustav revizije" +msgstr "ne mogu otvoriti revizijski sustav" #: src/selinux.c:87 msgid "unable to send audit message" -msgstr "ne mogu poslati poruku revizije" +msgstr "ne mogu poslati revizijsku poruku" #: src/selinux.c:115 #, c-format @@ -484,7 +494,7 @@ #: src/selinux.c:125 #, c-format msgid "unable to restore context for %s" -msgstr "ne mogu vratiti kontekst za %s" +msgstr "ne mogu obnoviti kontekst za %s" #: src/selinux.c:165 #, c-format @@ -493,7 +503,7 @@ #: src/selinux.c:173 msgid "unable to get current tty context, not relabeling tty" -msgstr "ne mogu dohvatiti trenutni tty kontekst, ne mijenjam oznaku tty" +msgstr "ne mogu dohvatiti trenutačni tty kontekst, ne mijenjam oznaku tty" #: src/selinux.c:180 msgid "unknown security class \"chr_file\", not relabeling tty" @@ -534,7 +544,7 @@ #: src/selinux.c:331 msgid "failed to get old_context" -msgstr "nisam uspio dohvatiti stari kontekst (old_context)" +msgstr "nisam uspio dohvatiti old_context" #: src/selinux.c:337 msgid "unable to determine enforcing mode." @@ -567,9 +577,9 @@ #: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" -msgstr "ne mogu pokrenuti %s kao prijavnu ljusku" +msgstr "ne mogu pokrenuti %s kao prijavnicu (login shell)" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "ne mogu izvršiti %s" @@ -577,7 +587,7 @@ #: src/signal.c:69 #, c-format msgid "unable to save handler for signal %d" -msgstr "ne mogu sačuvati posrednika za signal %d" +msgstr "ne mogu sačuvati rukovatelja za signal %d" #: src/solaris.c:76 msgid "resource control limit has been reached" @@ -590,27 +600,27 @@ #: src/solaris.c:83 msgid "the invoking task is final" -msgstr "pozivanje zadatka je konačno" +msgstr "pozvani zadatak je zadnji - svršetak" #: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" -msgstr "ne mogu pridružiti projektu „%s”" +msgstr "nije uspjelo pridružiti se projektu „%s”" #: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" -msgstr "ne postoji skladište resursa koje prihvaća zadane poveznice za projekt „%s”" +msgstr "za projekt „%s” ne postoji skup resursa koji prihvaća standardne poveznice" #: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" -msgstr "ne postoji navedeno skladište resursa za projekt „%s”" +msgstr "ne postoji navedeni skup resursa za projekt „%s”" #: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" -msgstr "ne mogu povezati na zadano skladište resursa za projekt „%s”" +msgstr "poveznice sa standardnim skupom resursa za projekt „%s” nisu moguće" #: src/solaris.c:105 #, c-format @@ -620,7 +630,7 @@ #: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" -msgstr "upozorenje, zadatak upravljanja resursima nije uspio za projekt „%s”" +msgstr "upozorenje, zadatak za kontrolu resursa nije uspio za projekt „%s”" #: src/sudo.c:212 #, c-format @@ -638,116 +648,116 @@ #: src/sudo.c:230 msgid "unable to initialize policy plugin" -msgstr "ne mogu inicijalizirati priključak police" +msgstr "ne mogu inicirati priključak propisa" #: src/sudo.c:274 msgid "plugin did not return a command to execute" -msgstr "priključak nije vratio naredbu za izvršiti" +msgstr "priključak nije uzvratio naredbu za izvršenje" #: src/sudo.c:290 #, c-format msgid "error initializing I/O plugin %s" -msgstr "greška inicijalizacije U/I priključka %s" +msgstr "greška iniciranja U/I priključka %s" #: src/sudo.c:316 #, c-format msgid "unexpected sudo mode 0x%x" -msgstr "neočekivani sudo mod 0x%x" +msgstr "neočekivani sudo mode 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "ne mogu dohvatiti grupni vektor" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "nepoznat uid %u: tko ste vi?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "ne mogu odrediti tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "vlasnik %s mora biti uid %d i mora imati postavljen setuid bit" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" -msgstr "efektivni uid nije %d, je li %s na datotečnom sustavu s postavljenom opcijom „nosuid” ili NFS datotečnom sustavu bez administratorskih ovlasti?" +msgstr "efektivni uid nije %d; možda je %s na datotečnom sustavu s postavljenom opcijom „nosuid” ili NFS datotečnom sustavu bez administratorskih ovlasti?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" -msgstr "efektivni uid nije %d, je li sudo instaliran uz setuid root?" +msgstr "efektivni uid nije %d; možda sudo nije instaliran sa ‘setuid root’?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "ne mogu postaviti dopunske grupne identifikatore" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" -msgstr "ne mogu postaviti efektivni gid u runas gid %u" +msgstr "ne mogu postaviti efektivni gid u ‘runas gid’ %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" -msgstr "ne mogu postaviti gid u runas (pokreni kao) gid %u" +msgstr "ne mogu postaviti gid u ‘runas gid’ %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "nepoznat razred prijave %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" -msgstr "ne mogu postaviti korisnički kontekst" +msgstr "ne mogu postaviti korisnikov kontekst" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "ne mogu postaviti prioritet procesa" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" -msgstr "ne mogu promijeniti korijen u %s" +msgstr "ne mogu promijeniti korijen (root) u %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" -msgstr "ne mogu promijeniti u runas (pokreni kao) uid (%u, %u)" +msgstr "ne mogu promijeniti u ‘runas uid’ (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "ne mogu promijeniti direktorij u %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" -msgstr "neočekivani uvjet završavanja djeteta: %d" +msgstr "neočekivano stanje završetka podprocesa (potomka): %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" -msgstr "priključak police %s nema metodu „check_policy”" +msgstr "priključak propisa %s nema metodu „check_policy”" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" -msgstr "priključak police %s ne podržava ispis ovlasti" +msgstr "priključak propisa %s ne podržava ispis ovlasti" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" -msgstr "priključak police %s ne podržava opciju -v" +msgstr "priključak propisa %s ne podržava opciju -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" -msgstr "priključak police %s ne podržava opcije -k/-K" +msgstr "priključak propisa %s ne podržava opcije -k/-K" #: src/sudo_edit.c:181 src/sudo_edit.c:270 msgid "unable to restore current working directory" @@ -768,7 +778,7 @@ #: src/sudo_edit.c:587 #, c-format msgid "%s: editing files in a writable directory is not permitted" -msgstr "%s: datoteke u upisivom direktoriju nije dopušteno mijenjati" +msgstr "%s: datoteke nije dopušteno mijenjati u direktoriju koji dopušta pisanje" #: src/sudo_edit.c:620 src/sudo_edit.c:728 #, c-format @@ -778,12 +788,12 @@ #: src/sudo_edit.c:690 #, c-format msgid "%s left unmodified" -msgstr "%s nepromijenjen" +msgstr "%s nepreinačena" #: src/sudo_edit.c:703 src/sudo_edit.c:889 #, c-format msgid "%s unchanged" -msgstr "%s nepromijenjen" +msgstr "%s nepromijenjeno" #: src/sudo_edit.c:717 src/sudo_edit.c:739 #, c-format @@ -836,11 +846,11 @@ #: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" -msgstr "nije prisutan tty i nije naveden program za traženje lozinke" +msgstr "nije prisutan tty i nije specificiran askpass program" #: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" -msgstr "nije naveden program za traženje lozinke, pokušajte postaviti SUDO_ASKPASS" +msgstr "nije specificiran askpass program, pokušajte postaviti SUDO_ASKPASS" #: src/tgetpass.c:261 #, c-format @@ -859,15 +869,18 @@ #: src/utmp.c:268 msgid "unable to save stdin" -msgstr "ne mogu spremiti stdin" +msgstr "ne mogu sačuvati stdin" #: src/utmp.c:270 msgid "unable to dup2 stdin" -msgstr "ne mogu izvršiti dup2 stdin" +msgstr "ne mogu dup2 stdin" #: src/utmp.c:273 msgid "unable to restore stdin" -msgstr "ne mogu vratiti stdin" +msgstr "ne mogu obnoviti stdin" + +#~ msgid "error reading from pipe" +#~ msgstr "greška čitanja iz cjevovoda" #~ msgid "internal error, tried to emalloc(0)" #~ msgstr "interna greška, pokušao sam emalloc(0)" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/hu.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/hu.mo differ diff -Nru sudo-1.8.19p1/po/hu.po sudo-1.8.20p2/po/hu.po --- sudo-1.8.19p1/po/hu.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/po/hu.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,71 +1,73 @@ -# Hungarian translation of sudo -# Copyright (C) 2016. Free Software Foundation, Inc. +# Hungarian translation for sudo. +# Copyright (C) 2016, 2017 Free Software Foundation, Inc. # This file is distributed under the same license as the sudo package. # # Gabor Kelemen , 2016. +# Balázs Úr , 2017. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.15rc3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2015-10-24 06:26-0600\n" -"PO-Revision-Date: 2016-01-03 01:56+0100\n" -"Last-Translator: Gabor Kelemen \n" +"Project-Id-Version: sudo 1.8.20b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-05-03 23:56+0200\n" +"Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Launchpad-Export-Date: 2016-01-03 00:40+0000\n" -"X-Generator: Launchpad (build 17865)\n" +"X-Generator: Lokalize 1.2\n" -#: lib/util/aix.c:85 lib/util/aix.c:155 +#: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" msgstr "userdb megnyitása sikertelen" -#: lib/util/aix.c:160 +#: lib/util/aix.c:227 #, c-format msgid "unable to switch to registry \"%s\" for %s" -msgstr "" +msgstr "a(z) „%s” regisztrációs adatbázisra váltás sikertelen ennél: %s" -#: lib/util/aix.c:185 +#: lib/util/aix.c:252 msgid "unable to restore registry" msgstr "a rendszerleíró visszaállítása sikertelen" -#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 -#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 -#: lib/util/sudo_conf.c:544 src/conversation.c:75 src/exec.c:863 -#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 -#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 -#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 -#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 -#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:608 -#: src/sudo.c:627 src/sudo.c:654 src/sudo.c:663 src/sudo.c:672 src/sudo.c:689 -#: src/sudo.c:746 src/sudo.c:756 src/sudo.c:780 src/sudo.c:1160 -#: src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 src/sudo_edit.c:151 -#: src/sudo_edit.c:602 src/sudo_edit.c:699 src/sudo_edit.c:811 -#: src/sudo_edit.c:831 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 -#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 -#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:96 -#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 -#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 -#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 -#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 -#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:780 -#: src/sudo.c:1160 src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 -#: src/sudo_edit.c:151 src/sudo_edit.c:602 src/sudo_edit.c:699 -#: src/sudo_edit.c:811 src/sudo_edit.c:831 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "a memóriafoglalás sikertelen" @@ -73,259 +75,264 @@ msgid "Unknown signal" msgstr "Ismeretlen szignál" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "érvénytelen érték" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "túl magas érték" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "túl alacsony érték" -#: lib/util/sudo_conf.c:198 +#: lib/util/sudo_conf.c:203 #, c-format -msgid "invalid Path value `%s' in %s, line %u" -msgstr "" +msgid "invalid Path value \"%s\" in %s, line %u" +msgstr "érvénytelen „%s” útvonal érték a(z) %s, %u. sorában" -#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 +#: lib/util/sudo_conf.c:369 lib/util/sudo_conf.c:422 #, c-format -msgid "invalid value for %s `%s' in %s, line %u" -msgstr "" +msgid "invalid value for %s \"%s\" in %s, line %u" +msgstr "a(z) %s értéke („%s”) érvénytelen a(z) %s, %u. sorában" -#: lib/util/sudo_conf.c:385 +#: lib/util/sudo_conf.c:390 #, c-format -msgid "unsupported group source `%s' in %s, line %u" -msgstr "" +msgid "unsupported group source \"%s\" in %s, line %u" +msgstr "nem támogatott „%s” csoportforrás a(z) %s, %u. sorában" -#: lib/util/sudo_conf.c:401 +#: lib/util/sudo_conf.c:406 #, c-format -msgid "invalid max groups `%s' in %s, line %u" -msgstr "" +msgid "invalid max groups \"%s\" in %s, line %u" +msgstr "érvénytelen legnagyobb csoportok („%s”) a(z) %s, %u. sorában" -#: lib/util/sudo_conf.c:560 +#: lib/util/sudo_conf.c:561 #, c-format msgid "unable to stat %s" msgstr "%s nem érhető el" -#: lib/util/sudo_conf.c:563 +#: lib/util/sudo_conf.c:564 #, c-format msgid "%s is not a regular file" -msgstr "a(z) %s nem egy szabályos fájl" +msgstr "a(z) %s nem szabályos fájl" -#: lib/util/sudo_conf.c:566 +#: lib/util/sudo_conf.c:567 #, c-format msgid "%s is owned by uid %u, should be %u" -msgstr "" +msgstr "%s a(z) %u uid tulajdona, ennek kellene lennie: %u" -#: lib/util/sudo_conf.c:570 +#: lib/util/sudo_conf.c:571 #, c-format msgid "%s is world writable" -msgstr "" +msgstr "%s bárki számára írható" -#: lib/util/sudo_conf.c:573 +#: lib/util/sudo_conf.c:574 #, c-format msgid "%s is group writable" -msgstr "" +msgstr "%s a csoport számára írható" -#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:340 +#: lib/util/sudo_conf.c:584 src/selinux.c:201 src/selinux.c:213 src/sudo.c:366 #, c-format msgid "unable to open %s" msgstr "%s nem nyitható meg" -#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 -#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 -#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 -#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 -#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 -#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 -#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 -#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 -#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "%d szignál kezelőjének beállítása sikertelen" -#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 -msgid "unable to fork" -msgstr "" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "a PRIV_PROC_EXEC eltávolítása sikertelen a PRIV_LIMIT-ből" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "hiba a szignálcsatornából való olvasáskor" -#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 -#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 -#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 -#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "hiba a foglalatpárból való olvasáskor" + +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "váratlan választípus a visszcsatornán: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" -msgstr "" +msgstr "az esemény hozzáadása a sorhoz sikertelen" -#: src/exec.c:392 -msgid "unable to create sockets" -msgstr "" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "adatcsatorna létrehozása sikertelen" -#: src/exec.c:447 -msgid "policy plugin failed session initialization" -msgstr "" +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "a vezérlő tty beállítása sikertelen" -#: src/exec.c:492 -msgid "error in event loop" -msgstr "" +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "az elágaztatás sikertelen" -#: src/exec.c:510 +#: src/exec_monitor.c:654 src/exec_nopty.c:292 msgid "unable to restore tty label" -msgstr "" +msgstr "a tty címke visszaállítása sikertelen" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 +msgid "policy plugin failed session initialization" +msgstr "a házirendbővítménynek nem sikerült a munkamenet előkészítése" -#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 +msgid "error in event loop" +msgstr "hiba az eseményhurokban" + +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "%d szignál kezelőjének visszaállítása sikertelen" -#: src/exec.c:721 src/exec_pty.c:1176 -msgid "error reading from signal pipe" -msgstr "" - -#: src/exec_common.c:64 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" -msgstr "pty allokálása sikertelen" - -#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 -#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 -msgid "unable to create pipe" -msgstr "adatcsatorna létrehozása sikertelen" +msgstr "a pty lefoglalása sikertelen" -#: src/exec_pty.c:1209 -msgid "error reading from pipe" -msgstr "hiba az adatcsatornából olvasáskor" - -#: src/exec_pty.c:1234 -msgid "error reading from socketpair" -msgstr "" - -#: src/exec_pty.c:1243 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "" - -#: src/exec_pty.c:1345 -msgid "unable to set controlling tty" -msgstr "" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "a foglalatok létrehozása sikertelen" -#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 -#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 -#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 -#: src/load_plugins.c:184 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format -msgid "error in %s, line %d while loading plugin `%s'" -msgstr "hiba: %s, %d. sorában a(z) „%s” bővítmény betöltése közben" +msgid "error in %s, line %d while loading plugin \"%s\"" +msgstr "hiba a(z) %s, %d. sorában a(z) „%s” bővítmény betöltése közben" -#: src/load_plugins.c:82 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:118 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" -msgstr "" +msgstr "%s a(z) %d uid tulajdona kell legyen" -#: src/load_plugins.c:124 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" -msgstr "" +msgstr "%s csak a tulajdonos által írható lehet" -#: src/load_plugins.c:165 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "a(z) %s nem tölthető be: %s" -#: src/load_plugins.c:173 +#: src/load_plugins.c:180 #, c-format -msgid "unable to find symbol `%s' in %s" -msgstr "" +msgid "unable to find symbol \"%s\" in %s" +msgstr "a(z) „%s” szimbólum nem található ebben: %s" -#: src/load_plugins.c:180 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" -msgstr "" +msgstr "ismeretlen %d házirendtípus található ebben: %s" -#: src/load_plugins.c:186 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "" +msgstr "összeférhetetlen %d bővítmény főverzió (várt: %d) található ebben: %s" -#: src/load_plugins.c:195 +#: src/load_plugins.c:202 #, c-format -msgid "ignoring policy plugin `%s' in %s, line %d" -msgstr "" +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "a(z) „%s” házirendbővítmény mellőzése a(z) %s, %d. sorában" -#: src/load_plugins.c:197 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" -msgstr "" +msgstr "csak egyetlen házirendbővítmény határozható meg" -#: src/load_plugins.c:200 +#: src/load_plugins.c:207 #, c-format -msgid "ignoring duplicate policy plugin `%s' in %s, line %d" -msgstr "" +msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" +msgstr "kettőzött „%s” házirendbővítmény mellőzése a(z) %s, %d. sorában" -#: src/load_plugins.c:221 +#: src/load_plugins.c:228 #, c-format -msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" -msgstr "" +msgid "ignoring duplicate I/O plugin \"%s\" in %s, line %d" +msgstr "kettőzött „%s” I/O bővítmény mellőzése a(z) %s, %d. sorában" -#: src/load_plugins.c:324 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" -msgstr "" +msgstr "a(z) %s házirendbővítmény nem tartalmazza a „check_policy” metódust" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:449 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "belső hiba, %s túlcsordul" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "a -C kapcsoló argumentuma legyen 3, vagy ennél nagyobb szám" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "az „-i” és „-s” kapcsoló egyszerre nem használható" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "az „-i” és „-E” kapcsoló egyszerre nem használható" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "az „-E” kapcsoló nem használható szerkesztő módban" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "nem használhat környezeti változókat szerkesztő módban" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" -msgstr "az „-U” kapcsoló csak a „-l” kapcsolóval együtt alkalmazható" +msgstr "az „-U” kapcsoló csak a „-l” kapcsolóval együtt használható" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "az „-A” és „-S” kapcsoló együtt nem használható" -#: src/parse_args.c:504 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "a „sudoedit” nem támogatott ezen a rendszeren" -#: src/parse_args.c:577 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Kizárólag az -e, -h, -i, -K, -l, -s, -v vagy -V kapcsolók egyike használható" -#: src/parse_args.c:591 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -334,7 +341,7 @@ "%s - fájlok szerkesztése más felhasználóként\n" "\n" -#: src/parse_args.c:593 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -343,7 +350,7 @@ "%s - parancs végrehajtása más felhasználóként\n" "\n" -#: src/parse_args.c:598 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -352,224 +359,237 @@ "\n" "Kapcsolók:\n" -#: src/parse_args.c:600 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "segédprogram használata a jelszóbekérésre" -#: src/parse_args.c:603 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "megadott BSD hitelesítési típus használata" -#: src/parse_args.c:606 +#: src/parse_args.c:618 msgid "run command in the background" -msgstr "parancs futtatása háttérben" +msgstr "parancs futtatása a háttérben" -#: src/parse_args.c:608 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "minden fájlleíró lezárása, ami >= num" -#: src/parse_args.c:611 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "parancs futtatása a megadott BSD bejelentkezési osztállyal" -#: src/parse_args.c:614 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "felhasználói környezet megőrzése parancsfuttatáskor" -#: src/parse_args.c:616 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "fájlok szerkesztése parancs futtatása helyett" -#: src/parse_args.c:618 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "parancs futtatása megadott csoportnévként vagy -azonosítóként" -#: src/parse_args.c:620 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" -msgstr "a HOME változó beállítása a cél felhasználó saját könyvtárára" +msgstr "a HOME változó beállítása a célfelhasználó saját könyvtárára" -#: src/parse_args.c:622 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "súgóüzenet megjelenítése és kilépés" -#: src/parse_args.c:624 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" -msgstr "parancs futtatása a hoszton (ha bővítmény támogatja)" +msgstr "parancs futtatása a gépen (ha a bővítmény támogatja)" -#: src/parse_args.c:626 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" -msgstr "bejelentkezési parancsértelmező futtatása a cél felhasználóként; egy parancs is megadható" +msgstr "bejelentkezési parancsértelmező futtatása a célfelhasználóként; egy parancs is megadható" -#: src/parse_args.c:628 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "időbélyeg fájl teljes eltávolítása" -#: src/parse_args.c:630 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "időbélyeg fájl érvénytelenítése" -#: src/parse_args.c:632 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" -msgstr "felhasználó privilégiumainak kiírása, vagy adott parancs ellenőrzése, kétszer megadva hosszabb formátumban" +msgstr "felhasználó jogosultságainak felsorolása, vagy adott parancs ellenőrzése, kétszer megadva hosszabb formátumban" -#: src/parse_args.c:634 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "nem interaktív mód, kérdések nélkül" -#: src/parse_args.c:636 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "csoportvektor megőrzése a céléra beállítás helyett" -#: src/parse_args.c:638 +#: src/parse_args.c:650 msgid "use the specified password prompt" -msgstr "a megadott jelszóprompt használata" +msgstr "a megadott jelszóbekérés használata" -#: src/parse_args.c:641 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" -msgstr "SELinux biztonsági kontextus létrehozása a megadott szereppel" +msgstr "SELinux biztonsági környezet létrehozása a megadott szereppel" -#: src/parse_args.c:644 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "jelszó olvasása a szabványos bemenetről" -#: src/parse_args.c:646 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" -msgstr "parancsértelmező futtatása a cél felhasználóként; egy parancs is megadható" +msgstr "parancsértelmező futtatása a célfelhasználóként; egy parancs is megadható" -#: src/parse_args.c:649 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" -msgstr "SELinux biztonsági kontextus létrehozása a megadott típussal" +msgstr "SELinux biztonsági környezet létrehozása a megadott típussal" + +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "parancs megszakítása a megadott időkorlát után" -#: src/parse_args.c:652 +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" -msgstr "lista módban írja ki a felhasználó privilégumait" +msgstr "lista módban a felhasználó jogosultságainak megjelenítése" -#: src/parse_args.c:654 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "parancs futtatása (vagy fájl szerkesztése) a megadott nevű vagy azonosítójú felhasználóként" -#: src/parse_args.c:656 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "verzióinformáció kiírása és kilépés" -#: src/parse_args.c:658 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "felhasználó időbélyegének frissítése parancs futtatása nélkül" -#: src/parse_args.c:660 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "parancssori argumentumok feldolgozásának befejezése" -#: src/selinux.c:78 +#: src/selinux.c:77 msgid "unable to open audit system" -msgstr "" +msgstr "a felülvizsgálati rendszer megnyitása sikertelen" -#: src/selinux.c:88 +#: src/selinux.c:87 msgid "unable to send audit message" -msgstr "" +msgstr "a felülvizsgálati üzenet küldése sikertelen" -#: src/selinux.c:116 +#: src/selinux.c:115 #, c-format msgid "unable to fgetfilecon %s" -msgstr "" +msgstr "az fgetfilecon %s futtatása sikertelen" -#: src/selinux.c:121 +#: src/selinux.c:120 #, c-format msgid "%s changed labels" -msgstr "" +msgstr "%s megváltoztatta a címkéket" -#: src/selinux.c:126 +#: src/selinux.c:125 #, c-format msgid "unable to restore context for %s" -msgstr "" +msgstr "%s környezetének visszaállítása sikertelen" -#: src/selinux.c:166 +#: src/selinux.c:165 #, c-format msgid "unable to open %s, not relabeling tty" -msgstr "" +msgstr "%s nem nyitható meg, a tty nem címkézhető újra" -#: src/selinux.c:175 +#: src/selinux.c:173 msgid "unable to get current tty context, not relabeling tty" -msgstr "" +msgstr "a jelenlegi tty környezet lekérése sikertelen, a tty nem címkézhető újra" + +#: src/selinux.c:180 +msgid "unknown security class \"chr_file\", not relabeling tty" +msgstr "ismeretlen „chr_file” biztonsági osztály, a tty nem címkézhető újra" -#: src/selinux.c:182 +#: src/selinux.c:185 msgid "unable to get new tty context, not relabeling tty" -msgstr "" +msgstr "az új tty környezet lekérése sikertelen, a tty nem címkézhető újra" -#: src/selinux.c:189 +#: src/selinux.c:192 msgid "unable to set new tty context" -msgstr "" +msgstr "az új tty környezet beállítása sikertelen" -#: src/selinux.c:255 +#: src/selinux.c:256 #, c-format msgid "you must specify a role for type %s" -msgstr "" +msgstr "meg kell adnia egy szerepet a(z) %s típushoz" -#: src/selinux.c:261 +#: src/selinux.c:262 #, c-format msgid "unable to get default type for role %s" -msgstr "" +msgstr "az alapértelmezett típus lekérése sikertelen a(z) %s szerepnél" -#: src/selinux.c:279 +#: src/selinux.c:280 #, c-format msgid "failed to set new role %s" -msgstr "%s új szerep beállítása meghiúsult" +msgstr "%s új szerep beállítása nem sikerült" -#: src/selinux.c:283 +#: src/selinux.c:284 #, c-format msgid "failed to set new type %s" -msgstr "%s új típus beállítása meghiúsult" +msgstr "%s új típus beállítása nem sikerült" -#: src/selinux.c:295 +#: src/selinux.c:296 #, c-format msgid "%s is not a valid context" -msgstr "" +msgstr "%s nem érvényes környezet" -#: src/selinux.c:330 +#: src/selinux.c:331 msgid "failed to get old_context" -msgstr "" +msgstr "az old_context lekérése nem sikerült" -#: src/selinux.c:336 +#: src/selinux.c:337 msgid "unable to determine enforcing mode." -msgstr "" +msgstr "a kényszerítő mód meghatározása sikertelen." -#: src/selinux.c:353 +#: src/selinux.c:354 #, c-format msgid "unable to set tty context to %s" -msgstr "" +msgstr "a tty környezet beállítása sikertelen erre: %s" -#: src/selinux.c:392 +#: src/selinux.c:393 #, c-format msgid "unable to set exec context to %s" -msgstr "" +msgstr "a végrehajtási környezet beállítása sikertelen erre: %s" -#: src/selinux.c:399 +#: src/selinux.c:400 #, c-format msgid "unable to set key creation context to %s" -msgstr "" +msgstr "a kulcslétrehozási környezet beállítása sikertelen erre: %s" #: src/sesh.c:77 msgid "requires at least one argument" msgstr "legalább egy argumentum szükséges" -#: src/sesh.c:107 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "érvénytelen fájlleíró szám: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s futtatása bejelentkezési parancsértelmezőként sikertelen" -#: src/sesh.c:112 src/sudo.c:1231 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "%s nem hajtható végre" -#: src/signal.c:68 +#: src/signal.c:69 #, c-format msgid "unable to save handler for signal %d" msgstr "%d szignál kezelőjének mentése sikertelen" #: src/solaris.c:76 msgid "resource control limit has been reached" -msgstr "" +msgstr "az erőforrás-vezérlési korlát elérve" #: src/solaris.c:79 #, c-format @@ -578,280 +598,279 @@ #: src/solaris.c:83 msgid "the invoking task is final" -msgstr "" +msgstr "a meghívó feladat végső" #: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" -msgstr "„%s” projekthez való csatlakozás meghiúsult" +msgstr "nem sikerült a(z) „%s” projekthez csatlakozás" #: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" -msgstr "" +msgstr "nem létezik alapértelmezett kötéseket elfogadó erőforrás-tároló a(z) „%s” projektnél" #: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" -msgstr "" +msgstr "a megadott erőforrás-tároló nem létezik a(z) „%s” projektnél" #: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" -msgstr "" +msgstr "nem sikerült hozzákötni az alapértelmezett erőforrás-tárolóhoz a(z) „%s” projektnél" #: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" -msgstr "" +msgstr "a projekt beállítása nem sikerült a(z) „%s” projektnél" #: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" -msgstr "" +msgstr "figyelmeztetés: az erőforrás-vezérlés hozzárendelése nem sikerült a(z) „%s” projektnél" -#: src/sudo.c:193 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo %s verzió\n" -#: src/sudo.c:195 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Configure kapcsolói: %s\n" -#: src/sudo.c:203 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" -msgstr "végzetes hiba történt: bővítmények betöltése sikertelen" +msgstr "végzetes hiba: a bővítmények betöltése sikertelen" -#: src/sudo.c:211 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" -msgstr "" +msgstr "a házirendbővítmény előkészítése sikertelen" -#: src/sudo.c:267 +#: src/sudo.c:274 +msgid "plugin did not return a command to execute" +msgstr "a bővítmény nem tért vissza végrehajtandó paranccsal" + +#: src/sudo.c:290 #, c-format msgid "error initializing I/O plugin %s" -msgstr "" +msgstr "hiba a(z) %s I/O bővítmény előkészítésekor" -#: src/sudo.c:293 +#: src/sudo.c:316 #, c-format msgid "unexpected sudo mode 0x%x" -msgstr "" +msgstr "váratatlan 0x%x sudo mód" -#: src/sudo.c:434 +#: src/sudo.c:468 msgid "unable to get group vector" -msgstr "" +msgstr "a csoportvektor lekérése sikertelen" -#: src/sudo.c:497 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" -msgstr "" +msgstr "ismeretlen %u uid: kicsoda Ön?" + +#: src/sudo.c:586 +msgid "unable to determine tty" +msgstr "a tty meghatározása sikertelen" -#: src/sudo.c:829 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" -msgstr "" +msgstr "%s a(z) %d uid tulajdona kell legyen, és a setuid bitnek beállítva kell lennie" -#: src/sudo.c:832 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" -msgstr "" +msgstr "a tényleges uid nem %d, a(z) %s a „nosuid” kapcsolóval beállított fájlrendszeren vagy rendszergazda jogosultságok nélküli NFS fájlrendszeren van?" -#: src/sudo.c:838 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" -msgstr "" - -#: src/sudo.c:969 -#, c-format -msgid "unknown login class %s" -msgstr "" +msgstr "a tényleges uid nem %d, a sudo telepítette a setuid gyökeret?" -#: src/sudo.c:982 -msgid "unable to set user context" -msgstr "" - -#: src/sudo.c:996 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" -msgstr "" +msgstr "a kiegészítő csoportazonosítók beállítása sikertelen" -#: src/sudo.c:1003 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" -msgstr "" +msgstr "a tényleges gid beállítása a rúnák gid %u értékre sikertelen" -#: src/sudo.c:1009 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" -msgstr "" +msgstr "a gid beállítása a rúnák gid %u értékre sikertelen" -#: src/sudo.c:1016 +#: src/sudo.c:1048 +#, c-format +msgid "unknown login class %s" +msgstr "ismeretlen %s logikai osztály" + +#: src/sudo.c:1061 +msgid "unable to set user context" +msgstr "a felhasználói környezet beállítása sikertelen" + +#: src/sudo.c:1077 msgid "unable to set process priority" -msgstr "folyamat prioritásának beállítása: sikertelen" +msgstr "a folyamat prioritásának beállítása sikertelen" -#: src/sudo.c:1024 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" -msgstr "" +msgstr "a gyökér megváltoztatása sikertelen erre: %s" -#: src/sudo.c:1037 src/sudo.c:1043 src/sudo.c:1050 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" -msgstr "" +msgstr "a rúnák uid értékre (%u, %u) váltás sikertelen" -#: src/sudo.c:1068 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" -msgstr "%s mappába váltás sikertelen" +msgstr "a könyvtárváltás sikertelen erre: %s" -#: src/sudo.c:1126 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" -msgstr "" +msgstr "váratlan gyermekmegszakítási feltétel: %d" -#: src/sudo.c:1259 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" -msgstr "" +msgstr "a(z) %s házirendbővítményből hiányzik a „check_policy” metódus" -#: src/sudo.c:1277 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" -msgstr "" +msgstr "a(z) %s házirendbővítmény nem támogatja a jogosultságok felsorolását" -#: src/sudo.c:1294 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" -msgstr "" +msgstr "a(z) %s házirendbővítmény nem támogatja a -v kapcsolót" -#: src/sudo.c:1309 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" -msgstr "" +msgstr "a(z) %s házirendbővítmény nem támogatja a -k/-K kapcsolókat" -#: src/sudo_edit.c:202 +#: src/sudo_edit.c:181 src/sudo_edit.c:270 msgid "unable to restore current working directory" msgstr "az aktuális munkakönyvtár visszaállítása sikertelen" -#: src/sudo_edit.c:412 src/sudo_edit.c:516 +#: src/sudo_edit.c:577 src/sudo_edit.c:689 #, c-format msgid "%s: not a regular file" -msgstr "%s: nem normál fájl" +msgstr "%s: nem szabályos fájl" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:584 #, c-format msgid "%s: editing symbolic links is not permitted" -msgstr "" +msgstr "%s: szimbolikus linkek szerkesztése nem engedélyezett" -#: src/sudo_edit.c:422 +#: src/sudo_edit.c:587 #, c-format msgid "%s: editing files in a writable directory is not permitted" -msgstr "" +msgstr "%s: fájlok szerkesztése egy írható könyvtárban nem engedélyezett" -#: src/sudo_edit.c:453 src/sudo_edit.c:555 +#: src/sudo_edit.c:620 src/sudo_edit.c:728 #, c-format msgid "%s: short write" -msgstr "" +msgstr "%s: rövid írás" -#: src/sudo_edit.c:517 +#: src/sudo_edit.c:690 #, c-format msgid "%s left unmodified" -msgstr "" +msgstr "%s módosítatlanul hagyva" -#: src/sudo_edit.c:530 src/sudo_edit.c:716 +#: src/sudo_edit.c:703 src/sudo_edit.c:889 #, c-format msgid "%s unchanged" msgstr "%s változatlan" -#: src/sudo_edit.c:544 src/sudo_edit.c:566 +#: src/sudo_edit.c:717 src/sudo_edit.c:739 #, c-format msgid "unable to write to %s" -msgstr "%s nem írható" +msgstr "az írás sikertelen ebbe: %s" -#: src/sudo_edit.c:545 src/sudo_edit.c:564 src/sudo_edit.c:567 -#: src/sudo_edit.c:741 src/sudo_edit.c:745 +#: src/sudo_edit.c:718 src/sudo_edit.c:737 src/sudo_edit.c:740 +#: src/sudo_edit.c:914 src/sudo_edit.c:918 #, c-format msgid "contents of edit session left in %s" -msgstr "" +msgstr "a szerkesztési munkamenet tartalma ebben maradt: %s" -#: src/sudo_edit.c:563 +#: src/sudo_edit.c:736 msgid "unable to read temporary file" msgstr "az átmeneti fájl olvasása sikertelen" -#: src/sudo_edit.c:646 +#: src/sudo_edit.c:819 msgid "sesh: internal error: odd number of paths" -msgstr "" +msgstr "sesh: belső hiba: útvonalak páratlan száma" -#: src/sudo_edit.c:648 +#: src/sudo_edit.c:821 msgid "sesh: unable to create temporary files" -msgstr "sesh: nem sikerült ideiglenes fájlokat létrehozni" +msgstr "sesh: átmeneti fájlok létrehozása sikertelen" -#: src/sudo_edit.c:650 src/sudo_edit.c:748 +#: src/sudo_edit.c:823 src/sudo_edit.c:921 #, c-format msgid "sesh: unknown error %d" -msgstr "" +msgstr "sesh: ismeretlen hiba: %d" -#: src/sudo_edit.c:740 +#: src/sudo_edit.c:913 msgid "unable to copy temporary files back to their original location" -msgstr "" +msgstr "az átmeneti fájlok visszamásolása az eredeti helyükre sikertelen" -#: src/sudo_edit.c:744 +#: src/sudo_edit.c:917 msgid "unable to copy some of the temporary files back to their original location" -msgstr "" +msgstr "néhány átmeneti fájl visszamásolása az eredeti helyükre sikertelen" -#: src/sudo_edit.c:787 +#: src/sudo_edit.c:961 #, c-format msgid "unable to change uid to root (%u)" -msgstr "" +msgstr "az uid megváltoztatása rendszergazdára (%u) sikertelen" -#: src/sudo_edit.c:804 +#: src/sudo_edit.c:978 msgid "plugin error: missing file list for sudoedit" -msgstr "" +msgstr "bővítményhiba: hiányzó fájllista a sudoedit programnál" -#: src/sudo_edit.c:845 src/sudo_edit.c:858 +#: src/sudo_edit.c:1019 src/sudo_edit.c:1032 msgid "unable to read the clock" msgstr "az óra olvasása sikertelen" #: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" -msgstr "" +msgstr "nincs tty jelen, és nincs askpass program megadva" #: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" -msgstr "" +msgstr "nincs askpass program megadva, SUDO_ASKPASS beállításának kísérlete" -#: src/tgetpass.c:276 +#: src/tgetpass.c:261 #, c-format msgid "unable to set gid to %u" -msgstr "" +msgstr "a gid beállítása %u értékre sikertelen" -#: src/tgetpass.c:280 +#: src/tgetpass.c:265 #, c-format msgid "unable to set uid to %u" -msgstr "" +msgstr "az uid beállítása %u értékre sikertelen" -#: src/tgetpass.c:285 +#: src/tgetpass.c:270 #, c-format msgid "unable to run %s" msgstr "%s futtatása sikertelen" -#: src/utmp.c:266 +#: src/utmp.c:268 msgid "unable to save stdin" -msgstr "stdin mentése sikertelen" +msgstr "a szabványos bemenet mentése sikertelen" -#: src/utmp.c:268 +#: src/utmp.c:270 msgid "unable to dup2 stdin" -msgstr "" +msgstr "a szabványos bemenet dup2 futtatása sikertelen" -#: src/utmp.c:271 +#: src/utmp.c:273 msgid "unable to restore stdin" -msgstr "stdin visszaállítása sikertelen" - -#~ msgid "%s: %s: %s\n" -#~ msgstr "%s: %s: %s\n" - -#~ msgid "%s: %s\n" -#~ msgstr "%s: %s\n" - -#~ msgid "unable to open socket" -#~ msgstr "a foglalatot nem lehet megnyitni" +msgstr "a szabványos bemenet visszaállítása sikertelen" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/it.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/it.mo differ diff -Nru sudo-1.8.19p1/po/it.po sudo-1.8.20p2/po/it.po --- sudo-1.8.19p1/po/it.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/it.po 2017-05-10 15:38:43.000000000 +0000 @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.19b1\n" +"Project-Id-Version: sudo-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 13:32+0100\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 14:23+0200\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -16,7 +16,7 @@ "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 1.8.12\n" #: lib/util/aix.c:85 lib/util/aix.c:172 msgid "unable to open userdb" @@ -33,36 +33,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "impossibile allocare memoria" @@ -71,18 +72,18 @@ msgid "Unknown signal" msgstr "Segnale sconosciuto" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valore non valido" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valore troppo grande" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "valore troppo piccolo" @@ -136,85 +137,89 @@ msgid "unable to open %s" msgstr "impossibile aprire %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "impossibile impostare il gestore per il segnale %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "impossibile eseguire fork" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "impossibile rimuovere PRIV_PROC_EXEC da PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "errore nel leggere dalla pipe di segnale" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "errore nel leggere dal socketpair" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "tipologia di risposta inattesa sul backchannel: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "impossibile aggiungere l'evento alla coda" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "impossibile creare socket" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "impossibile creare una pipe" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "impossibile impostare il tty di controllo" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "impossibile eseguire fork" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "impossibile ripristinare l'etichetta tty" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "inizializzazione della sessione non riuscita da parte del plugin della politica" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "errore nel ciclo dell'evento" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "impossibile ripristinare l'etichetta tty" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "impossibile ripristinare il gestore per il segnale %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "errore nel leggere dalla pipe di segnale" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "impossibile rimuovere PRIV_PROC_EXEC da PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "impossibile allocare pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "impossibile creare una pipe" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "errore nel leggere dalla pipe" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "errore nel leggere dal socketpair" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "tipologia di risposta inattesa sul backchannel: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "impossibile impostare il tty di controllo" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "impossibile creare socket" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -283,48 +288,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "il plugin di politica %s non include un metodo check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "errore interno, overflow di %s" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "l'argomento di -C deve essere un numero maggiore o uguale a 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "non è possibile specificare entrambe le opzioni \"-i\" e \"-s\"" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "non è possibile specificare entrambe le opzioni \"-i\" ed \"-E\"" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "l'opzione \"-E\" non è valida in modalità di modifica" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "non è possibile specificare variabili d'ambiente in modalità di modifica" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "l'opzione \"-U\" può essere usata solo con l'opzione \"-l\"" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "non è possibile usare assieme le opzioni \"-A\" e \"-S\"" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit non è supportato su questa piattaforma" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Solo una delle opzioni -e, -h, -i, -K, -l, -s, -v o -V può essere specificata" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -333,7 +338,7 @@ "%s - modifica file come un altro utente\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -342,7 +347,7 @@ "%s - esegue un comando come un altro utente\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -351,111 +356,115 @@ "\n" "Opzioni:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "Utilizza un programma d'aiuto per richiedere la password" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "Utilizza la tipologia di autenticazione BSD specificata" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "Esegue il comando in background" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "Chiude tutti i descrittori di file >= num" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "Esegue il comando con la classe di accesso BSD specificata" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "Mantiene l'ambiente dell'utente quando viene eseguito il comando" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "Modifica i file invece di eseguire un comando" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "Esegue il comando come il gruppo o l'ID specificato" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "Imposta la variabile HOME alla directory dell'utente finale" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "Visualizza il messaggio di aiuto ed esce" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "Esegue il comando sull'host (se supportato dal plugin)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "Esegue una shell di login come l'utente finale; può essere specificato un comando" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "Rimuove completamente il file temporale" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "Invalida il file temporale" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "Elenca i privilegi dell'utente o verifica un comando specifico; usare due volte per il formato più lungo" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "Modalità non interattiva, non richiede nulla all'utente" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "Mantiene il vettore di gruppo invece di impostarlo a quello dell'obiettivo" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "Utilizza la richiesta della password specificata" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "Crea il contesto di sicurezza SELinux con il ruolo specificato" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "Legge la password dallo standard input" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "Esegue la shell come l'utente finale; può essere specificato un comando" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "Crea il contesto di sicurezza SELinux con il tipo specificato" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "Termina il comando allo trascorrere del limite temporale specificato" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "In modalità elenco, visualizza i privilegi dell'utente" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "Esegue un comando (o modifica un file) come il nome utente o l'ID specificato" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "Visualizza le informazioni sulla versione ed esce" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "Aggiorna il timestamp dell'utente senza eseguire un comando" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "Ferma l'elaborazione degli argomenti a riga di comando" @@ -565,7 +574,7 @@ msgid "unable to run %s as a login shell" msgstr "impossibile eseguire %s come shell di login" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "impossibile eseguire %s" @@ -650,98 +659,98 @@ msgid "unexpected sudo mode 0x%x" msgstr "modalità 0x%x di sudo non attesa" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "impossibile ottenere il vettore di gruppo" # (ndt) mah... andrebbe resa meglio... -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid %u sconosciuto: utente sconosciuto." -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "impossibile impostare il tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s deve essere di proprietà dello uid %d e avere il bit setuid impostato" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "lo uid effettivo non è %d. %s si trova su un file system con l'opzione \"nosuid\" impostata o su un file system NFS senza privilegi di root?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "lo uid effettivo non è %d. Il programma sudo è installato con setuid root?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "impossibile impostare ID di gruppo supplementari" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "impossibile impostare il gid effettivo per eseguire come %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossibile impostare il gid per eseguire come gid %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "classe di accesso %s sconosciuta" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "impossibile impostare il contesto utente" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "impossibile impostare la priorità del processo" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "impossibile modificare root a %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "impossibile passare a un diverso uid (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "impossibile passare alla root %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "condizione di uscita del figlio inattesa: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "il plugin di politica %s non include un metodo \"check_policy\"" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "il plugin di politica %s non supporta l'elencazione dei privilegi" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "il plugin di politica %s non supporta l'opzione -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "il plugin di politica %s non supporta le opzioni -k/-K" @@ -863,3 +872,6 @@ #: src/utmp.c:273 msgid "unable to restore stdin" msgstr "impossibile ripristinare lo stdin" + +#~ msgid "error reading from pipe" +#~ msgstr "errore nel leggere dalla pipe" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/ja.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/ja.mo differ diff -Nru sudo-1.8.19p1/po/ja.po sudo-1.8.20p2/po/ja.po --- sudo-1.8.19p1/po/ja.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/ja.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,14 +1,14 @@ # Japanese messages for sudo # This file is put in the public domain. # Yasuaki Taniguchi , 2011. -# Takeshi Hamasaki , 2012, 2015, 2016. +# Takeshi Hamasaki , 2012, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 18:24+0900\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-04-01 20:49+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -36,36 +36,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" @@ -74,18 +75,18 @@ msgid "Unknown signal" msgstr "不明なシグナルです" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "無効な値" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "値が大き過ぎます" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "値が小さ過ぎます" @@ -139,85 +140,89 @@ msgid "unable to open %s" msgstr "%s を開けません" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "シグナル %d のハンドラを設定できません" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "fork できません" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "PRIV_LIMIT から PRIV_PROC_EXEC を取り除くことができません" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "シグナルパイプからの読み込み中にエラーが発生しました" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "ソケットペアからの読み込み中にエラーが発生しました" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "バックチャンネルに関する予期しないリプレイタイプです: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "キューにイベントを追加できません" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "ソケットを作成できません" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "パイプを作成できません" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "tty の制御設定ができません" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "fork できません" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "tty ラベルを復旧できません" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "ポリシープラグインがセッションの初期化に失敗しました" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "イベントループでエラーが発生しました" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "tty ラベルを復旧できません" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "シグナル %d のハンドラを復元できません" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "シグナルパイプからの読み込み中にエラーが発生しました" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "PRIV_LIMIT から PRIV_PROC_EXEC を取り除くことができません" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "pty を割り当てられません" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "パイプを作成できません" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "パイプからの読み込み中にエラーが発生しました" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "ソケットペアからの読み込み中にエラーが発生しました" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "バックチャンネルに関する予期しないリプレイタイプです: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "tty の制御設定ができません" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "ソケットを作成できません" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -286,48 +291,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "内部エラー、 %s がオーバーフローしました" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C の引数は 3 以上の数値でなければいけません" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "`-i' と `-s' オプションを同時に指定することはできません" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "`-i' と `-E' オプションを同時に指定することはできません" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "`-E' オプションは編集モードでは無効です" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "編集モードでは環境変数を指定できません" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "`-U' オプションは `-l' オプションのみと同時に指定できます" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "`-A' と `-S' オプションは同時に指定することはできません" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit はこのプラットフォームではサポートされていません" -#: src/parse_args.c:583 +#: src/parse_args.c:589 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:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -336,7 +341,7 @@ "%s - 別のユーザーとしてファイルを編集します\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -345,7 +350,7 @@ "%s - 別のユーザーとしてコマンドを実行します\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -354,111 +359,115 @@ "\n" "オプション:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "パスワード要求のために補助プログラムを使用する" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "指定した BSD 認証タイプを使用する" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "コマンドをバックグラウンドで実行する" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "num 以上のすべてのファイル記述子を閉じる" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "指定した BSD ログインクラスでコマンドを実行する" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "コマンドを実行する時にユーザーの環境変数を維持する" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "コマンドを実行するのではなくファイルを編集する" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "指定したグループ名またはグループIDでコマンドを実行する" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "HOME 変数を変更先となるユーザーのホームディレクトリに設定する" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "このヘルプを表示して終了する" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "host でコマンドを実行する(プラグインがサポートしている場合)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "変更先のユーザーとしてログインシェルを実行する; コマンドを指定することもできます" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "タイムスタンプファイルを完全に削除する" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "無効なタイムスタンプファイルです" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "ユーザーの権限を一覧表示するまたは指定したコマンドについて確認する ;長い表示にするには2回指定すること" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "非対話モードで実行し、ユーザーに入力を求めない" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "グループベクトルを保護する (変更先のユーザーのものに設定しない)" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "指定したパスワードプロンプトを使用する" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "指定した役割で SELinux セキュリティーコンテキストを作成する" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "標準入力からパスワードを読み込む" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "変更先のユーザーとしてシェルを実行する; コマンドを指定することもできます" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "指定したタイプで SELinux セキュリティーコンテキストを作成する" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "指定した制限時間でコマンドの実行を中止する" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "リストモードで、ユーザーの権限を表示する" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "指定したユーザー名またはユーザーIDでコマンドを実行する (またはファイルを編集する)" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "バージョン情報を表示して終了する" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "コマンドを実行せずにユーザーのタイムスタンプを更新する" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "コマンドライン引数の処理を終了する" @@ -568,7 +577,7 @@ msgid "unable to run %s as a login shell" msgstr "%s をログインシェルとして実行できません" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" @@ -653,97 +662,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "予期しない sudo のモード 0x%x です" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "グループベクトルを取得できません" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "不明なユーザーID %u です: 誰ですか?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "tty を特定できません" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s は所有者が uid %d である必要があり、かつ setuid が設定されている必要があります" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "実効 uid が %d ではありません、%s は 'nosuid' が設定されたファイルシステムにあるか、root 権限のないNFSファイルシステムにあるのでは?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "実効 uid が %d ではありません、sudo は setuid root を設定してインストールされていますか?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "追加のグループIDを設定できません" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "実行時のグループID (gid) %u を実効グループIDに設定できません" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "実行時のグループID (gid) %u をグループIDに設定できません" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "不明なログインクラス %s です" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "ユーザーコンテキストを設定できません" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "プロセス優先度を設定できません" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "root を %s へ変更できません" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "実行時のユーザーID (uid) (%u, %u) へ変更できません" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "ディレクトリーを %s に変更できません" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "予期しない子プロセスの終了コードです: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "ポリシープラグイン %s は権限の一覧表示をサポートしていません" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "ポリシープラグイン %s は -v オプションをサポートしません" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "ポリシープラグイン %s は -k/-K オプションをサポートしません" @@ -866,6 +875,9 @@ msgid "unable to restore stdin" msgstr "標準入力を復元できません" +#~ msgid "error reading from pipe" +#~ msgstr "パイプからの読み込み中にエラーが発生しました" + #~ msgid "internal error, tried allocate zero bytes" #~ msgstr "内部エラー、0バイトの確保を試みました" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/nb.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/nb.mo differ diff -Nru sudo-1.8.19p1/po/nb.po sudo-1.8.20p2/po/nb.po --- sudo-1.8.19p1/po/nb.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/nb.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,15 +1,15 @@ # Norwegian bokmål translation of sudo. # This file is distributed under the same license as the sudo package. -# Copyright (C) 2016 Free Software Foundation, Inc. +# Copyright (C) 2017 Free Software Foundation, Inc. # Todd C. Miller , 2011-2013. -# Åka Sikrom , 2014-2016. +# Åka Sikrom , 2014-2017. # msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.19b1\n" +"Project-Id-Version: sudo-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-28 13:17+0100\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-04-15 17:51+0200\n" "Last-Translator: Åka Sikrom \n" "Language-Team: Norwegian Bokmaal \n" "Language: nb\n" @@ -35,36 +35,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "klarte ikke å tildele minne" @@ -73,18 +74,18 @@ msgid "Unknown signal" msgstr "Ukjent signal" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ugyldig verdi" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "verdien er for stor" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "verdien er for liten" @@ -138,85 +139,89 @@ msgid "unable to open %s" msgstr "klarte ikke å åpne %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "klarte ikke å velge håndtering av signal %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "klarte ikke å lage kopi av prosess" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "klarte ikke å fjerne PRIV_PROC_EXEC fra PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "feil under lesing fra signalrør" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "feil under lesing fra sokkelpar" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "uforventet responstype i bak-kanalen: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "klarte ikke å legge hendelse i kø" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "klarte ikke å lage sokkel" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "klarte ikke å lage datarør" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "klarte ikke å velge styrende tty" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "klarte ikke å lage kopi av prosess" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "klarte ikke å gjenopprette tty-etikett" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "regeltillegg klarte ikke å starte økt" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "feil i hendelsesløkke" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "klarte ikke å gjenopprette tty-etikett" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "klarte ikke å gjenopprette håndtering av signal %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "feil under lesing fra signalrør" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "klarte ikke å fjerne PRIV_PROC_EXEC fra PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "klarte ikke å tildele pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "klarte ikke å lage datarør" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "feil under lesing fra datarør" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "feil under lesing fra sokkelpar" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "uforventet responstype i bak-kanalen: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "klarte ikke å velge styrende tty" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "klarte ikke å lage sokkel" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -285,48 +290,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "regeltillegget «%s» inneholder ikke en «check_policy»-metode" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "intern feil: %s er full" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "«-C» må brukes med et tallargument med en verdi på minst 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "du kan ikke velge både «-i» og «-s»" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "du kan ikke velge både «-i» og «-E»" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "valget «-E» er ugyldig i redigeringsmodus" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "du kan ikke velge miljøvariabler i redigeringsmodus" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "valget «-U» kan ikke brukes uten «-l»" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "valgene «-A» og «-S» kan ikke brukes samtidig" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit støttes ikke på denne plattformen" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Du kan bare velge ett av valgene -e, -h, -i, -K, -l, -s, -v eller -V" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -335,7 +340,7 @@ "%s - rediger filer som om du var en annen bruker\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -344,7 +349,7 @@ "%s - kjør en kommando som om du var en annen bruker\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -353,111 +358,115 @@ "\n" "Valg:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "bruk et hjelpeprogram for å oppgi passord" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "bruk valgt BSD-autentiseringsmetode" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "kjør kommando i bakgrunnen" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "lukk alle fildeskriptorer >= num" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "kjør kommando med valgt BSD-innloggingsklasse" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "behold gjeldende brukermiljø når kommandoen kjøres" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "rediger filer i stedet for å kjøre en kommando" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "kjør kommando som om du var en del av valgt gruppe (-navn eller -ID)" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "bruk valgt brukers hjemmemappe som HOME-miljøvariabel" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "vis hjelpetekst og avslutt" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "kjør kommando på verten (hvis programtillegget støtter det)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "kjør innloggingsskall som om du var den valgte brukeren (du kan også oppgi en kommando her)" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "fjern tidsstempel-fil skikkelig" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "gjør tidsstempel-fil ugyldig" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "vis brukerens privilegier, eller sjekk om det fungerer å kjøre en bestemt kommando (bruk to ganger for å se et lengre format)" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "stillemodus (ingen ledetekst vises)" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "behold gruppevektor, i stedet for å bruke den som gjelder for målet" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "bruk valgt passord-ledetekst" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "lag SELinux-sikkerhetskontekst med valgt rolle" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "les passord fra standard inndata" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "kjør skall som valgt bruker (du kan også oppgi en kommando her)" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "lag SELinux-sikkerhetskontekst med valgt type" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "avslutt kommando etter valgt tidsfrist" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "vis brukerprivilegier (i listemodus)" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "kjør kommando (eller rediger fil) som valgt brukernavn eller bruker-ID" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "vis programversjon og avslutt" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "oppdater brukerens tidsstempel uten å kjøre en kommando" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "slutt å behandle kommandolinje-argumenter" @@ -567,7 +576,7 @@ msgid "unable to run %s as a login shell" msgstr "klarte ikke å kjøre %s som et innloggingsskall" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "klarte ikke å kjøre «%s»" @@ -652,97 +661,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "uforventet sudo-modus 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "klarte ikke å hente gruppevektor" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "UID %u er ukjent. Hvem er du?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "fant ikke gjeldende tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "«%s» må eies av uid %d, og setuid-biten må være valgt" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "effektiv uid er ikke %d. Er «%s» på et filsystem hvor «nosuid» er valgt, eller på et NFS-filsystem uten rot-rettigheter?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "effektiv uid er ikke %d. Er sudo installert med «setuid root»?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "klarte ikke å velge ekstra grruppe-id-er" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "klarte ikke å velge «runas gid %u» som effektiv gid" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "klarte ikke å velge «runas gid %u» som gid" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "innloggingsklassen «%s» er ukjent" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "klarte ikke å velge brukerkontekst" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "klarte ikke å velge prosessprioritet" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "klarte ikke å endre rot til «%s»" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "klarte ikke å endre til runas uid (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "klarte ikke å endre mappe til «%s»" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "uforventet årsak for avslutning av underprosess: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "regeltillegget «%s» mangler «check_policy»-metoden" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "regeltillegget «%s» støtter ikke listetillatelser" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "regeltillegget «%s» støtter ikke valget «-v»" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "regeltillegget «%s» støtter ikke valgene «-k» og «-K»" @@ -865,6 +874,9 @@ msgid "unable to restore stdin" msgstr "klarte ikke å gjenopprette standard innkanal" +#~ msgid "error reading from pipe" +#~ msgstr "feil under lesing fra datarør" + #~ msgid "unable to set terminal to raw mode" #~ msgstr "klarte ikke å sette terminal i råmodus" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/pl.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/pl.mo differ diff -Nru sudo-1.8.19p1/po/pl.po sudo-1.8.20p2/po/pl.po --- sudo-1.8.19p1/po/pl.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/pl.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,13 @@ # Polish translation for sudo. # This file is put in the public domain. -# Jakub Bogusz , 2011-2016. +# Jakub Bogusz , 2011-2017. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 21:02+0100\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 21:27+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -31,36 +31,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "nie udało się przydzielić pamięci" @@ -69,18 +70,18 @@ msgid "Unknown signal" msgstr "Nieznany sygnał" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "błędna wartość" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "wartość zbyt duża" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "wartość zbyt mała" @@ -134,85 +135,89 @@ msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "nie udało się ustawić procedury obsługi dla sygnału %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "nie udało się wykonać fork" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "nie udało się usunąć PRIV_PROC_EXEC z PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "błąd odczytu z potoku sygnałowego" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "błąd odczytu z pary gniazd" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "nieoczekiwany typ odpowiedzi z kanału zwrotnego: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "nie udało się dodać zdarzenia do kolejki" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "nie udało się utworzyć gniazd" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "nie udało się utworzyć potoku" + +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "nie udało się ustawić sterującego tty" -#: src/exec.c:446 +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "nie udało się wykonać fork" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "nie udało się przywrócić etykiety tty" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "nie udało się zainicjować sesji przez wtyczkę polityki" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "błąd w pętli zdarzeń" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "nie udało się przywrócić etykiety tty" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "nie udało się przywrócić procedury obsługi dla sygnału %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "błąd odczytu z potoku sygnałowego" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "nie udało się usunąć PRIV_PROC_EXEC z PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "nie udało się przydzielić pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "nie udało się utworzyć potoku" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "błąd odczytu z potoku" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "błąd odczytu z pary gniazd" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "nieoczekiwany typ odpowiedzi z kanału zwrotnego: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "nie udało się ustawić sterującego tty" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "nie udało się utworzyć gniazd" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -281,48 +286,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "wtyczka polityki %s nie zawiera metody check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "błąd wewnętrzny, przepełnienie %s" -#: src/parse_args.c:239 +#: src/parse_args.c:242 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:406 +#: src/parse_args.c:412 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:410 +#: src/parse_args.c:416 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:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "opcja `-E' nie jest poprawna w trybie edycji" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "w trybie edycji nie można przekazywać zmiennych środowiskowych" -#: src/parse_args.c:430 +#: src/parse_args.c:436 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:434 +#: src/parse_args.c:440 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:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit nie jest obsługiwane na tej platformie" -#: src/parse_args.c:583 +#: src/parse_args.c:589 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:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -331,7 +336,7 @@ "%s - modyfikowanie plików jako inny użytkownik\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -340,7 +345,7 @@ "%s - wykonywanie poleceń jako inny użytkownik\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -349,111 +354,115 @@ "\n" "Opcje:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "użycie programu pomocniczego do pytań o hasło" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "użycie podanego rodzaju uwierzytelnienia BSD" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "uruchomienie polecenia w tle" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "zamknięcie wszystkich deskryptorów >= fd" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "uruchomienie polecenia z podaną klasą logowania BSD" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "zachowanie środowiska użytkownika przy uruchamianiu polecenia" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "modyfikowanie plików zamiast uruchomienia polecenia" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "wywołanie polecenia jako określona grupa lub ID" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "ustawienie zmiennej HOME na katalog domowy użytkownika docelowego" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "wyświetlenie opisu i zakończenie" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "uruchomienie polecenia na hoście (jeśli obsługiwane przez wtyczkę)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "uruchomienie powłoki logowania jako użytkownik docelowy; można także podać polecenie" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "całkowite usunięcie pliku znacznika czasu" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "unieważnienie pliku znacznika czasu" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "wypisanie uprawnień użytkownika lub sprawdzenie określonego polecenia; dwukrotne użycie to dłuższy format" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "tryb nieinteraktywny, bez pytań" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "zachowanie wektora grup zamiast ustawiania docelowych" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "użycie podanego pytania o hasło" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podaną rolą" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "odczyt hasła ze standardowego wejścia" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "uruchomienie powłoki jako użytkownik docelowy; można także podać polecenie" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podanym typem" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "zakończenie polecenia po zadanym limicie czasu" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "w trybie listy - wyświetlenie uprawnień użytkownika" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "uruchomienie polecenia (lub modyfikowanie pliku) jako podany użytkownik lub ID" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "wyświetlenie informacji o wersji i zakończenie" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "uaktualnienie znacznika czasu użytkownika bez uruchamiania polecenia" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "zakończenie przetwarzania argumentów linii poleceń" @@ -563,7 +572,7 @@ msgid "unable to run %s as a login shell" msgstr "nie udało się uruchomić %s jako powłoki logowania" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "nie udało się wykonać %s" @@ -648,97 +657,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "nieoczekiwany tryb sudo 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "nie udało się uzyskać wektora grup" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "nieznany uid %u: kim jesteś?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "nie udało się określić tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s musi mieć uid %d jako właściciela oraz ustawiony bit setuid" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "efektywny uid nie wynosi %d, czy %s jest na systemie plików z opcją 'nosuid' albo systemie plików NFS bez uprawnień roota?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "efektywny uid nie wynosi %d, czy sudo jest zainstalowane z setuid root?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "nie udało się ustawić ID dodatkowych grup" -#: src/sudo.c:963 +#: src/sudo.c:971 #, 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:969 +#: src/sudo.c:977 #, 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:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "nieznana klasa logowania %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "nie udało się ustawić kontekstu użytkownika" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "nie udało się ustawić priorytetu procesu" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "nie udało się zmienić katalogu głównego na %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, 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:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "nie udało się zmienić katalogu na %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "nieoczekiwane zakończenie procesu potomnego: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "wtyczka polityki %s nie zawiera metody `check_policy'" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "wtyczka polityki %s nie obsługuje wypisywania uprawnień" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "wtyczka polityki %s nie obsługuje opcji -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "wtyczka polityki %s nie obsługuje opcji -k/-K" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/pt_BR.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/pt_BR.mo differ diff -Nru sudo-1.8.19p1/po/pt_BR.po sudo-1.8.20p2/po/pt_BR.po --- sudo-1.8.19p1/po/pt_BR.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/pt_BR.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,14 @@ -# Brazilian Portuguese translation of sudo. +# Brazilian Portuguese translation for sudo. +# Traduções em português brasileiro para o pacote sudo. # This file is distributed under the same license as the sudo package. -# Copyright (C) 2016 Free Software Foundation, Inc. -# Rafael Fontenelle , 2013, 2014, 2015, 2016. +# Copyright (C) 2017 Free Software Foundation, Inc. +# Rafael Fontenelle , 2013, 2014, 2015, 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-24 02:08-0200\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 16:04-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -33,36 +34,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "não foi possível alocar memória" @@ -71,18 +73,18 @@ msgid "Unknown signal" msgstr "Sinal desconhecido" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valor inválido" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valor grande demais" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "valor pequeno demais" @@ -136,85 +138,89 @@ msgid "unable to open %s" msgstr "não foi possível abrir %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "não foi possível definir manipulador para sinal %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "não foi possível fazer fork" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "não foi possível remover PRIV_PROC_EXEC de PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "erro ao ler do sinal de redirecionamento (pipe)" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "erro ao ler do par de soquetes" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "tipo de resposta inesperada no canal de retorno: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "não foi possível adicionar um evento à fila" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "não foi possível criar soquetes" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "não foi possível criar um redirecionamento (pipe)" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "não foi possível definir tty de controle" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "não foi possível fazer fork" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "não foi possível restaurar rótulo de tty" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "plug-in de política falhou ao inicializar da sessão" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "erro em loop de evento" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "não foi possível restaurar rótulo de tty" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "não foi possível restaurar manipulador para sinal %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "erro ao ler do sinal de redirecionamento (pipe)" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "não foi possível remover PRIV_PROC_EXEC de PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "não foi possível alocar pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "não foi possível criar um redirecionamento (pipe)" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "erro ao ler de redirecionamento (pipe)" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "erro ao ler do par de soquetes" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "tipo de resposta inesperada no canal de retorno: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "não foi possível definir tty de controle" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "não foi possível criar soquetes" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -283,48 +289,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "plug-in de política %s não inclui um método de check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, estouro de pilha de %s" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "o argumento do -C deve ser um número maior ou igual a 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "você não pode especificar as opções \"-i\" e \"-s\" ao mesmo tempo" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "você não pode especificar as opções \"-i\" e \"-E\" ao mesmo tempo" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "a opção \"-E\" não é válida no modo de edição" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "você não pode especificar variáveis de ambiente no modo de edição" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "a opção \"-U\" pode ser usada apenas com a opção \"-l\"" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "as opções \"-A\" e \"-S\" não podem ser usadas ao mesmo tempo" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "não há suporte a sudoedit nesta plataforma" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Apenas uma das opções -e, -h, -i, -K, -l, -s, -v ou -V pode ser especificada" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -333,7 +339,7 @@ "%s - edita arquivos como outro usuário\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -343,7 +349,7 @@ "\n" # Deixei minúsculo para seguir o padrão das demais linhas do "sudo -h" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -352,111 +358,115 @@ "\n" "opções:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "usa um programa auxiliar para pedir senha" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "usa o tipo de autenticação BSD especificado" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "executa um comando em plano de fundo" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "fecha todos os descritores, de arquivos, >= num" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "executa um comando com uma classe de login especificada" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "preserva um ambiente de usuário ao executar um comando" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "edita arquivos em vez de executar um comando" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "executa um comando como o ID ou nome de grupo especificado" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "define a variável HOME para a pasta pessoal do usuário alvo" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "exibe uma mensagem de ajuda e sai" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "executa o comando na máquina (se houver suporte pelo plug-in)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "executa um shell de login como usuário alvo; um comando também pode ser especificado" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "remove arquivo de marca de tempo completamente" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "invalida arquivo de marca de tempo" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "lista os privilégios do usuário ou verifica um comando específico; use duas vezes para um formato maior" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "modo não interativo, não pergunta para o usuário" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "preserva vetor de grupos ao invés de definir para o do alvo" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "usa a senha especificada" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "cria um contexto de segurança SELinux com o papel especificado" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "lê a senha da entrada padrão" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "executa o shell como o usuário alvo; um comando também pode ser especificado" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "cria um contexto de segurança SELinux com o tipo especificado" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "termina o comando após o tempo limite especificado" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "no modo lista, exibe os privilégios por usuário" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "executa um comando (ou edita um arquivo) como o nome ou ID do usuário especificado" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "exibe as informações de versão e sai" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "atualiza a marca de tempo do usuário sem executar um comando" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "interrompe processamento de argumentos de linha de comando" @@ -566,7 +576,7 @@ msgid "unable to run %s as a login shell" msgstr "não foi possível executar %s como shell de login" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" @@ -651,97 +661,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "modo de sudo inesperado 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "não foi possível obter vetor de grupos" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid desconhecido %u: quem é você?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "não foi possível determinar o tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s deve ter como dono o uid %d e tem definido o bit setuid" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "uid efetivo não é %d, é %s em um sistema de arquivos com a opção \"nosuid\" defina ou um sistema de arquivos NFS sem privilégios de root?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "uid efetivo não é %d, sudo está instalado em uma raiz com setuid?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "não foi possível definir IDs de grupo suplementares" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "não foi possível definir gid efetivo para executar como gid %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "não foi possível definir gid para executar como gid %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "classe de login desconhecida %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "não foi possível definir contexto de usuário" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "não foi possível definir prioridade do processo" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "não foi possível alterar a raiz para %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "não foi possível alterar para uid de \"runas\" (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "não foi possível alterar diretório para %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "condição inesperada de término de filho: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "plug-in de política %s é sem o método \"check_policy\"" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "plug-in de política %s não tem suporte a listagem de privilégios" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "plug-in de política %s não tem suporte à opção -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "plug-in de política %s não tem suporte às opções -k/-K" @@ -864,6 +874,9 @@ msgid "unable to restore stdin" msgstr "não foi possível restaurar a entrada padrão" +#~ msgid "error reading from pipe" +#~ msgstr "erro ao ler de redirecionamento (pipe)" + #~ msgid "internal error, tried allocate zero bytes" #~ msgstr "erro interno, tentou alocar zero bytes" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/sr.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/sr.mo differ diff -Nru sudo-1.8.19p1/po/sr.po sudo-1.8.20p2/po/sr.po --- sudo-1.8.19p1/po/sr.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/sr.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,12 +1,12 @@ # Serbian translations for sudo package. # This file is put in the public domain. -# Мирослав Николић , 2011—2016. +# Мирослав Николић , 2011—2017. msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.19b1\n" +"Project-Id-Version: sudo-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-12-04 15:58+0200\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-05-07 14:19+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -31,36 +31,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" @@ -69,18 +70,18 @@ msgid "Unknown signal" msgstr "Непознати сигнал" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "неисправна вредност" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "вредност је превелика" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "вредност је премала" @@ -134,85 +135,89 @@ msgid "unable to open %s" msgstr "не могу да отворим %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "не могу да подесим руковаоца за сигнал „%d“" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "не могу да поделим" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "не могу да уклоним PRIV_PROC_EXEC из PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "грешка у читању из спојке сигнала" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "грешка у читању из пара прикључка" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "неочекивана врста одговора на повратном каналу: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "не могу да додам догађај у ред" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "не могу да направим утичнице" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "не могу да направим спојку" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "не могу да подесим контролисање tty" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "не могу да поделим" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "не могу да повратим tty натпис" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "није успело покретање сесије прикључка политике" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "грешка у петљи догађаја" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "не могу да повратим tty натпис" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "не могу да повратим руковаоца за сигнал „%d“" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "грешка у читању из спојке сигнала" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "не могу да уклоним PRIV_PROC_EXEC из PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "не могу да доделим pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "не могу да направим спојку" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "грешка у читању из спојке" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "грешка у читању из пара прикључка" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "неочекивана врста одговора на повратном каналу: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "не могу да подесим контролисање tty" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "не могу да направим утичнице" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -281,48 +286,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "прикључак сигурности %s не садржи метод провере_сигурности" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење функције „%s“" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент уз -C мора бити број већи или једнак 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "не можете да наведете обе опције „-i“ и „-s“" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "не можете да наведете обе опције „-i“ и „-E“" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "опција „-E“ није исправна у режиму уређивања" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "не можете да одредите променљиве окружења у режиму уређивања" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "опција „-U“ може бити коришћена само са опцијом „-l“" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "опције „-A“ и „-S“ не могу бити коришћене заједно" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "„sudoedit“ није подржано на овој платформи" -#: src/parse_args.c:583 +#: src/parse_args.c:589 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:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -331,7 +336,7 @@ "%s — уредите датотеке као други корисник\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -340,7 +345,7 @@ "%s — извршите наредбу као други корисник\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -349,111 +354,115 @@ "\n" "Опције:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "користи програм испомоћи за упит лозинке" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "користи наведену врсту БСД потврде идентитета" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "покреће наредбу у позадини" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "затвара све описнике датотеке >= fd" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "покреће наредбу са наведеним разредом БСД пријаве" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "чува корисничко окружење приликом покретања наредбе" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "уређује датотеке уместо да изврши наредбу" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "извршава наредбу као наведени назив групе или ИБ" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "подешава променљиву ЛИЧНО у циљну корисничку личну фасциклу" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "приказује поруку помоћи и излази" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "покреће наредбу на домаћину (ако је подржано прикључком)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "покреће љуску пријаве као крајњи корисник; наредба може такође бити наведена" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "потпуно уклања датотеку записа датума и времена" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "чини неисправном датотеку датума и времена" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "исписује привилегије корисника или проверава посебну наредбу; користи се двапута за дуже записе" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "немеђудејствени режим, не користи упите" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "чува вектор групе уместо да подеси на циљеве" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "користи упит наведене лозинке" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "чита лозинку са стандардног улаза" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "покреће љуску као крајњи корисник; наредба такође може бити наведена" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "окончава наредбу након наведеног временског ограничења" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "у режиму списка, приказује привилегије за корисника" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "покреће наредбу (или уређује датотеку) као наведени корисник" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "приказује податке о издању и излази" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "освежава кориснички запис датума и времена без покретања наредбе" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "зауставља обрађивање аргумената линије наредби" @@ -563,7 +572,7 @@ msgid "unable to run %s as a login shell" msgstr "не могу да покренем „%s“ као шкољку пријављивања" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим %s" @@ -648,97 +657,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "неочекивани судо режим 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "не могу да добавим вектор групе" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "непознати уид %u: ко сте ви?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "не могу да одредим конзолу" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s мора бити власништвo уида %d и треба да има подешен бит „setuid“" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "стварни уид није %d, већ %s на систему датотека са подешеном опцијом „nosuid“ или је НФС систем датотека без администраторских привилегија?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "стварни уид није %d, већ сетуид администратор инсталиран судоом?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "не могу да подесим додатне ИБ-ове групе" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не могу да подесим ефективан гид да се покрене_као гид %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не могу да подесим гид да се покрене као гид %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "непозната класа пријаве %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "не могу да подесим кориснички контекст" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "не могу да подесим приоритет процеса" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "не могу да променим администратора на %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не могу да се пребацим у покрени_као уид (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "не могу да променим директоријум у %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочекивани услов завршетка потпроцеса: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "прикључак сигурности %s не садржи метод „check_policy“" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "прикључак сигурности %s не подржава привилегије исписивања" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "прикључак сигурности %s не подржава опцију -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "прикључак сигурности %s не подржава опције -k/-K" @@ -861,6 +870,9 @@ msgid "unable to restore stdin" msgstr "не могу да повратим стандардни улаз" +#~ msgid "error reading from pipe" +#~ msgstr "грешка у читању из спојке" + #~ msgid "internal error, tried allocate zero bytes" #~ msgstr "унутрашња грешка, покушах да доделим нула бајта" diff -Nru sudo-1.8.19p1/po/sudo.pot sudo-1.8.20p2/po/sudo.pot --- sudo-1.8.19p1/po/sudo.pot 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/sudo.pot 2017-05-10 15:38:44.000000000 +0000 @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19\n" +"Project-Id-Version: sudo 1.8.20\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -31,36 +31,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "" @@ -69,18 +70,18 @@ msgid "Unknown signal" msgstr "" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "" @@ -134,84 +135,88 @@ msgid "unable to open %s" msgstr "" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "" - -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 -msgid "unable to add event to queue" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "" -#: src/exec.c:391 -msgid "unable to create sockets" +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" msgstr "" -#: src/exec.c:446 -msgid "policy plugin failed session initialization" +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" msgstr "" -#: src/exec.c:491 -msgid "error in event loop" +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" msgstr "" -#: src/exec.c:509 -msgid "unable to restore tty label" +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 +msgid "unable to add event to queue" msgstr "" -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 -#, c-format -msgid "unable to restore handler for signal %d" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" msgstr "" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" msgstr "" -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" msgstr "" -#: src/exec_pty.c:188 -msgid "unable to allocate pty" +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" msgstr "" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 src/exec_pty.c:1339 -#: src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" +#: src/exec_nopty.c:233 src/exec_pty.c:1240 +msgid "policy plugin failed session initialization" msgstr "" -#: src/exec_pty.c:1269 -msgid "error reading from pipe" +#: src/exec_nopty.c:281 src/exec_pty.c:1278 +msgid "error in event loop" msgstr "" -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 +#, c-format +msgid "unable to restore handler for signal %d" msgstr "" -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" +#: src/exec_pty.c:133 +msgid "unable to allocate pty" msgstr "" -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" msgstr "" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 @@ -281,176 +286,180 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "" "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" "\n" msgstr "" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" "\n" msgstr "" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" "Options:\n" msgstr "" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "" "list user's privileges or check a specific command; use twice for longer " "format" msgstr "" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "" @@ -560,7 +569,7 @@ msgid "unable to run %s as a login shell" msgstr "" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "" @@ -645,99 +654,99 @@ msgid "unexpected sudo mode 0x%x" msgstr "" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "" "effective uid is not %d, is %s on a file system with the 'nosuid' option set " "or an NFS file system without root privileges?" msgstr "" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/sv.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/sv.mo differ diff -Nru sudo-1.8.19p1/po/sv.po sudo-1.8.20p2/po/sv.po --- sudo-1.8.19p1/po/sv.po 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/po/sv.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,24 +1,24 @@ # Swedish translation for sudo. -# Copyright © 2012, 2016 Free Software Foundation, Inc. +# Copyright © 2012, 2016, 2017 Free Software Foundation, Inc. # This file is put in the public domain. # Daniel Nylander , 2012. -# Sebastian Rasmussen , 2016. +# Sebastian Rasmussen , 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.18b4\n" +"Project-Id-Version: sudo 1.8.19b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-08-31 05:48-0600\n" -"PO-Revision-Date: 2016-09-04 22:36+0800\n" +"POT-Creation-Date: 2016-11-21 17:45-0700\n" +"PO-Revision-Date: 2017-01-14 01:06+0100\n" "Last-Translator: Sebastian Rasmussen \n" "Language-Team: Swedish \n" "Language: sv\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.8\n" +"X-Generator: Poedit 1.8.11\n" "X-Poedit-Bookmarks: -1,0,-1,-1,-1,-1,-1,-1,-1,-1\n" #: lib/util/aix.c:85 lib/util/aix.c:172 @@ -35,38 +35,38 @@ msgstr "kunde inte återställa registret" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 -#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 -#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:868 +#: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 #: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 #: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 #: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 #: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 #: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:485 src/preserve_fds.c:47 +#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 #: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:399 src/sudo.c:418 -#: src/sudo.c:482 src/sudo.c:600 src/sudo.c:660 src/sudo.c:670 src/sudo.c:690 -#: src/sudo.c:709 src/sudo.c:718 src/sudo.c:727 src/sudo.c:744 src/sudo.c:785 -#: src/sudo.c:795 src/sudo.c:815 src/sudo.c:1236 src/sudo.c:1257 -#: src/sudo.c:1431 src/sudo.c:1525 src/sudo_edit.c:151 src/sudo_edit.c:773 -#: src/sudo_edit.c:870 src/sudo_edit.c:983 src/sudo_edit.c:1003 +#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 +#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 +#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 +#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 +#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 +#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 -#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 -#: src/conversation.c:76 src/exec.c:868 src/exec_common.c:107 +#: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 +#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 #: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 #: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 #: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 #: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:399 src/sudo.c:418 src/sudo.c:482 src/sudo.c:600 -#: src/sudo.c:815 src/sudo.c:1236 src/sudo.c:1257 src/sudo.c:1431 -#: src/sudo.c:1525 src/sudo_edit.c:151 src/sudo_edit.c:773 src/sudo_edit.c:870 -#: src/sudo_edit.c:983 src/sudo_edit.c:1003 +#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 +#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 +#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "kunde inte allokera minne" @@ -74,93 +74,93 @@ msgid "Unknown signal" msgstr "Okänd signal" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 #: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ogiltigt värde" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 #: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "värde för stort" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 #: lib/util/strtonum.c:182 msgid "value too small" msgstr "värde för litet" -#: lib/util/sudo_conf.c:223 +#: lib/util/sudo_conf.c:203 #, c-format -msgid "invalid Path value `%s' in %s, line %u" +msgid "invalid Path value \"%s\" in %s, line %u" msgstr "ogiltigt Path-värde ”%s” i %s, rad %u" -#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 +#: lib/util/sudo_conf.c:369 lib/util/sudo_conf.c:422 #, c-format -msgid "invalid value for %s `%s' in %s, line %u" +msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "ogiltigt värde för %s ”%s” i %s, rad %u" -#: lib/util/sudo_conf.c:410 +#: lib/util/sudo_conf.c:390 #, c-format -msgid "unsupported group source `%s' in %s, line %u" +msgid "unsupported group source \"%s\" in %s, line %u" msgstr "gruppkälla ”%s” stöds ej i %s, rad %u" -#: lib/util/sudo_conf.c:426 +#: lib/util/sudo_conf.c:406 #, c-format -msgid "invalid max groups `%s' in %s, line %u" +msgid "invalid max groups \"%s\" in %s, line %u" msgstr "ogiltigt största antal grupper ”%s” i %s, rad %u" -#: lib/util/sudo_conf.c:585 +#: lib/util/sudo_conf.c:561 #, c-format msgid "unable to stat %s" msgstr "kunde inte ta status på %s" -#: lib/util/sudo_conf.c:588 +#: lib/util/sudo_conf.c:564 #, c-format msgid "%s is not a regular file" msgstr "%s är inte en vanlig fil" -#: lib/util/sudo_conf.c:591 +#: lib/util/sudo_conf.c:567 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s ägs av uid %u, ska vara %u" -#: lib/util/sudo_conf.c:595 +#: lib/util/sudo_conf.c:571 #, c-format msgid "%s is world writable" msgstr "%s är skrivbar för alla" -#: lib/util/sudo_conf.c:598 +#: lib/util/sudo_conf.c:574 #, c-format msgid "%s is group writable" msgstr "%s är skrivbar för gruppen" -#: lib/util/sudo_conf.c:608 src/selinux.c:201 src/selinux.c:213 src/sudo.c:368 +#: lib/util/sudo_conf.c:584 src/selinux.c:201 src/selinux.c:213 src/sudo.c:366 #, c-format msgid "unable to open %s" msgstr "kunde inte öppna %s" #: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 #: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:795 +#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 #: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1353 src/exec_pty.c:1355 -#: src/exec_pty.c:1369 src/exec_pty.c:1380 src/exec_pty.c:1382 -#: src/exec_pty.c:1384 src/exec_pty.c:1386 src/exec_pty.c:1388 -#: src/exec_pty.c:1390 src/exec_pty.c:1392 src/signal.c:148 src/signal.c:162 +#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 +#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 +#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 +#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 +#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "kunde inte ställa in hanterare för signal %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1430 src/tgetpass.c:259 +#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 msgid "unable to fork" msgstr "kunde inte grena process" -#: src/exec.c:303 src/exec.c:311 src/exec.c:873 src/exec_pty.c:585 +#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 #: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 #: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1495 src/exec_pty.c:1502 -#: src/exec_pty.c:1509 +#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 +#: src/exec_pty.c:1510 msgid "unable to add event to queue" msgstr "kunde inte lägga till händelse till kö" @@ -185,7 +185,7 @@ msgid "unable to restore handler for signal %d" msgstr "kunde inte återställa hanterare för signal %d" -#: src/exec.c:726 src/exec_pty.c:1235 +#: src/exec.c:726 src/exec_pty.c:1236 msgid "error reading from signal pipe" msgstr "fel vid läsning från signalrör" @@ -198,24 +198,24 @@ msgstr "kunde inte allokera pty" #: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1338 src/exec_pty.c:1427 src/signal.c:129 src/tgetpass.c:255 +#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 msgid "unable to create pipe" msgstr "kunde inte skapa rör" -#: src/exec_pty.c:1268 +#: src/exec_pty.c:1269 msgid "error reading from pipe" msgstr "fel vid läsning från rör" -#: src/exec_pty.c:1295 +#: src/exec_pty.c:1296 msgid "error reading from socketpair" msgstr "fel vid läsning från uttagspar" -#: src/exec_pty.c:1304 +#: src/exec_pty.c:1305 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "oväntad svarstyp i bakkanal: %d" -#: src/exec_pty.c:1406 +#: src/exec_pty.c:1407 msgid "unable to set controlling tty" msgstr "kan inte ställa in kontrollerande tty" @@ -224,7 +224,7 @@ #: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 #: src/load_plugins.c:191 #, c-format -msgid "error in %s, line %d while loading plugin `%s'" +msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "fel i %s, rad %d under inläsning av insticksmodul ”%s”" #: src/load_plugins.c:87 @@ -249,7 +249,7 @@ #: src/load_plugins.c:180 #, c-format -msgid "unable to find symbol `%s' in %s" +msgid "unable to find symbol \"%s\" in %s" msgstr "kunde inte hitta symbol ”%s” i %s" #: src/load_plugins.c:187 @@ -264,7 +264,7 @@ #: src/load_plugins.c:202 #, c-format -msgid "ignoring policy plugin `%s' in %s, line %d" +msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignorerar policyinsticksmodul ”%s” i %s, rad %d" #: src/load_plugins.c:204 @@ -273,12 +273,12 @@ #: src/load_plugins.c:207 #, c-format -msgid "ignoring duplicate policy plugin `%s' in %s, line %d" +msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" msgstr "ignorerar dubblerad policyinsticksmodul ”%s” i %s, rad %d" #: src/load_plugins.c:228 #, c-format -msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" +msgid "ignoring duplicate I/O plugin \"%s\" in %s, line %d" msgstr "ignorerar dubblerad I/O-insticksmodul ”%s” i %s, rad %d" #: src/load_plugins.c:331 @@ -286,7 +286,7 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "policyinsticksmodul %s inkluderar inte en check_policy-metod" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:477 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 #, c-format msgid "internal error, %s overflow" msgstr "internt fel, %s spill" @@ -319,15 +319,15 @@ msgid "the `-A' and `-S' options may not be used together" msgstr "flaggorna ”-A” och ”-S” får inte användas tillsammans" -#: src/parse_args.c:504 +#: src/parse_args.c:510 msgid "sudoedit is not supported on this platform" msgstr "sudoedit stöds inte på denna plattform" -#: src/parse_args.c:577 +#: src/parse_args.c:583 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Endast en av flaggorna -e, -h, -i, -K, -l, -s, -v eller -V får anges" -#: src/parse_args.c:591 +#: src/parse_args.c:597 #, c-format msgid "" "%s - edit files as another user\n" @@ -336,7 +336,7 @@ "%s - redigera filer som en annan användare\n" "\n" -#: src/parse_args.c:593 +#: src/parse_args.c:599 #, c-format msgid "" "%s - execute a command as another user\n" @@ -345,7 +345,7 @@ "%s - kör ett kommando som en annan användare\n" "\n" -#: src/parse_args.c:598 +#: src/parse_args.c:604 #, c-format msgid "" "\n" @@ -354,111 +354,111 @@ "\n" "Flaggor:\n" -#: src/parse_args.c:600 +#: src/parse_args.c:606 msgid "use a helper program for password prompting" msgstr "använd hjälpprogram för att fråga efter lösenord" -#: src/parse_args.c:603 +#: src/parse_args.c:609 msgid "use specified BSD authentication type" msgstr "använd angiven BSD-autentiseringstyp" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "run command in the background" msgstr "kör kommando i bakgrunden" -#: src/parse_args.c:608 +#: src/parse_args.c:614 msgid "close all file descriptors >= num" msgstr "stäng alla fildeskriptorer >= num" -#: src/parse_args.c:611 +#: src/parse_args.c:617 msgid "run command with the specified BSD login class" msgstr "kör kommando med den angivna BSD-inloggningsklassen" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "preserve user environment when running command" msgstr "bevara användarens miljö när kommandot körs" -#: src/parse_args.c:616 +#: src/parse_args.c:622 msgid "edit files instead of running a command" msgstr "redigera filer istället för att köra ett kommando" -#: src/parse_args.c:618 +#: src/parse_args.c:624 msgid "run command as the specified group name or ID" msgstr "kör kommando som angivet gruppnamn eller ID" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "set HOME variable to target user's home dir" msgstr "ställ in HOME-variabeln till målanvändarens hemkatalog" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "display help message and exit" msgstr "visa hjälpmeddelande och avsluta" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command on host (if supported by plugin)" msgstr "kör kommando på värd (om det stöds av instick)" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "run login shell as the target user; a command may also be specified" msgstr "kör ett inloggningsskal som målanvändaren; ett kommando kan också anges" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "remove timestamp file completely" msgstr "ta bort tidsstämpelfil helt" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "invalidate timestamp file" msgstr "ogiltigförklara tidsstämpelfil" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "lista användarens rättigheter eller kontrollera ett specifikt kommando; använd två gånger för längre format" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "non-interactive mode, no prompts are used" msgstr "icke-interaktivt läge, inga frågor ställs" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "preserve group vector instead of setting to target's" msgstr "behåll gruppvektor istället för att ställa in den till målets" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "use the specified password prompt" msgstr "använd angiven lösenordsprompt" -#: src/parse_args.c:641 +#: src/parse_args.c:647 msgid "create SELinux security context with specified role" msgstr "skapa SELinux-säkerhetskontext med angiven roll" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "read password from standard input" msgstr "läs lösenord från standard in" -#: src/parse_args.c:646 +#: src/parse_args.c:652 msgid "run shell as the target user; a command may also be specified" msgstr "kör skal som målanvändaren; ett kommando kan också anges" -#: src/parse_args.c:649 +#: src/parse_args.c:655 msgid "create SELinux security context with specified type" msgstr "skapa SELinux-säkerhetskontext med angiven typ" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "in list mode, display privileges for user" msgstr "i listläge, visa rättigheter för användaren" -#: src/parse_args.c:654 +#: src/parse_args.c:660 msgid "run command (or edit file) as specified user name or ID" msgstr "kör kommando (eller redigera fil) som angivet användarnamn eller ID" -#: src/parse_args.c:656 +#: src/parse_args.c:662 msgid "display version information and exit" msgstr "visa versionsinformation och avsluta" -#: src/parse_args.c:658 +#: src/parse_args.c:664 msgid "update user's timestamp without running a command" msgstr "uppdatera användarens tidsstämpel utan att köra ett kommando" -#: src/parse_args.c:660 +#: src/parse_args.c:666 msgid "stop processing command line arguments" msgstr "sluta behandla kommandoradsargument" @@ -568,7 +568,7 @@ msgid "unable to run %s as a login shell" msgstr "kunde inte köra %s som ett inloggningsskal" -#: src/sesh.c:125 src/sudo.c:1295 +#: src/sesh.c:125 src/sudo.c:1297 #, c-format msgid "unable to execute %s" msgstr "kunde inte köra %s" @@ -621,129 +621,129 @@ msgid "warning, resource control assignment failed for project \"%s\"" msgstr "varning, tilldelning av resurskontroll misslyckades för projekt ”%s”" -#: src/sudo.c:215 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:217 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Konfigurationsflaggor: %s\n" -#: src/sudo.c:225 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "ödesdigert fel, kunde inte läsa in insticksmoduler" -#: src/sudo.c:233 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "kan inte initiera policy-instick" -#: src/sudo.c:277 +#: src/sudo.c:274 msgid "plugin did not return a command to execute" msgstr "insticksmodul returnerade ett kommando att exekvera" -#: src/sudo.c:293 +#: src/sudo.c:290 #, c-format msgid "error initializing I/O plugin %s" msgstr "fel vid initiering av I/O-insticksmodul %s" -#: src/sudo.c:319 +#: src/sudo.c:316 #, c-format msgid "unexpected sudo mode 0x%x" -msgstr "oväntad sudo-läge 0x%x" +msgstr "oväntat sudo-läge 0x%x" -#: src/sudo.c:462 +#: src/sudo.c:460 msgid "unable to get group vector" msgstr "kan inte hämta gruppvektor" -#: src/sudo.c:523 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "okänt uid %u: vem är du?" -#: src/sudo.c:574 +#: src/sudo.c:578 msgid "unable to determine tty" msgstr "kan inte detektera tty" -#: src/sudo.c:864 +#: src/sudo.c:866 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s måste ägas av uid %d och ha setuid-biten inställd" -#: src/sudo.c:867 +#: src/sudo.c:869 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "effektivt uid är inte %d, är %s på ett filsystem med flaggan ”nosuid” inställd eller ett NFS-filsystem utan root-rättigheter?" -#: src/sudo.c:873 +#: src/sudo.c:875 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "effektivt uid är inte %d, har sudo installerats som setuid root?" -#: src/sudo.c:954 +#: src/sudo.c:956 msgid "unable to set supplementary group IDs" msgstr "kan inte ställa in kompletterande grupp-ID:n" -#: src/sudo.c:961 +#: src/sudo.c:963 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "kunde inte ställa in effektiv gid till runas gid %u" -#: src/sudo.c:967 +#: src/sudo.c:969 #, c-format msgid "unable to set gid to runas gid %u" msgstr "kunde inte ställa in gid för runas gid %u" -#: src/sudo.c:1038 +#: src/sudo.c:1040 #, c-format msgid "unknown login class %s" msgstr "okänd inloggningsklass %s" -#: src/sudo.c:1051 +#: src/sudo.c:1053 msgid "unable to set user context" msgstr "kunde inte ställa in användarens kontext" -#: src/sudo.c:1067 +#: src/sudo.c:1069 msgid "unable to set process priority" msgstr "kunde inte ställa in processprioritet" -#: src/sudo.c:1075 +#: src/sudo.c:1077 #, c-format msgid "unable to change root to %s" msgstr "kunde inte ändra rot till %s" -#: src/sudo.c:1088 src/sudo.c:1094 src/sudo.c:1101 +#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "kunde inte ändra till runas uid (%u, %u)" -#: src/sudo.c:1119 +#: src/sudo.c:1121 #, c-format msgid "unable to change directory to %s" msgstr "kunde inte ändra katalog till %s" -#: src/sudo.c:1177 +#: src/sudo.c:1179 #, c-format msgid "unexpected child termination condition: %d" msgstr "oväntat barnavslutsvillkor: %d" -#: src/sudo.c:1323 +#: src/sudo.c:1325 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "policyinsticksmodul %s saknar metoden ”check_policy”" -#: src/sudo.c:1341 +#: src/sudo.c:1343 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "policyinsticksmodul %s har inte stöd för att lista rättigheter" -#: src/sudo.c:1358 +#: src/sudo.c:1360 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "policyinsticksmodul %s har inte stöd för flaggan -v" -#: src/sudo.c:1373 +#: src/sudo.c:1375 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "policyinsticksmodul %s har inte stöd för flaggorna -k/-K" @@ -752,82 +752,82 @@ msgid "unable to restore current working directory" msgstr "kunde inte återställa aktuell arbetskatalog" -#: src/sudo_edit.c:576 src/sudo_edit.c:687 +#: src/sudo_edit.c:577 src/sudo_edit.c:689 #, c-format msgid "%s: not a regular file" msgstr "%s: inte en vanlig fil" -#: src/sudo_edit.c:583 +#: src/sudo_edit.c:584 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: att redigera symboliska länkar är inte tillåtet" -#: src/sudo_edit.c:586 +#: src/sudo_edit.c:587 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: att redigera filer i en skrivbar katalog är inte tillåtet" -#: src/sudo_edit.c:619 src/sudo_edit.c:726 +#: src/sudo_edit.c:620 src/sudo_edit.c:728 #, c-format msgid "%s: short write" msgstr "%s: kort skrivning" -#: src/sudo_edit.c:688 +#: src/sudo_edit.c:690 #, c-format msgid "%s left unmodified" msgstr "%s lämnad oförändrad" -#: src/sudo_edit.c:701 src/sudo_edit.c:887 +#: src/sudo_edit.c:703 src/sudo_edit.c:889 #, c-format msgid "%s unchanged" msgstr "%s oförändrad" -#: src/sudo_edit.c:715 src/sudo_edit.c:737 +#: src/sudo_edit.c:717 src/sudo_edit.c:739 #, c-format msgid "unable to write to %s" msgstr "kunde inte skriva till %s" -#: src/sudo_edit.c:716 src/sudo_edit.c:735 src/sudo_edit.c:738 -#: src/sudo_edit.c:912 src/sudo_edit.c:916 +#: src/sudo_edit.c:718 src/sudo_edit.c:737 src/sudo_edit.c:740 +#: src/sudo_edit.c:914 src/sudo_edit.c:918 #, c-format msgid "contents of edit session left in %s" msgstr "innehåll av redigeringssession finns kvar i %s" -#: src/sudo_edit.c:734 +#: src/sudo_edit.c:736 msgid "unable to read temporary file" msgstr "kunde inte läsa temporärfil" -#: src/sudo_edit.c:817 +#: src/sudo_edit.c:819 msgid "sesh: internal error: odd number of paths" msgstr "sesh: internt fel: udda antal sökvägar" -#: src/sudo_edit.c:819 +#: src/sudo_edit.c:821 msgid "sesh: unable to create temporary files" msgstr "sesh: kunde inte skapa temporärfiler" -#: src/sudo_edit.c:821 src/sudo_edit.c:919 +#: src/sudo_edit.c:823 src/sudo_edit.c:921 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: okänt fel %d" -#: src/sudo_edit.c:911 +#: src/sudo_edit.c:913 msgid "unable to copy temporary files back to their original location" msgstr "kan inte kopiera temporära filer tillbaka till deras originalplats" -#: src/sudo_edit.c:915 +#: src/sudo_edit.c:917 msgid "unable to copy some of the temporary files back to their original location" msgstr "kan inte kopiera vissa av de temporära filerna tillbaka till deras originalplats" -#: src/sudo_edit.c:959 +#: src/sudo_edit.c:961 #, c-format msgid "unable to change uid to root (%u)" msgstr "kunde inte ändra uid till root (%u)" -#: src/sudo_edit.c:976 +#: src/sudo_edit.c:978 msgid "plugin error: missing file list for sudoedit" msgstr "insticksfel: fillista för sudoedit saknas" -#: src/sudo_edit.c:1017 src/sudo_edit.c:1030 +#: src/sudo_edit.c:1019 src/sudo_edit.c:1032 msgid "unable to read the clock" msgstr "kunde inte läsa klockan" @@ -839,17 +839,17 @@ msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "inget askpass-program angivet, prova att ställ in SUDO_ASKPASS" -#: src/tgetpass.c:270 +#: src/tgetpass.c:261 #, c-format msgid "unable to set gid to %u" msgstr "kunde inte ställa in gid till %u" -#: src/tgetpass.c:274 +#: src/tgetpass.c:265 #, c-format msgid "unable to set uid to %u" msgstr "kunde inte ställa in uid till %u" -#: src/tgetpass.c:279 +#: src/tgetpass.c:270 #, c-format msgid "unable to run %s" msgstr "kunde inte köra %s" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/tr.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/tr.mo differ diff -Nru sudo-1.8.19p1/po/tr.po sudo-1.8.20p2/po/tr.po --- sudo-1.8.19p1/po/tr.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/tr.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,13 @@ # This file is put in the public domain. # This file is distributed under the same license as the sudo package. # Volkan Gezer , 2013, 2015. -# Mehmet Kececi , 2016. +# Mehmet Kececi , 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 14:22+0400\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 11:52+0300\n" "Last-Translator: Mehmet Kececi \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -33,36 +33,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "bellek ayırma başarısız" @@ -71,18 +72,18 @@ msgid "Unknown signal" msgstr "Bilinmeyen sinyal" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "geçersiz değer" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "değer çok büyük" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "değer çok küçük" @@ -136,85 +137,89 @@ msgid "unable to open %s" msgstr "%s açılamıyor" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "sinyal %d için işleyici ayarlanamıyor" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "çatallanamıyor" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "PRIV_LIMIT'ten PRIV_PROC_EXEC kaldırılamıyor" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "sinyal tünelinden okuma hatası" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "sockerpair'den okuma hatası" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "backchannel'da beklenmeyen yanıt türü: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "olay kuyruğa eklenemedi" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "soket oluşturulamıyor" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "iletişim tüneli oluşturulamıyor" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "tty denetleme ayarlaması başarısız" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "çatallanamıyor" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "tty etiketi geri yüklenemiyor" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "oturum başlatma için ilke eklentisi başarısız" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "olay döngüsünde hata" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "tty etiketi geri yüklenemiyor" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "sinyal %d için işleyici geri yüklenemiyor" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "sinyal tünelinden okuma hatası" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "PRIV_LIMIT'ten PRIV_PROC_EXEC kaldırılamıyor" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "pty ayırma başarısız" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "iletişim tüneli oluşturulamıyor" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "tünelden okuma hatası" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "sockerpair'den okuma hatası" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "backchannel'da beklenmeyen yanıt türü: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "tty denetleme ayarlaması başarısız" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "soket oluşturulamıyor" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -283,48 +288,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "%s ilke eklentisi, bir check_policy yöntemi içermiyor" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "dahili hata, %s taşması" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C argümanı 3 veya daha büyük bir sayı olmalıdır" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "`-i' ve `-s' seçeneklerini aynı anda belirtemezsiniz" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "`-i' ve `-E' seçeneklerini aynı anda belirtemezsiniz" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "düzenleme kipinde `-E' seçeneği geçerli değil" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "düzenleme kipinde ortam değişkenlerini belirtemezsiniz" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "`-U' seçeneği sadece `-l' seçeneği ile kullanılabilir" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "`-A' ve `-S' seçenekleri birlikte kullanılamaz" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit bu platformda desteklenmiyor" -#: src/parse_args.c:583 +#: src/parse_args.c:589 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 veya -V seçeneklerinden sadece biri belirtilebilir" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -333,7 +338,7 @@ "%s - dosyaları farklı kullanıcı olarak düzenle\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -342,7 +347,7 @@ "%s - bir komutu farklı kullanıcı olarak çalıştır\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -351,111 +356,115 @@ "\n" "Seçenekler:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "parola sorgulaması için bir yardımcı program kullan" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "belirtilen BSD kimlik doğrulama türünü kullan" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "Arkaplanda komut çalıştır" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr ">= sayı olan tüm dosya tanımlayıcılarını kapat" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "komutu belirtilen BSD oturum sınıfı ile çalıştır" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "komut çalıştırılırken kullanıcı ortamını koru" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "Komut çalıştırmak yerine dosyaları düzenleyiniz" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "Grup adı veya ID olarak tanımlanan komutu çalıştır" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "HOME değişkenini kullanıcının ev dizinine hedefle" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "Yardım mesajını görüntüle ve çık" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "komutunuzu hostta çalıştırın (eğer plugin tarafından destekleniyorsa)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "oturum kabuğunu hedef kullanıcı olarak çalıştır; bir komut da belirtilebilir" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "zaman damgası dosyasını kalıcı olarak kaldır" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "zaman damgası dosyasının geçerliliğini kaldır" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "kullanıcı yetkilerini listele veya özel bir komut denetle; daha uzun biçim için iki kez kullanın" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "etkileşimsiz kip, sorgu yapılmaz" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "hedefe atamak yerine grup vektörünü koru" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "belirtilen parola sorgusunu kullan" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "SELinux güvenlik bağlamını belirtilen rol ile oluştur" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "standart girdiden şifreyi okuyun" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "kabuğu hedef kullanıcı olarak çalıştır; bir komut da belirtilebilir" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "SELinux güvenlik bağlamını belirtilen tür ile oluştur" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "belirtilen süre sonunda komutu sonlandır" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "liste modunda, kullanıcıların ayrıcalıklarını görüntüle" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "Belirtilen kullanıcı adı veya ID ile komutu çalıştırın (veya dosyayı düzenleyin)" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "sürüm bilgisini göster ve çık" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "kullanıcı zaman damgasını bir komut çalıştırmadan güncelle" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "komut satırı argümanlarını işlemeyi durdur" @@ -565,7 +574,7 @@ msgid "unable to run %s as a login shell" msgstr "bir oturum açma kabuğu gibi %s çalıştırılamıyor" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "%s çalıştırılamıyor" @@ -650,97 +659,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "beklenmeyen 0x%x sudo kipi" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "grup vektörü alınamıyor" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "bilinmeyen kullanıcı kimliği %u: kimsiniz?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "tty belirlenemiyor" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s, %d kullanıcı kimliği tarafından sahiplenmeli ve setuid biti ayarlanmış olmalı" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "etkin kullanıcı kimliği %d değil, %s 'nosuid' seçeneği ayarlanmış bir dosya sisteminde veya yetkisiz haklara sahip bir NFS dosya sisteminde mi?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "etkin kullanıcı kimliği %d değil, sudo setuid root ile mi yüklendi?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "ek grup kimlikleri ayarlanamıyor" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "etkin grup kimliği, runas gid %u olarak ayarlanamıyor" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "grup kimliği, runas gid %u olarak ayarlanamıyor" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "bilinmeyen \"%s\" oturum sınıfı" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "kullanıcı bağlamı ayarlama başarısız" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "süreç önceliği ayarlanamıyor" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "kök %s olarak değiştirilemiyor" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "runas uid (%u, %u) olarak değiştirilemiyor" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "%s dizinine değiştirilemiyor" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "beklenmeyen alt sonlandırma şartı: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "%s ilke eklentisi, bir `check_policy' yöntemi içermiyor" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "%s ilke eklentisi listeleme yetkilerini desteklemiyor" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "%s ilke eklentisi -v seçeneğini desteklemiyor" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "%s ilke eklentisi -k/-K seçeneklerini desteklemiyor" @@ -863,6 +872,9 @@ msgid "unable to restore stdin" msgstr "stdin geri yüklenemiyor" +#~ msgid "error reading from pipe" +#~ msgstr "tünelden okuma hatası" + #, fuzzy #~| msgid "internal error, tried to emalloc(0)" #~ msgid "internal error, tried allocate zero bytes" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/uk.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/uk.mo differ diff -Nru sudo-1.8.19p1/po/uk.po sudo-1.8.20p2/po/uk.po --- sudo-1.8.19p1/po/uk.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/uk.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,13 +1,13 @@ # Ukrainian translation for sudo. # This file is put in the public domain. # -# Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016. +# Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016, 2017. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 16:55+0200\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 11:49+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -33,36 +33,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "не вдалося отримати потрібний об’єм пам’яті" @@ -71,18 +72,18 @@ msgid "Unknown signal" msgstr "Невідомий сигнал" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "некоректне значення" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "надто велике значення" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "надто мале значення" @@ -136,85 +137,89 @@ msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "не вдалося встановити обробник для сигналу %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "не вдалося створити відгалуження" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "не вдалося вилучити PRIV_PROC_EXEC з PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "помилка під час спроби читання з каналу сигналів" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "помилка під час спроби читання з пари сокетів" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "неочікуваний тип відповіді на зворотному каналі: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "не вдалося додати подію до черги обробки" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "не вдалося створити сокети" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "не вдалося створити канал" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "не вдалося встановити tty для керування" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "не вдалося створити відгалуження" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "не вдалося відновити позначку tty" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "не вдалося виконати ініціалізацію сеансу через додаток правил" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "помилка у циклі обробки подій" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "не вдалося відновити позначку tty" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "не вдалося відновити обробник для сигналу %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "помилка під час спроби читання з каналу сигналів" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "не вдалося вилучити PRIV_PROC_EXEC з PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "не вдалося розмістити pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "не вдалося створити канал" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "помилка під час спроби читання з каналу" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "помилка під час спроби читання з пари сокетів" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "неочікуваний тип відповіді на зворотному каналі: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "не вдалося встановити tty для керування" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "не вдалося створити сокети" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -283,48 +288,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "до додатка правил %s не включено метод check_policy" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "внутрішня помилка, переповнення %s" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргументом параметра -C mмає бути число не менше за 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "не можна одночасно вказувати параметри «-i» і «-s»" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "не можна одночасно вказувати параметри «-i» і «-E»" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "не можна використовувати «-E» у режимі редагування" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "не можна вказувати змінні середовища у режимі редагування" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "параметр «-U» можна використовувати лише разом з параметром «-l»" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "параметри «-A» і «-S» не можна використовувати одночасно" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "підтримки sudoedit для цієї платформи не передбачено" -#: src/parse_args.c:583 +#: src/parse_args.c:589 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:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -333,7 +338,7 @@ "%s — редагувати файли від імені іншого користувача\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -342,7 +347,7 @@ "%s — виконати команду від імені іншого користувача\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -351,111 +356,115 @@ "\n" "Параметри:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "використовувати допоміжну програму для запитів щодо пароля" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "використовувати вказаний тип розпізнавання BSD" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "виконати команду у фоновому режимі" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "закрити всі дескриптори файлів >= num" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "виконати команду з вказаним класом доступу BSD" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "зберегти середовище користувача на час виконання команди" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "редагувати файли замість виконання команди" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "виконати команду від імені групи користувачів, вказаної за назвою або ідентифікатором" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "встановити для змінної HOME значення домашнього каталогу вказаного користувача." -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "показати довідкове повідомлення і завершити роботу" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "виконати команду на комп’ютері (якщо підтримується додатком)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "запустити оболонку для входу до системи від імені вказаного користувача; слід вказати команду запуску" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "повністю вилучити файл часової позначки" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "позбавити чинності файл часової позначки" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "показати список прав доступу користувача або перевірити певну команду; подвоєння параметра призводить до виведення додаткових даних" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "неінтерактивний режим, не просити користувача відповідати на питання" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "зберегти вектор групи, не встановлювати вектор вказаного користувача" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "використовувати вказаний інструмент отримання паролів" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "створити контекст захисту SELinux з вказаною роллю" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "прочитати пароль зі стандартного джерела вхідних даних" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "виконати командну оболонку від імені вказаного користувача; слід також вказати команду" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "створити контекст захисту SELinux вказаного типу" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "перервати виконання команди щойно буде перевищено вказане обмеження за часом" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "у режимі списку, показати права доступу користувача" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "виконати команду (або редагувати файл) від імені користувача, вказаного за іменем або ідентифікатором" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "показати дані щодо версії і завершити роботу" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "оновити штамп часу користувача без виконання команди" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "зупинити обробку аргументів командного рядка" @@ -565,7 +574,7 @@ msgid "unable to run %s as a login shell" msgstr "%s не можна працювати як оболонка для входу" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" @@ -650,97 +659,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "неочікуваний режим sudo 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "не вдалося отримати вектор групи" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "невідомий uid %u: хто ви такий?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "не вдалося визначити tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s має належати користувачеві з uid %d, крім того, має бути встановлено біт setuid" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "поточним uid не є %d. Можливо %s зберігається у файловій системі зі встановленим параметром «nosuid» або у файловій системі NFS без прав доступу root?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "поточним uid не є %d, sudo встановлено з ідентифікатором користувача root?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "не вдалося встановити ідентифікатори додаткових груп" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не вдалося встановити ефективний ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не вдалося встановити ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "невідомий клас входу %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "не вдалося встановити контекст користувача" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "не вдалося встановити пріоритет процесу" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "не вдалося змінити root на %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не вдалося змінити uid користувача, від імені якого відбувається виконання (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "не вдалося змінити каталог на %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочікувана умова переривання дочірнього процесу: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "до додатка правил %s не включено метод «check_policy»" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "у додатку правил %s не передбачено підтримки побудови списку прав доступу" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "у додатку правил %s не передбачено підтримки параметра -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "у додатку правил %s не передбачено підтримки параметрів -k/-K" @@ -863,6 +872,9 @@ msgid "unable to restore stdin" msgstr "не вдалося відновити stdin" +#~ msgid "error reading from pipe" +#~ msgstr "помилка під час спроби читання з каналу" + #~ msgid "internal error, tried allocate zero bytes" #~ msgstr "внутрішня помилка, спроба розміщення нуля байтів" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/vi.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/vi.mo differ diff -Nru sudo-1.8.19p1/po/vi.po sudo-1.8.20p2/po/vi.po --- sudo-1.8.19p1/po/vi.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/vi.po 2017-05-10 15:38:43.000000000 +0000 @@ -1,14 +1,14 @@ # Vietnamese translation for sudo. # Bản dịch tiếng Việt dành cho sudo. # This file is put in the public domain. -# Trần Ngọc Quân , 2012-2014, 2015, 2016. +# Trần Ngọc Quân , 2012-2014, 2015, 2016, 2017. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.19b1\n" +"Project-Id-Version: sudo 1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-29 07:05+0700\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-28 13:45+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -38,36 +38,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "không thể cấp phát bộ nhớ" @@ -76,18 +77,18 @@ msgid "Unknown signal" msgstr "Không hiểu tín hiệu" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "giá trị không hợp lệ" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "giá trị quá lớn" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "giá trị quá nhỏ" @@ -141,85 +142,89 @@ msgid "unable to open %s" msgstr "không thể mở “%s”" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "không thể đặt bộ tiếp hợp cho tín hiệu %d" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "không thể tạo tiến trình con" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "không thể xóa bỏ PRIV_PROC_EXEC từ PRIV_LIMIT" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "lỗi khi đọc từ đường ống dẫn tín hiệu" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "gặp lỗi khi đọc từ socketpair" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "kiểu trả về không như mong đợi từ backchannel: %d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "không thể thêm sự kiện vào hàng đợi" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "không thể tạo các ổ cắm mạng" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "không tạo được đường ống pipe" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "không thể đặt điều khiển cho tty" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "không thể tạo tiến trình con" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "không thể phục hồi nhãn cho tty" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "phần bổ sung chính sách gặp lỗi khi khởi tạo phiên" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "có lỗi trong vòng lặp sự kiện" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "không thể phục hồi nhãn cho tty" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "không thể phục hồi bộ tiếp hợp cho tín hiệu %d" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "lỗi khi đọc từ đường ống dẫn tín hiệu" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "không thể xóa bỏ PRIV_PROC_EXEC từ PRIV_LIMIT" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "không thể phân bổ pty" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "không tạo được đường ống pipe" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "gặp lỗi khi đọc từ một đường ống dẫn lệnh" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "gặp lỗi khi đọc từ socketpair" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "kiểu trả về không như mong đợi từ backchannel: %d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "không thể đặt điều khiển cho tty" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "không thể tạo các ổ cắm mạng" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -288,48 +293,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "phần bổ sung chính sách %s không bao gồm phương thức kiểm tra chính sách" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "lỗi nội bộ, %s bị tràn" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "đối số cho -C phải là một số lớn hơn hoặc bằng 3" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "bạn không thể chỉ định đồng thời cả hai tùy chọn “-i” và “-s”" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "bạn không thể chỉ định cả hai tùy chọn “-i” và “-E”" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "tùy chọn “-E” không hợp lệ trong chế độ chỉnh sửa" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "bạn có lẽ không được chỉ định biến môi trường trong chế độ soạn thảo" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "tùy chọn “-U” chỉ sử dụng cùng với tùy chọn “-l”" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "tùy chọn “-A” và “-S” không thể dùng cùng một lúc với nhau" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "sudoedit không được hỗ trợ trên nền tảng này" -#: src/parse_args.c:583 +#: src/parse_args.c:589 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Chỉ được phép chỉ định một trong số các tùy chọn -e, -h, -i, -K, -l, -s, -v hay -V" -#: src/parse_args.c:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -338,7 +343,7 @@ "%s - sửa chữa các tập tin trên danh nghĩa người dùng khác\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -347,7 +352,7 @@ "%s - thực hiện câu lệnh trên danh nghĩa người dùng khác\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -356,111 +361,115 @@ "\n" "Tùy chọn:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "sử dụng chương trình trợ giúp cho hỏi đáp mật khẩu" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "sử dụng kiểu xác thực BSD được chỉ ra" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "chạy lệnh ở chế độ nền" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "đóng tất cả các mô tả của tập tin >= số" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "chạy lệnh với một lớp đăng nhập BSD được chỉ ra" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "bảo tồn môi trường người dùng khi thi hành lệnh" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "chỉnh sửa các tập tin thay vì chạy lệnh" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "thực hiện câu lệnh với tư cách là tên hay ID của nhóm được chỉ định" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "đặt biến HOME cho thư mục riêng của người dùng đích" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "hiển thị trợ giúp này rồi thoát" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "chạy câu lệnh trên máy chủ (nếu được hỗ trợ bởi phần bổ sung)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "chạy shell đăng nhập như là người dùng đích; có thể đồng thời chỉ định một câu lệnh" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "gỡ bỏ hoàn toàn dấu vết thời gian của tập tin" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "làm mất hiệu lực dấu vết thời gian (timestamp) của tập tin" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "liệt kê đặc quyền của người dùng hay kiểm tra câu lệnh xác định; dùng hai lần cho định dạng dài" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "chế độ không-tương-tác, sẽ không hỏi tên người dùng" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "bảo tồn véc-tơ nhóm thay vì các cài đặt cho đích" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "sử dụng nhắc nhập mật khẩu đã chỉ ra" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "tạo ngữ cảnh an ninh SELinux với vai trò đã chỉ ra" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "đọc mật khẩu từ đầu vào tiêu chuẩn" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "chạy hệ vỏ dưới danh nghĩa người dùng đích; cũng có thể chỉ định thêm câu lệnh" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "tạo ngữ cảnh an ninh SELinux với kiểu đã chỉ ra" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "chấm dứt lệnh sau một thời hạn giới hạn được chỉ định" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "ở chế độ liệt kê, hiển thị đặc quyền cho người dùng" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "chạy lệnh (hay sửa chữa tập tin) trên tư cách của người dùng hay ID đã chỉ ra" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "hiển thị thông tin phiên bản rồi thoát" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "cập nhật dấu vết thời gian (timestamp) của người dùng mà không chạy một lệnh" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "dừng việc xử lý đối số dòng lệnh" @@ -570,7 +579,7 @@ msgid "unable to run %s as a login shell" msgstr "không thể chạy %s như là hệ vỏ đăng nhập" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "không thể thực thi %s" @@ -655,97 +664,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "không mong đợi chế độ sudo 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "không thể lấy véc-tơ nhóm" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "không hiểu mã số người dùng %u: bạn là ai?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "không thể dò tìm tty" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s phải được sở hữu bởi uid %d và bít setuid phải được đặt" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "uid chịu tác động hiện tại không phải là %d, có phải là %s trên hệ thống tập tin với tùy chọn “nosuid” được đặt, hay một hệ thống tập tin NFS không có đặc quyền của root không?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "uid chịu tác động hiện tại không phải là %d, chương trình sudo có được cài với setuid root không?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "không thể đặt nhóm phụ IDs" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "không thể đặt hiệu ứng gid chạy như là gid %u" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "không thể thay đổi gid thành runas gid %u" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "không hiểu lớp đăng nhập %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "không thể đặt ngữ cảnh người dùng" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "không thể đặt ưu tiên cho quá trình" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "không thể chuyển đổi thư mục gốc thành %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "không thể thay đổi thành chạy như là mã người dùng này (%u, %u)" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "không thể thay đổi thư mục thành %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "biểu thức điều kiện con kết thúc không như mong đợi: %d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "phần bổ sung chính sách %s bị thiếu phương thức kiểm tra chính sách “check_policy”" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "phần bổ sung chính sách %s không hỗ trợ liệt kê đặc quyền" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "phần bổ sung chính sách %s không hỗ trợ tùy chọn -v" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "phần bổ sung chính sách %s không hỗ trợ tùy chọn -k/-K" @@ -868,6 +877,9 @@ msgid "unable to restore stdin" msgstr "không thể phục hồi đầu vào tiêu chuẩn" +#~ msgid "error reading from pipe" +#~ msgstr "gặp lỗi khi đọc từ một đường ống dẫn lệnh" + #~ msgid "internal error, tried allocate zero bytes" #~ msgstr "lỗi nội bộ, đã phân bổ 0 byte bộ nhớ" Binary files /tmp/tmpoHN8mM/PMmiXszIJB/sudo-1.8.19p1/po/zh_CN.mo and /tmp/tmpoHN8mM/xXj01XBVSm/sudo-1.8.20p2/po/zh_CN.mo differ diff -Nru sudo-1.8.19p1/po/zh_CN.po sudo-1.8.20p2/po/zh_CN.po --- sudo-1.8.19p1/po/zh_CN.po 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/po/zh_CN.po 2017-05-10 15:38:43.000000000 +0000 @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.19b1\n" +"Project-Id-Version: sudo-1.8.20b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2016-11-21 17:45-0700\n" -"PO-Revision-Date: 2016-11-23 22:26+0800\n" +"POT-Creation-Date: 2017-03-09 11:58-0700\n" +"PO-Revision-Date: 2017-03-26 18:39+0800\n" "Last-Translator: Wylmer Wang \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" @@ -32,36 +32,37 @@ #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/gidlist.c:74 #: lib/util/sudo_conf.c:184 lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 -#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec.c:867 -#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 -#: src/exec_pty.c:692 src/exec_pty.c:700 src/exec_pty.c:1163 -#: src/load_plugins.c:52 src/load_plugins.c:65 src/load_plugins.c:215 -#: src/load_plugins.c:238 src/load_plugins.c:303 src/load_plugins.c:318 -#: src/parse_args.c:180 src/parse_args.c:202 src/parse_args.c:370 -#: src/parse_args.c:466 src/parse_args.c:488 src/preserve_fds.c:47 -#: src/preserve_fds.c:130 src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 -#: src/selinux.c:424 src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 -#: src/sudo.c:480 src/sudo.c:602 src/sudo.c:662 src/sudo.c:672 src/sudo.c:692 -#: src/sudo.c:711 src/sudo.c:720 src/sudo.c:729 src/sudo.c:746 src/sudo.c:787 -#: src/sudo.c:797 src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 -#: src/sudo.c:1433 src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 -#: src/sudo_edit.c:872 src/sudo_edit.c:985 src/sudo_edit.c:1005 +#: lib/util/sudo_conf.c:545 src/conversation.c:75 src/exec_common.c:107 +#: src/exec_common.c:123 src/exec_common.c:132 src/exec_monitor.c:214 +#: src/exec_nopty.c:326 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/load_plugins.c:215 src/load_plugins.c:238 src/load_plugins.c:303 +#: src/load_plugins.c:318 src/parse_args.c:183 src/parse_args.c:205 +#: src/parse_args.c:376 src/parse_args.c:472 src/parse_args.c:494 +#: src/preserve_fds.c:47 src/preserve_fds.c:130 src/selinux.c:83 +#: src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 src/sesh.c:115 +#: src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 src/sudo.c:670 +#: src/sudo.c:680 src/sudo.c:700 src/sudo.c:719 src/sudo.c:728 src/sudo.c:737 +#: src/sudo.c:754 src/sudo.c:795 src/sudo.c:805 src/sudo.c:825 src/sudo.c:1246 +#: src/sudo.c:1267 src/sudo.c:1441 src/sudo.c:1535 src/sudo_edit.c:151 +#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:985 +#: src/sudo_edit.c:1005 #, c-format msgid "%s: %s" msgstr "%s:%s" #: lib/util/aix.c:275 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 #: lib/util/sudo_conf.c:270 lib/util/sudo_conf.c:347 lib/util/sudo_conf.c:545 -#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:107 -#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:692 -#: src/exec_pty.c:700 src/load_plugins.c:215 src/load_plugins.c:238 -#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 -#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 -#: src/parse_args.c:488 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/conversation.c:76 src/exec_common.c:107 src/exec_common.c:124 +#: src/exec_common.c:133 src/exec_pty.c:623 src/exec_pty.c:631 +#: src/exec_pty.c:868 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:376 src/parse_args.c:472 +#: src/parse_args.c:494 src/preserve_fds.c:47 src/preserve_fds.c:130 #: src/selinux.c:83 src/selinux.c:292 src/selinux.c:415 src/selinux.c:424 -#: src/sesh.c:115 src/sudo.c:397 src/sudo.c:416 src/sudo.c:480 src/sudo.c:602 -#: src/sudo.c:817 src/sudo.c:1238 src/sudo.c:1259 src/sudo.c:1433 -#: src/sudo.c:1527 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 +#: src/sesh.c:115 src/sudo.c:398 src/sudo.c:423 src/sudo.c:488 src/sudo.c:610 +#: src/sudo.c:825 src/sudo.c:1246 src/sudo.c:1267 src/sudo.c:1441 +#: src/sudo.c:1535 src/sudo_edit.c:151 src/sudo_edit.c:775 src/sudo_edit.c:872 #: src/sudo_edit.c:985 src/sudo_edit.c:1005 msgid "unable to allocate memory" msgstr "无法分配内存" @@ -70,18 +71,18 @@ msgid "Unknown signal" msgstr "未知信号" -#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:49 -#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +#: lib/util/strtoid.c:77 lib/util/strtoid.c:124 lib/util/strtoid.c:152 +#: lib/util/strtomode.c:49 lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "值无效" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +#: lib/util/strtoid.c:84 lib/util/strtoid.c:131 lib/util/strtoid.c:159 +#: lib/util/strtomode.c:55 lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "值过大" -#: lib/util/strtoid.c:89 lib/util/strtomode.c:55 lib/util/strtonum.c:61 -#: lib/util/strtonum.c:182 +#: lib/util/strtoid.c:86 lib/util/strtoid.c:137 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:182 msgid "value too small" msgstr "值过小" @@ -135,85 +136,89 @@ msgid "unable to open %s" msgstr "打不开 %s" -#: src/exec.c:115 src/exec.c:117 src/exec.c:122 src/exec.c:408 src/exec.c:410 -#: src/exec.c:412 src/exec.c:414 src/exec.c:416 src/exec.c:418 src/exec.c:421 -#: src/exec.c:437 src/exec.c:439 src/exec.c:600 src/exec.c:794 -#: src/exec_pty.c:464 src/exec_pty.c:730 src/exec_pty.c:800 src/exec_pty.c:802 -#: src/exec_pty.c:814 src/exec_pty.c:816 src/exec_pty.c:1347 -#: src/exec_pty.c:1349 src/exec_pty.c:1354 src/exec_pty.c:1356 -#: src/exec_pty.c:1370 src/exec_pty.c:1381 src/exec_pty.c:1383 -#: src/exec_pty.c:1385 src/exec_pty.c:1387 src/exec_pty.c:1389 -#: src/exec_pty.c:1391 src/exec_pty.c:1393 src/signal.c:148 src/signal.c:162 +#: src/exec.c:189 src/exec_monitor.c:504 src/exec_monitor.c:506 +#: src/exec_monitor.c:511 src/exec_monitor.c:513 src/exec_monitor.c:527 +#: src/exec_monitor.c:538 src/exec_monitor.c:540 src/exec_monitor.c:542 +#: src/exec_monitor.c:544 src/exec_monitor.c:546 src/exec_monitor.c:548 +#: src/exec_monitor.c:550 src/exec_nopty.c:191 src/exec_nopty.c:193 +#: src/exec_nopty.c:195 src/exec_nopty.c:197 src/exec_nopty.c:199 +#: src/exec_nopty.c:201 src/exec_nopty.c:203 src/exec_nopty.c:205 +#: src/exec_nopty.c:208 src/exec_nopty.c:222 src/exec_nopty.c:224 +#: src/exec_nopty.c:226 src/exec_nopty.c:384 src/exec_pty.c:427 +#: src/exec_pty.c:661 src/exec_pty.c:1196 src/exec_pty.c:1198 +#: src/exec_pty.c:1200 src/exec_pty.c:1202 src/exec_pty.c:1204 +#: src/exec_pty.c:1206 src/exec_pty.c:1208 src/exec_pty.c:1211 +#: src/exec_pty.c:1219 src/exec_pty.c:1221 src/exec_pty.c:1223 +#: src/exec_pty.c:1231 src/exec_pty.c:1233 src/signal.c:148 src/signal.c:162 #, c-format msgid "unable to set handler for signal %d" msgstr "无法设置 %d 信号的处理程序" -#: src/exec.c:127 src/exec_pty.c:846 src/exec_pty.c:1431 src/tgetpass.c:250 -msgid "unable to fork" -msgstr "无法执行 fork" +#: src/exec_common.c:166 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "无法从 PRIV_LIMIT 中移除 PRIV_PROC_EXEC" + +#: src/exec_monitor.c:277 src/exec_nopty.c:455 src/exec_pty.c:1028 +msgid "error reading from signal pipe" +msgstr "从单管道读取出错" + +#: src/exec_monitor.c:363 +msgid "error reading from socketpair" +msgstr "从套接字对读取出错" -#: src/exec.c:303 src/exec.c:311 src/exec.c:872 src/exec_pty.c:585 -#: src/exec_pty.c:590 src/exec_pty.c:660 src/exec_pty.c:667 src/exec_pty.c:954 -#: src/exec_pty.c:964 src/exec_pty.c:1009 src/exec_pty.c:1016 -#: src/exec_pty.c:1041 src/exec_pty.c:1496 src/exec_pty.c:1503 -#: src/exec_pty.c:1510 +#: src/exec_monitor.c:372 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "联络通道的回应类型异常:%d" + +#: src/exec_monitor.c:450 src/exec_monitor.c:458 src/exec_monitor.c:466 +#: src/exec_nopty.c:130 src/exec_nopty.c:138 src/exec_pty.c:516 +#: src/exec_pty.c:521 src/exec_pty.c:591 src/exec_pty.c:598 src/exec_pty.c:873 +#: src/exec_pty.c:1129 src/exec_pty.c:1137 src/exec_pty.c:1322 +#: src/exec_pty.c:1332 src/exec_pty.c:1377 src/exec_pty.c:1384 +#: src/exec_pty.c:1409 msgid "unable to add event to queue" msgstr "无法将事件添加到队列" -#: src/exec.c:391 -msgid "unable to create sockets" -msgstr "无法创建套接字" +#: src/exec_monitor.c:496 src/exec_monitor.c:570 src/exec_nopty.c:161 +#: src/exec_pty.c:705 src/exec_pty.c:714 src/exec_pty.c:722 src/signal.c:129 +#: src/tgetpass.c:246 +msgid "unable to create pipe" +msgstr "无法创建管道" -#: src/exec.c:446 +#: src/exec_monitor.c:562 +msgid "unable to set controlling tty" +msgstr "无法设置控制终端" + +#: src/exec_monitor.c:573 src/exec_nopty.c:240 src/exec_pty.c:756 +#: src/tgetpass.c:250 +msgid "unable to fork" +msgstr "无法执行 fork" + +#: src/exec_monitor.c:654 src/exec_nopty.c:292 +msgid "unable to restore tty label" +msgstr "无法恢复终端标签" + +#: src/exec_nopty.c:233 src/exec_pty.c:1240 msgid "policy plugin failed session initialization" msgstr "策略插件会话初始化失败" -#: src/exec.c:491 +#: src/exec_nopty.c:281 src/exec_pty.c:1278 msgid "error in event loop" msgstr "事件循环中有错误" -#: src/exec.c:509 -msgid "unable to restore tty label" -msgstr "无法恢复终端标签" - -#: src/exec.c:608 src/exec_pty.c:496 src/signal.c:87 +#: src/exec_nopty.c:392 src/exec_pty.c:459 src/signal.c:87 #, c-format msgid "unable to restore handler for signal %d" msgstr "无法恢复 %d 信号的处理程序" -#: src/exec.c:726 src/exec_pty.c:1236 -msgid "error reading from signal pipe" -msgstr "从单管道读取出错" - -#: src/exec_common.c:166 -msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" -msgstr "无法从 PRIV_LIMIT 中移除 PRIV_PROC_EXEC" - -#: src/exec_pty.c:188 +#: src/exec_pty.c:133 msgid "unable to allocate pty" msgstr "无法分配伪终端" -#: src/exec_pty.c:774 src/exec_pty.c:783 src/exec_pty.c:791 -#: src/exec_pty.c:1339 src/exec_pty.c:1428 src/signal.c:129 src/tgetpass.c:246 -msgid "unable to create pipe" -msgstr "无法创建管道" - -#: src/exec_pty.c:1269 -msgid "error reading from pipe" -msgstr "从管道读取出错" - -#: src/exec_pty.c:1296 -msgid "error reading from socketpair" -msgstr "从套接字对读取出错" - -#: src/exec_pty.c:1305 -#, c-format -msgid "unexpected reply type on backchannel: %d" -msgstr "联络通道的回应类型异常:%d" - -#: src/exec_pty.c:1407 -msgid "unable to set controlling tty" -msgstr "无法设置控制终端" +#: src/exec_pty.c:1179 +msgid "unable to create sockets" +msgstr "无法创建套接字" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 @@ -282,48 +287,48 @@ msgid "policy plugin %s does not include a check_policy method" msgstr "策略插件 %s 不包含 check_policy 方法" -#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:475 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:483 #, c-format msgid "internal error, %s overflow" msgstr "内部错误,%s 溢出" -#: src/parse_args.c:239 +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C 选项的参数必须是一个大于等于 3 的数字" -#: src/parse_args.c:406 +#: src/parse_args.c:412 msgid "you may not specify both the `-i' and `-s' options" msgstr "您不能同时指定“-i”和“-s”选项" -#: src/parse_args.c:410 +#: src/parse_args.c:416 msgid "you may not specify both the `-i' and `-E' options" msgstr "您不能同时指定“-i”和“-E”选项" -#: src/parse_args.c:420 +#: src/parse_args.c:426 msgid "the `-E' option is not valid in edit mode" msgstr "“-E”选项在编辑模式中无效" -#: src/parse_args.c:422 +#: src/parse_args.c:428 msgid "you may not specify environment variables in edit mode" msgstr "在编辑模式中您不能指定环境变量" -#: src/parse_args.c:430 +#: src/parse_args.c:436 msgid "the `-U' option may only be used with the `-l' option" msgstr "“-U”选项只能与“-l”选项一起使用" -#: src/parse_args.c:434 +#: src/parse_args.c:440 msgid "the `-A' and `-S' options may not be used together" msgstr "“-A”和“-S”选项不可同时使用" -#: src/parse_args.c:510 +#: src/parse_args.c:516 msgid "sudoedit is not supported on this platform" msgstr "此平台不支持 sudoedit" -#: src/parse_args.c:583 +#: src/parse_args.c:589 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:597 +#: src/parse_args.c:603 #, c-format msgid "" "%s - edit files as another user\n" @@ -332,7 +337,7 @@ "%s - 以其他用户身份编辑文件\n" "\n" -#: src/parse_args.c:599 +#: src/parse_args.c:605 #, c-format msgid "" "%s - execute a command as another user\n" @@ -341,7 +346,7 @@ "%s - 以其他用户身份执行一条命令\n" "\n" -#: src/parse_args.c:604 +#: src/parse_args.c:610 #, c-format msgid "" "\n" @@ -350,111 +355,115 @@ "\n" "选项:\n" -#: src/parse_args.c:606 +#: src/parse_args.c:612 msgid "use a helper program for password prompting" msgstr "使用助手程序进行密码提示" -#: src/parse_args.c:609 +#: src/parse_args.c:615 msgid "use specified BSD authentication type" msgstr "使用指定的 BSD 认证类型" -#: src/parse_args.c:612 +#: src/parse_args.c:618 msgid "run command in the background" msgstr "在后台运行命令" -#: src/parse_args.c:614 +#: src/parse_args.c:620 msgid "close all file descriptors >= num" msgstr "关闭所有 >= num 的文件描述符" -#: src/parse_args.c:617 +#: src/parse_args.c:623 msgid "run command with the specified BSD login class" msgstr "以指定的 BSD 登录类别运行命令" -#: src/parse_args.c:620 +#: src/parse_args.c:626 msgid "preserve user environment when running command" msgstr "在执行命令时保留用户环境" -#: src/parse_args.c:622 +#: src/parse_args.c:628 msgid "edit files instead of running a command" msgstr "编辑文件而非执行命令" -#: src/parse_args.c:624 +#: src/parse_args.c:630 msgid "run command as the specified group name or ID" msgstr "以指定的用户组或 ID 执行命令" -#: src/parse_args.c:626 +#: src/parse_args.c:632 msgid "set HOME variable to target user's home dir" msgstr "将 HOME 变量设为目标用户的主目录。" -#: src/parse_args.c:628 +#: src/parse_args.c:634 msgid "display help message and exit" msgstr "显示帮助消息并退出" -#: src/parse_args.c:630 +#: src/parse_args.c:636 msgid "run command on host (if supported by plugin)" msgstr "在主机上运行命令(如果插件支持)" -#: src/parse_args.c:632 +#: src/parse_args.c:638 msgid "run login shell as the target user; a command may also be specified" msgstr "以目标用户身份运行一个登录 shell;可同时指定一条命令" -#: src/parse_args.c:634 +#: src/parse_args.c:640 msgid "remove timestamp file completely" msgstr "完全移除时间戳文件" -#: src/parse_args.c:636 +#: src/parse_args.c:642 msgid "invalidate timestamp file" msgstr "无效的时间戳文件" -#: src/parse_args.c:638 +#: src/parse_args.c:644 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "列出用户权限或检查某个特定命令;对于长格式,使用两次" -#: src/parse_args.c:640 +#: src/parse_args.c:646 msgid "non-interactive mode, no prompts are used" msgstr "非交互模式,不提示" -#: src/parse_args.c:642 +#: src/parse_args.c:648 msgid "preserve group vector instead of setting to target's" msgstr "保留组向量,而非设置为目标的组向量" -#: src/parse_args.c:644 +#: src/parse_args.c:650 msgid "use the specified password prompt" msgstr "使用指定的密码提示" -#: src/parse_args.c:647 +#: src/parse_args.c:653 msgid "create SELinux security context with specified role" msgstr "以指定的角色创建 SELinux 安全环境" -#: src/parse_args.c:650 +#: src/parse_args.c:656 msgid "read password from standard input" msgstr "从标准输入读取密码" -#: src/parse_args.c:652 +#: src/parse_args.c:658 msgid "run shell as the target user; a command may also be specified" msgstr "以目标用户运行 shell;可同时指定一条命令" -#: src/parse_args.c:655 +#: src/parse_args.c:661 msgid "create SELinux security context with specified type" msgstr "以指定的类型创建 SELinux 安全环境" -#: src/parse_args.c:658 +#: src/parse_args.c:664 +msgid "terminate command after the specified time limit" +msgstr "在达到指定时间限制后终止命令" + +#: src/parse_args.c:666 msgid "in list mode, display privileges for user" msgstr "在列表模式中显示用户的权限" -#: src/parse_args.c:660 +#: src/parse_args.c:668 msgid "run command (or edit file) as specified user name or ID" msgstr "以指定用户或 ID 运行命令(或编辑文件)" -#: src/parse_args.c:662 +#: src/parse_args.c:670 msgid "display version information and exit" msgstr "显示版本信息并退出" -#: src/parse_args.c:664 +#: src/parse_args.c:672 msgid "update user's timestamp without running a command" msgstr "更新用户的时间戳而不执行命令" -#: src/parse_args.c:666 +#: src/parse_args.c:674 msgid "stop processing command line arguments" msgstr "停止处理命令行参数" @@ -564,7 +573,7 @@ msgid "unable to run %s as a login shell" msgstr "无法以登录 shell 执行 %s" -#: src/sesh.c:125 src/sudo.c:1297 +#: src/sesh.c:125 src/sudo.c:1305 #, c-format msgid "unable to execute %s" msgstr "无法执行 %s" @@ -649,97 +658,97 @@ msgid "unexpected sudo mode 0x%x" msgstr "异常的 sudo 模式 0x%x" -#: src/sudo.c:460 +#: src/sudo.c:468 msgid "unable to get group vector" msgstr "无法获取组向量" -#: src/sudo.c:522 +#: src/sudo.c:530 #, c-format msgid "unknown uid %u: who are you?" msgstr "未知的用户 ID %u:您是?" -#: src/sudo.c:578 +#: src/sudo.c:586 msgid "unable to determine tty" msgstr "无法确定终端" -#: src/sudo.c:866 +#: src/sudo.c:874 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s 必须属于用户 ID %d(的用户)并且设置 setuid 位" -#: src/sudo.c:869 +#: src/sudo.c:877 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "有效用户 ID 不是 %d,%s 位于一个设置了“nosuid”选项的文件系统或没有 root 权限的 NFS 文件系统中吗?" -#: src/sudo.c:875 +#: src/sudo.c:883 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "有效用户 ID 不是 %d,sudo 属于 root 并设置了 setuid 位吗?" -#: src/sudo.c:956 +#: src/sudo.c:964 msgid "unable to set supplementary group IDs" msgstr "无法设置补充组 ID" -#: src/sudo.c:963 +#: src/sudo.c:971 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "无法设置有效组 ID 来以组 ID %u 运行" -#: src/sudo.c:969 +#: src/sudo.c:977 #, c-format msgid "unable to set gid to runas gid %u" msgstr "无法设置组 ID 来以组 ID %u 运行" -#: src/sudo.c:1040 +#: src/sudo.c:1048 #, c-format msgid "unknown login class %s" msgstr "未知的登录类别 %s" -#: src/sudo.c:1053 +#: src/sudo.c:1061 msgid "unable to set user context" msgstr "无法设置用户环境" -#: src/sudo.c:1069 +#: src/sudo.c:1077 msgid "unable to set process priority" msgstr "无法设置进程优先级" -#: src/sudo.c:1077 +#: src/sudo.c:1085 #, c-format msgid "unable to change root to %s" msgstr "无法从 root 切换到 %s" -#: src/sudo.c:1090 src/sudo.c:1096 src/sudo.c:1103 +#: src/sudo.c:1098 src/sudo.c:1104 src/sudo.c:1111 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "无法切换到以用户 ID(%u,%u)运行" -#: src/sudo.c:1121 +#: src/sudo.c:1129 #, c-format msgid "unable to change directory to %s" msgstr "无法将目录切换到 %s" -#: src/sudo.c:1179 +#: src/sudo.c:1187 #, c-format msgid "unexpected child termination condition: %d" msgstr "异常的子进程终止条件:%d" -#: src/sudo.c:1325 +#: src/sudo.c:1333 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "“check_policy”方法中缺少策略插件 %s" -#: src/sudo.c:1343 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "策略插件 %s 不支持列出权限" -#: src/sudo.c:1360 +#: src/sudo.c:1368 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "策略插件 %s不支持 -v 选项" -#: src/sudo.c:1375 +#: src/sudo.c:1383 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "策略插件 %s 不支持 -k/-K 选项" @@ -862,6 +871,9 @@ msgid "unable to restore stdin" msgstr "无法恢复 stdin" +#~ msgid "error reading from pipe" +#~ msgstr "从管道读取出错" + #~ msgid "internal error, tried allocate zero bytes" #~ msgstr "内部错误,试图分配 0 个字节" diff -Nru sudo-1.8.19p1/src/exec.c sudo-1.8.20p2/src/exec.c --- sudo-1.8.19p1/src/exec.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/src/exec.c 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2016 Todd C. Miller + * Copyright (c) 2009-2017 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 @@ -17,11 +17,6 @@ #include #include -#include -#include -#include -#include -#include #include #include #ifdef HAVE_STRING_H @@ -31,13 +26,9 @@ # include #endif /* HAVE_STRINGS_H */ #include -#ifdef TIME_WITH_SYS_TIME -# include -#endif #include #include #include -#include #include "sudo.h" #include "sudo_exec.h" @@ -45,102 +36,60 @@ #include "sudo_plugin.h" #include "sudo_plugin_int.h" -struct exec_closure { - pid_t child; - bool log_io; - sigset_t omask; - struct command_status *cstat; - struct command_details *details; - struct sudo_event_base *evbase; -}; - -/* We keep a tailq of signals to forward to child. */ -struct sigforward { - TAILQ_ENTRY(sigforward) entries; - int signo; -}; -TAILQ_HEAD(sigfwd_list, sigforward); -static struct sigfwd_list sigfwd_list = TAILQ_HEAD_INITIALIZER(sigfwd_list); -static struct sudo_event *signal_event; -static struct sudo_event *sigfwd_event; -static struct sudo_event *backchannel_event; -static pid_t ppgrp = -1; - volatile pid_t cmnd_pid = -1; - -static void signal_pipe_cb(int fd, int what, void *v); -static int dispatch_pending_signals(struct command_status *cstat); -static void forward_signals(int fd, int what, void *v); -static void schedule_signal(struct sudo_event_base *evbase, int signo); -#ifdef SA_SIGINFO -static void handler_user_only(int s, siginfo_t *info, void *context); -#endif +volatile pid_t ppgrp = -1; /* - * Fork and execute a command, returns the child's pid. - * Sends errno back on sv[1] if execve() fails. + * Generic handler for signals received by the sudo front end while the + * command is running. The other end is checked in the main event loop. */ -static int -fork_cmnd(struct command_details *details, int sv[2]) +#ifdef SA_SIGINFO +void +exec_handler(int s, siginfo_t *info, void *context) { - struct command_status cstat; - sigaction_t sa; - debug_decl(fork_cmnd, SUDO_DEBUG_EXEC) + unsigned char signo = (unsigned char)s; - ppgrp = getpgrp(); /* parent's process group */ + /* + * Do not forward signals sent by a process in the command's process + * group, do not forward it as we don't want the child to indirectly + * kill itself. For example, this can happen with some versions of + * reboot that call kill(-1, SIGTERM) to kill all other processes. + */ + if (s != SIGCHLD && USER_SIGNALED(info) && info->si_pid != 0) { + pid_t si_pgrp = getpgid(info->si_pid); + if (si_pgrp != -1) { + if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) + return; + } else if (info->si_pid == cmnd_pid) { + return; + } + } /* - * Handle suspend/restore of sudo and the command. - * In most cases, the command will be in the same process group as - * sudo and job control will "just work". However, if the command - * changes its process group ID and does not change it back (or is - * kill by SIGSTOP which is not catchable), we need to resume the - * command manually. Also, if SIGTSTP is sent directly to sudo, - * we need to suspend the command, and then suspend ourself, restoring - * the default SIGTSTP handler temporarily. - * - * XXX - currently we send SIGCONT upon resume in some cases where - * we don't need to (e.g. command pgrp == parent pgrp). + * The pipe is non-blocking, if we overflow the kernel's pipe + * buffer we drop the signal. This is not a problem in practice. */ - memset(&sa, 0, sizeof(sa)); - sigfillset(&sa.sa_mask); - sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */ -#ifdef SA_SIGINFO - sa.sa_flags |= SA_SIGINFO; - sa.sa_sigaction = handler; + while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { + if (errno != EINTR) + break; + } +} #else - sa.sa_handler = handler; -#endif - if (sudo_sigaction(SIGCHLD, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGCHLD); - if (sudo_sigaction(SIGCONT, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGCONT); -#ifdef SA_SIGINFO - sa.sa_sigaction = handler_user_only; -#endif - if (sudo_sigaction(SIGTSTP, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTSTP); +void +exec_handler(int s) +{ + unsigned char signo = (unsigned char)s; - cmnd_pid = sudo_debug_fork(); - switch (cmnd_pid) { - case -1: - sudo_fatal(U_("unable to fork")); - break; - case 0: - /* child */ - close(sv[0]); - close(signal_pipe[0]); - close(signal_pipe[1]); - (void)fcntl(sv[1], F_SETFD, FD_CLOEXEC); - exec_cmnd(details, &cstat, sv[1]); - ignore_result(send(sv[1], &cstat, sizeof(cstat), 0)); - sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, 1); - _exit(1); + /* + * The pipe is non-blocking, if we overflow the kernel's pipe + * buffer we drop the signal. This is not a problem in practice. + */ + while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { + if (errno != EINTR) + break; } - sudo_debug_printf(SUDO_DEBUG_INFO, "executed %s, pid %d", details->command, - (int)cmnd_pid); - debug_return_int(cmnd_pid); } +#endif /* * Setup the execution environment and execute the command. @@ -149,8 +98,7 @@ * If the exec fails, cstat is filled in with the value of errno. */ void -exec_cmnd(struct command_details *details, struct command_status *cstat, - int errfd) +exec_cmnd(struct command_details *details, int errfd) { debug_decl(exec_cmnd, SUDO_DEBUG_EXEC) @@ -184,564 +132,11 @@ details->envp, ISSET(details->flags, CD_NOEXEC)); } } - cstat->type = CMD_ERRNO; - cstat->val = errno; sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to exec %s: %s", details->command, strerror(errno)); debug_return; } -static void -backchannel_cb(int fd, int what, void *v) -{ - struct exec_closure *ec = v; - ssize_t n; - debug_decl(backchannel_cb, SUDO_DEBUG_EXEC) - - /* read child status */ - n = recv(fd, ec->cstat, sizeof(struct command_status), MSG_WAITALL); - if (n != sizeof(struct command_status)) { - if (n == -1) { - switch (errno) { - case EINTR: - /* got a signal, restart loop to service it. */ - sudo_ev_loopcontinue(ec->evbase); - break; - case EAGAIN: - /* not ready after all... */ - break; - default: - ec->cstat->type = CMD_ERRNO; - ec->cstat->val = errno; - sudo_debug_printf(SUDO_DEBUG_ERROR, - "failed to read child status: %s", strerror(errno)); - sudo_ev_loopbreak(ec->evbase); - break; - } - } else { - /* Short read or EOF. */ - sudo_debug_printf(SUDO_DEBUG_ERROR, - "failed to read child status: %s", n ? "short read" : "EOF"); - if (!ec->log_io && n == 0) { - /* - * If not logging I/O we may get EOF when the command is - * executed and the other end of the backchannel is closed. - * Just remove the event in this case. - */ - sudo_ev_del(ec->evbase, backchannel_event); - } else { - /* XXX - need new CMD_ type for monitor errors. */ - errno = n ? EIO : ECONNRESET; - ec->cstat->type = CMD_ERRNO; - ec->cstat->val = errno; - sudo_ev_loopbreak(ec->evbase); - } - } - debug_return; - } - switch (ec->cstat->type) { - case CMD_PID: - /* - * Once we know the command's pid we can unblock - * signals which ere blocked in fork_pty(). This - * avoids a race between exec of the command and - * receipt of a fatal signal from it. - */ - cmnd_pid = ec->cstat->val; - sudo_debug_printf(SUDO_DEBUG_INFO, "executed %s, pid %d", - ec->details->command, (int)cmnd_pid); - if (ec->log_io) - sigprocmask(SIG_SETMASK, &ec->omask, NULL); - break; - case CMD_WSTATUS: - if (WIFSTOPPED(ec->cstat->val)) { - /* Suspend parent and tell child how to resume on return. */ - sudo_debug_printf(SUDO_DEBUG_INFO, - "child stopped, suspending parent"); - n = suspend_parent(WSTOPSIG(ec->cstat->val)); - schedule_signal(ec->evbase, n); - /* Re-enable I/O events and restart event loop to service signal. */ - add_io_events(ec->evbase); - sudo_ev_loopcontinue(ec->evbase); - } else { - /* Child exited or was killed, either way we are done. */ - sudo_debug_printf(SUDO_DEBUG_INFO, "child exited or was killed"); - sudo_ev_loopexit(ec->evbase); - } - break; - case CMD_ERRNO: - /* Child was unable to execute command or broken pipe. */ - sudo_debug_printf(SUDO_DEBUG_INFO, "errno from child: %s", - strerror(ec->cstat->val)); - sudo_ev_loopbreak(ec->evbase); - break; - } - debug_return; -} - -/* - * Setup initial exec events. - * Allocates events for the signal pipe and backchannel. - * Forwarded signals on the backchannel are enabled on demand. - */ -static struct sudo_event_base * -exec_event_setup(int backchannel, struct exec_closure *ec) -{ - struct sudo_event_base *evbase; - debug_decl(exec_event_setup, SUDO_DEBUG_EXEC) - - evbase = sudo_ev_base_alloc(); - if (evbase == NULL) - sudo_fatal(NULL); - - /* Event for incoming signals via signal_pipe. */ - signal_event = sudo_ev_alloc(signal_pipe[0], - SUDO_EV_READ|SUDO_EV_PERSIST, signal_pipe_cb, ec); - if (signal_event == NULL) - sudo_fatal(NULL); - if (sudo_ev_add(evbase, signal_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); - - /* Event for command status via backchannel. */ - backchannel_event = sudo_ev_alloc(backchannel, - SUDO_EV_READ|SUDO_EV_PERSIST, backchannel_cb, ec); - if (backchannel_event == NULL) - sudo_fatal(NULL); - if (sudo_ev_add(evbase, backchannel_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); - - /* The signal forwarding event gets added on demand. */ - sigfwd_event = sudo_ev_alloc(backchannel, - SUDO_EV_WRITE, forward_signals, NULL); - if (sigfwd_event == NULL) - sudo_fatal(NULL); - - sudo_debug_printf(SUDO_DEBUG_INFO, "signal pipe fd %d\n", signal_pipe[0]); - sudo_debug_printf(SUDO_DEBUG_INFO, "backchannel fd %d\n", backchannel); - - debug_return_ptr(evbase); -} - -/* - * Execute a command, potentially in a pty with I/O loggging, and - * wait for it to finish. - * This is a little bit tricky due to how POSIX job control works and - * we fact that we have two different controlling terminals to deal with. - */ -int -sudo_execute(struct command_details *details, struct command_status *cstat) -{ - struct sigforward *sigfwd, *sigfwd_next; - const char *utmp_user = NULL; - struct sudo_event_base *evbase; - struct exec_closure ec; - bool log_io = false; - sigaction_t sa; - pid_t child; - int sv[2]; - debug_decl(sudo_execute, SUDO_DEBUG_EXEC) - - dispatch_pending_signals(cstat); - - /* If running in background mode, fork and exit. */ - if (ISSET(details->flags, CD_BACKGROUND)) { - switch (sudo_debug_fork()) { - case -1: - cstat->type = CMD_ERRNO; - cstat->val = errno; - debug_return_int(-1); - case 0: - /* child continues without controlling terminal */ - (void)setpgid(0, 0); - break; - default: - /* parent exits (but does not flush buffers) */ - sudo_debug_exit_int(__func__, __FILE__, __LINE__, - sudo_debug_subsys, 0); - _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 io plugin tailqueue will be empty and no I/O logging will occur. - */ - if (!TAILQ_EMPTY(&io_plugins) || ISSET(details->flags, CD_USE_PTY)) { - log_io = true; - if (ISSET(details->flags, CD_SET_UTMP)) - utmp_user = details->utmp_user ? details->utmp_user : user_details.username; - sudo_debug_printf(SUDO_DEBUG_INFO, "allocate pty for I/O logging"); - pty_setup(details->euid, user_details.tty, utmp_user); - } else if (!ISSET(details->flags, CD_SET_TIMEOUT|CD_SUDOEDIT) && - policy_plugin.u.policy->close == NULL) { - /* - * If there is no policy close function, no I/O logging or pty, - * and we were not invoked as sudoedit, just exec directly. - */ - exec_cmnd(details, cstat, -1); - goto done; - } - - /* - * We communicate with the child over a bi-directional pair of sockets. - * Parent sends signal info to child and child sends back wait status. - */ - if (socketpair(PF_UNIX, SOCK_STREAM, 0, sv) == -1) - sudo_fatal(U_("unable to create sockets")); - - /* - * Signals to forward to the child process (excluding SIGALRM). - * We block all other signals while running the signal handler. - * Note: HP-UX select() will not be interrupted if SA_RESTART set. - */ - memset(&sa, 0, sizeof(sa)); - sigfillset(&sa.sa_mask); - sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */ -#ifdef SA_SIGINFO - sa.sa_flags |= SA_SIGINFO; - sa.sa_sigaction = handler; -#else - sa.sa_handler = handler; -#endif - if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); - if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); - if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); - if (sudo_sigaction(SIGPIPE, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGPIPE); - if (sudo_sigaction(SIGUSR1, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGUSR1); - if (sudo_sigaction(SIGUSR2, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGUSR2); -#ifdef SIGINFO - if (sudo_sigaction(SIGINFO, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGINFO); -#endif - - /* - * When not running the command in a pty, we do not want to - * forward signals generated by the kernel that the child will - * already have received either by virtue of being in the - * controlling tty's process group (SIGINT, SIGQUIT). - */ -#ifdef SA_SIGINFO - if (!log_io) { - sa.sa_flags |= SA_SIGINFO; - sa.sa_sigaction = handler_user_only; - } -#endif - if (sudo_sigaction(SIGINT, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGINT); - if (sudo_sigaction(SIGQUIT, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGQUIT); - - /* - * The policy plugin's session init must be run before we fork - * or certain pam modules won't be able to track their state. - */ - if (policy_init_session(details) != true) - sudo_fatalx(U_("policy plugin failed session initialization")); - - /* - * Child will run the command in the pty, parent will pass data - * to and from pty. - */ - if (log_io) - child = fork_pty(details, sv, &ec.omask); - else - child = fork_cmnd(details, sv); - close(sv[1]); - - /* Set command timeout if specified. */ - if (ISSET(details->flags, CD_SET_TIMEOUT)) - alarm(details->timeout); - - /* - * I/O logging must be in the C locale for floating point numbers - * to be logged consistently. - */ - setlocale(LC_ALL, "C"); - - /* - * Allocate event base and two persistent events: - * the signal pipe and the child process's backchannel. - */ - evbase = exec_event_setup(sv[0], &ec); - - /* - * Generic exec closure used for signal_pipe and backchannel callbacks. - * Note ec.omask is set earlier. - */ - ec.child = child; - ec.log_io = log_io; - ec.cstat = cstat; - ec.evbase = evbase; - ec.details = details; - - /* - * In the event loop we pass input from user tty to master - * and pass output from master to stdout and IO plugin. - */ - if (log_io) - add_io_events(evbase); - if (sudo_ev_loop(evbase, 0) == -1) - sudo_warn(U_("error in event loop")); - if (sudo_ev_got_break(evbase)) { - /* error from callback */ - sudo_debug_printf(SUDO_DEBUG_ERROR, "event loop exited prematurely"); - /* kill command if still running and not I/O logging */ - if (!log_io && kill(child, 0) == 0) - terminate_command(child, true); - } - - if (log_io) { - /* Flush any remaining output and free pty-related memory. */ - pty_close(cstat); - } - -#ifdef HAVE_SELINUX - if (ISSET(details->flags, CD_RBAC_ENABLED)) { - /* This is probably not needed in log_io mode. */ - if (selinux_restore_tty() != 0) - sudo_warnx(U_("unable to restore tty label")); - } -#endif - - /* Free things up. */ - sudo_ev_base_free(evbase); - sudo_ev_free(sigfwd_event); - sudo_ev_free(signal_event); - sudo_ev_free(backchannel_event); - TAILQ_FOREACH_SAFE(sigfwd, &sigfwd_list, entries, sigfwd_next) { - free(sigfwd); - } - TAILQ_INIT(&sigfwd_list); -done: - debug_return_int(cstat->type == CMD_ERRNO ? -1 : 0); -} - -/* - * Forward a signal to the command (non-pty version). - */ -static int -dispatch_signal(struct sudo_event_base *evbase, pid_t child, - int signo, char *signame, struct command_status *cstat) -{ - int rc = 1; - debug_decl(dispatch_signal, SUDO_DEBUG_EXEC) - - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: evbase %p, child: %d, signo %s(%d), cstat %p", - __func__, evbase, (int)child, signame, signo, cstat); - - if (signo == SIGCHLD) { - pid_t pid; - int status; - /* - * The command stopped or exited. - */ - do { - pid = waitpid(child, &status, WUNTRACED|WNOHANG); - } while (pid == -1 && errno == EINTR); - if (pid == child) { - if (WIFSTOPPED(status)) { - /* - * Save the controlling terminal's process group - * so we can restore it after we resume, if needed. - * Most well-behaved shells change the pgrp back to - * its original value before suspending so we must - * not try to restore in that case, lest we race with - * the child upon resume, potentially stopping sudo - * with SIGTTOU while the command continues to run. - */ - sigaction_t sa, osa; - pid_t saved_pgrp = -1; - int signo = WSTOPSIG(status); - int fd = open(_PATH_TTY, O_RDWR); - if (fd != -1) { - saved_pgrp = tcgetpgrp(fd); - if (saved_pgrp == -1) { - close(fd); - fd = -1; - } - } - if (saved_pgrp != -1) { - /* - * Child was stopped trying to access controlling - * terminal. If the child has a different pgrp - * and we own the controlling terminal, give it - * to the child's pgrp and let it continue. - */ - if (signo == SIGTTOU || signo == SIGTTIN) { - if (saved_pgrp == ppgrp) { - pid_t child_pgrp = getpgid(child); - if (child_pgrp != ppgrp) { - if (tcsetpgrp(fd, child_pgrp) == 0) { - if (killpg(child_pgrp, SIGCONT) != 0) { - sudo_warn("kill(%d, SIGCONT)", - (int)child_pgrp); - } - close(fd); - goto done; - } - } - } - } - } - if (signo == SIGTSTP) { - memset(&sa, 0, sizeof(sa)); - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART; - sa.sa_handler = SIG_DFL; - if (sudo_sigaction(SIGTSTP, &sa, &osa) != 0) { - sudo_warn(U_("unable to set handler for signal %d"), - SIGTSTP); - } - } - if (kill(getpid(), signo) != 0) - sudo_warn("kill(%d, SIG%s)", (int)getpid(), signame); - if (signo == SIGTSTP) { - if (sudo_sigaction(SIGTSTP, &osa, NULL) != 0) { - sudo_warn(U_("unable to restore handler for signal %d"), - SIGTSTP); - } - } - if (saved_pgrp != -1) { - /* - * Restore command's process group if different. - * Otherwise, we cannot resume some shells. - */ - if (saved_pgrp != ppgrp) - (void)tcsetpgrp(fd, saved_pgrp); - close(fd); - } - } else { - /* Child has exited or been killed, we are done. */ - cstat->type = CMD_WSTATUS; - cstat->val = status; - sudo_ev_del(evbase, signal_event); - sudo_ev_loopexit(evbase); - goto done; - } - } - } else { - /* Send signal to child. */ - if (signo == SIGALRM) { - terminate_command(child, false); - } else if (kill(child, signo) != 0) { - sudo_warn("kill(%d, SIG%s)", (int)child, signame); - } - } - rc = 0; -done: - debug_return_int(rc); -} - -/* - * Forward a signal to the monitor (pty version). - */ -static int -dispatch_signal_pty(struct sudo_event_base *evbase, pid_t child, - int signo, char *signame, struct command_status *cstat) -{ - int rc = 1; - debug_decl(dispatch_signal_pty, SUDO_DEBUG_EXEC) - - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: evbase %p, child: %d, signo %s(%d), cstat %p", - __func__, evbase, (int)child, signame, signo, cstat); - - if (signo == SIGCHLD) { - int n, status; - pid_t pid; - /* - * Monitor process was signaled; wait for it as needed. - */ - do { - pid = waitpid(child, &status, WUNTRACED|WNOHANG); - } while (pid == -1 && errno == EINTR); - if (pid == child) { - /* - * If the monitor dies we get notified via backchannel_cb(). - * If it was stopped, we should stop too (the command keeps - * running in its pty) and continue it when we come back. - */ - if (WIFSTOPPED(status)) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "monitor stopped, suspending parent"); - n = suspend_parent(WSTOPSIG(status)); - kill(pid, SIGCONT); - schedule_signal(evbase, n); - /* Re-enable I/O events and restart event loop. */ - add_io_events(evbase); - sudo_ev_loopcontinue(evbase); - goto done; - } else if (WIFSIGNALED(status)) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "monitor killed, signal %d", WTERMSIG(status)); - } else { - sudo_debug_printf(SUDO_DEBUG_INFO, - "monitor exited, status %d", WEXITSTATUS(status)); - } - } - } else { - /* Schedule signo to be forwared to the child. */ - schedule_signal(evbase, signo); - /* Restart event loop to service signal immediately. */ - sudo_ev_loopcontinue(evbase); - } - rc = 0; -done: - debug_return_int(rc); -} - -/* Signal pipe callback */ -static void -signal_pipe_cb(int fd, int what, void *v) -{ - struct exec_closure *ec = v; - char signame[SIG2STR_MAX]; - unsigned char signo; - ssize_t nread; - int rc = 0; - debug_decl(signal_pipe_cb, SUDO_DEBUG_EXEC) - - do { - /* read signal pipe */ - nread = read(fd, &signo, sizeof(signo)); - if (nread <= 0) { - /* It should not be possible to get EOF but just in case... */ - if (nread == 0) - errno = ECONNRESET; - /* Restart if interrupted by signal so the pipe doesn't fill. */ - if (errno == EINTR) - continue; - /* On error, store errno and break out of the event loop. */ - if (errno != EAGAIN) { - ec->cstat->type = CMD_ERRNO; - ec->cstat->val = errno; - sudo_warn(U_("error reading from signal pipe")); - sudo_ev_loopbreak(ec->evbase); - } - break; - } - if (sig2str(signo, signame) == -1) - snprintf(signame, sizeof(signame), "%d", signo); - sudo_debug_printf(SUDO_DEBUG_DIAG, "received SIG%s", signame); - if (ec->log_io) { - rc = dispatch_signal_pty(ec->evbase, ec->child, signo, signame, - ec->cstat); - } else { - rc = dispatch_signal(ec->evbase, ec->child, signo, signame, - ec->cstat); - } - } while (rc == 0); - debug_return; -} - /* * Drain pending signals from signal_pipe written by sudo_handler(). * Handles the case where the signal was sent to us before @@ -800,199 +195,102 @@ } /* - * Forward signals in sigfwd_list to child listening on fd. - */ -static void -forward_signals(int sock, int what, void *v) -{ - char signame[SIG2STR_MAX]; - struct sigforward *sigfwd; - struct command_status cstat; - ssize_t nsent; - debug_decl(forward_signals, SUDO_DEBUG_EXEC) - - while (!TAILQ_EMPTY(&sigfwd_list)) { - sigfwd = TAILQ_FIRST(&sigfwd_list); - if (sigfwd->signo == SIGCONT_FG) - strlcpy(signame, "CONT_FG", sizeof(signame)); - else if (sigfwd->signo == SIGCONT_BG) - strlcpy(signame, "CONT_BG", sizeof(signame)); - else if (sig2str(sigfwd->signo, signame) == -1) - snprintf(signame, sizeof(signame), "%d", sigfwd->signo); - sudo_debug_printf(SUDO_DEBUG_INFO, - "sending SIG%s to child over backchannel", signame); - cstat.type = CMD_SIGNO; - cstat.val = sigfwd->signo; - do { - nsent = send(sock, &cstat, sizeof(cstat), 0); - } while (nsent == -1 && errno == EINTR); - TAILQ_REMOVE(&sigfwd_list, sigfwd, entries); - free(sigfwd); - if (nsent != sizeof(cstat)) { - if (errno == EPIPE) { - struct sigforward *sigfwd_next; - sudo_debug_printf(SUDO_DEBUG_ERROR, - "broken pipe writing to child over backchannel"); - /* Other end of socket gone, empty out sigfwd_list. */ - TAILQ_FOREACH_SAFE(sigfwd, &sigfwd_list, entries, sigfwd_next) { - free(sigfwd); - } - TAILQ_INIT(&sigfwd_list); - /* XXX - child (monitor) is dead, we should exit too? */ - } - break; - } - } -} - -/* - * Schedule a signal to be forwarded. - */ -static void -schedule_signal(struct sudo_event_base *evbase, int signo) -{ - struct sigforward *sigfwd; - char signame[SIG2STR_MAX]; - debug_decl(schedule_signal, SUDO_DEBUG_EXEC) - - if (signo == SIGCONT_FG) - strlcpy(signame, "CONT_FG", sizeof(signame)); - else if (signo == SIGCONT_BG) - strlcpy(signame, "CONT_BG", sizeof(signame)); - else if (sig2str(signo, signame) == -1) - snprintf(signame, sizeof(signame), "%d", signo); - sudo_debug_printf(SUDO_DEBUG_DIAG, "scheduled SIG%s for child", signame); - - if ((sigfwd = calloc(1, sizeof(*sigfwd))) == NULL) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - sigfwd->signo = signo; - TAILQ_INSERT_TAIL(&sigfwd_list, sigfwd, entries); - - if (sudo_ev_add(evbase, sigfwd_event, NULL, true) == -1) - sudo_fatal(U_("unable to add event to queue")); - - debug_return; -} - -/* - * Generic handler for signals passed from parent -> child. - * The other end of signal_pipe is checked in the main event loop. + * Execute a command, potentially in a pty with I/O loggging, and + * wait for it to finish. + * This is a little bit tricky due to how POSIX job control works and + * we fact that we have two different controlling terminals to deal with. */ -#ifdef SA_SIGINFO -void -handler(int s, siginfo_t *info, void *context) +int +sudo_execute(struct command_details *details, struct command_status *cstat) { - unsigned char signo = (unsigned char)s; + debug_decl(sudo_execute, SUDO_DEBUG_EXEC) - /* - * Do not forward signals sent by a process in the command's process - * group, do not forward it as we don't want the child to indirectly - * kill itself. For example, this can happen with some versions of - * reboot that call kill(-1, SIGTERM) to kill all other processes. - */ - if (s != SIGCHLD && USER_SIGNALED(info) && info->si_pid != 0) { - pid_t si_pgrp = getpgid(info->si_pid); - if (si_pgrp != -1) { - if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) - return; - } else if (info->si_pid == cmnd_pid) { - return; - } + if (dispatch_pending_signals(cstat) != 0) { + /* Killed by SIGINT or SIGQUIT */ + debug_return_int(0); } - /* - * The pipe is non-blocking, if we overflow the kernel's pipe - * buffer we drop the signal. This is not a problem in practice. - */ - while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { - if (errno != EINTR) - break; + /* If running in background mode, fork and exit. */ + if (ISSET(details->flags, CD_BACKGROUND)) { + switch (sudo_debug_fork()) { + case -1: + cstat->type = CMD_ERRNO; + cstat->val = errno; + debug_return_int(-1); + case 0: + /* child continues without controlling terminal */ + (void)setpgid(0, 0); + break; + default: + /* parent exits (but does not flush buffers) */ + sudo_debug_exit_int(__func__, __FILE__, __LINE__, + sudo_debug_subsys, 0); + _exit(0); + } } -} -#else -void -handler(int s) -{ - unsigned char signo = (unsigned char)s; /* - * The pipe is non-blocking, if we overflow the kernel's pipe - * buffer we drop the signal. This is not a problem in practice. + * If we have an I/O plugin or the policy plugin has requested one, we + * need to allocate a pty. */ - while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { - if (errno != EINTR) - break; + if (!TAILQ_EMPTY(&io_plugins) || ISSET(details->flags, CD_USE_PTY)) { + /* + * Run the command in a new pty, wait for it to finish and + * send the plugin the exit status. + */ + exec_pty(details, cstat); + } else if (!ISSET(details->flags, CD_SET_TIMEOUT|CD_SUDOEDIT) && + policy_plugin.u.policy->close == NULL) { + /* + * If we are not running the command in a pty, we were not invoked + * as sudoedit, there is no command timeout and there is no close + * function, just exec directly. Only returns on error. + */ + exec_cmnd(details, -1); + cstat->type = CMD_ERRNO; + cstat->val = errno; + } else { + /* + * No pty but we need to wait for the command to finish to + * send the plugin the exit status. + */ + exec_nopty(details, cstat); } + debug_return_int(cstat->type == CMD_ERRNO ? -1 : 0); } -#endif -#ifdef SA_SIGINFO /* - * Generic handler for signals passed from parent -> child. - * The other end of signal_pipe is checked in the main event loop. - * This version is for the non-pty case and does not forward - * signals that are generated by the kernel. + * Kill command with increasing urgency. */ -static void -handler_user_only(int s, siginfo_t *info, void *context) +void +terminate_command(pid_t pid, bool use_pgrp) { - unsigned char signo = (unsigned char)s; + debug_decl(terminate_command, SUDO_DEBUG_EXEC); - /* - * Only forward user-generated signals not sent by a process in - * the command's own process group. Signals sent by the kernel - * may include SIGTSTP when the user presses ^Z. Curses programs - * often trap ^Z and send SIGTSTP to their own pgrp, so we don't - * want to send an extra SIGTSTP. - */ - if (!USER_SIGNALED(info)) - return; - if (info->si_pid != 0) { - pid_t si_pgrp = getpgid(info->si_pid); - if (si_pgrp != -1) { - if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) - return; - } else if (info->si_pid == cmnd_pid) { - return; - } - } + /* Avoid killing more than a single process or process group. */ + if (pid <= 0) + debug_return; /* - * The pipe is non-blocking, if we overflow the kernel's pipe - * buffer we drop the signal. This is not a problem in practice. + * Note that SIGCHLD will interrupt the sleep() */ - while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { - if (errno != EINTR) - break; - } -} -#endif /* SA_SIGINFO */ - -/* - * Open a pipe and make both ends non-blocking. - * Returns 0 on success and -1 on error. - */ -int -pipe_nonblock(int fds[2]) -{ - int flags, ret; - debug_decl(pipe_nonblock, SUDO_DEBUG_EXEC) - - ret = pipe(fds); - if (ret != -1) { - flags = fcntl(fds[0], F_GETFL, 0); - if (flags != -1 && !ISSET(flags, O_NONBLOCK)) - ret = fcntl(fds[0], F_SETFL, flags | O_NONBLOCK); - if (ret != -1) { - flags = fcntl(fds[1], F_GETFL, 0); - if (flags != -1 && !ISSET(flags, O_NONBLOCK)) - ret = fcntl(fds[1], F_SETFL, flags | O_NONBLOCK); - } - if (ret == -1) { - close(fds[0]); - close(fds[1]); - } + if (use_pgrp) { + sudo_debug_printf(SUDO_DEBUG_INFO, "killpg %d SIGHUP", (int)pid); + killpg(pid, SIGHUP); + sudo_debug_printf(SUDO_DEBUG_INFO, "killpg %d SIGTERM", (int)pid); + killpg(pid, SIGTERM); + sleep(2); + sudo_debug_printf(SUDO_DEBUG_INFO, "killpg %d SIGKILL", (int)pid); + killpg(pid, SIGKILL); + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, "kill %d SIGHUP", (int)pid); + kill(pid, SIGHUP); + sudo_debug_printf(SUDO_DEBUG_INFO, "kill %d SIGTERM", (int)pid); + kill(pid, SIGTERM); + sleep(2); + sudo_debug_printf(SUDO_DEBUG_INFO, "kill %d SIGKILL", (int)pid); + kill(pid, SIGKILL); } - debug_return_int(ret); + debug_return; } diff -Nru sudo-1.8.19p1/src/exec_monitor.c sudo-1.8.20p2/src/exec_monitor.c --- sudo-1.8.19p1/src/exec_monitor.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/src/exec_monitor.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,667 @@ +/* + * Copyright (c) 2009-2017 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 +#include +#include +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include +#include +#include +#include + +#include "sudo.h" +#include "sudo_event.h" +#include "sudo_exec.h" +#include "sudo_plugin.h" +#include "sudo_plugin_int.h" + +struct monitor_closure { + struct sudo_event_base *evbase; + struct sudo_event *errpipe_event; + struct sudo_event *backchannel_event; + struct sudo_event *signal_pipe_event; + struct command_status *cstat; + int backchannel; +}; + +static volatile pid_t cmnd_pgrp; +static pid_t mon_pgrp; + +extern int io_fds[6]; /* XXX */ + +/* + * Generic handler for signals recieved by the monitor process. + * The other end of signal_pipe is checked in the monitor event loop. + */ +#ifdef SA_SIGINFO +static void +mon_handler(int s, siginfo_t *info, void *context) +{ + unsigned char signo = (unsigned char)s; + + /* + * If the signal came from the process group of the command we ran, + * do not forward it as we don't want the child to indirectly kill + * itself. This can happen with, e.g., BSD-derived versions of + * reboot that call kill(-1, SIGTERM) to kill all other processes. + */ + if (s != SIGCHLD && USER_SIGNALED(info) && info->si_pid != 0) { + pid_t si_pgrp = getpgid(info->si_pid); + if (si_pgrp != -1) { + if (si_pgrp == cmnd_pgrp) + return; + } else if (info->si_pid == cmnd_pid) { + return; + } + } + + /* + * The pipe is non-blocking, if we overflow the kernel's pipe + * buffer we drop the signal. This is not a problem in practice. + */ + while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { + if (errno != EINTR) + break; + } +} +#else +static void +mon_handler(int s) +{ + unsigned char signo = (unsigned char)s; + + /* + * The pipe is non-blocking, if we overflow the kernel's pipe + * buffer we drop the signal. This is not a problem in practice. + */ + while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { + if (errno != EINTR) + break; + } +} +#endif + +/* + * Deliver a signal to the running command. + * The signal was either forwarded to us by the parent sudo process + * or was received by the monitor itself. + * + * There are two "special" signals, SIGCONT_FG and SIGCONT_BG that + * also specify whether the command should have the controlling tty. + */ +static void +deliver_signal(pid_t pid, int signo, bool from_parent) +{ + char signame[SIG2STR_MAX]; + int status; + debug_decl(deliver_signal, SUDO_DEBUG_EXEC); + + /* Avoid killing more than a single process or process group. */ + if (pid <= 0) + debug_return; + + if (signo == SIGCONT_FG) + strlcpy(signame, "CONT_FG", sizeof(signame)); + else if (signo == SIGCONT_BG) + strlcpy(signame, "CONT_BG", sizeof(signame)); + else if (sig2str(signo, signame) == -1) + snprintf(signame, sizeof(signame), "%d", signo); + + /* Handle signal from parent or monitor. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "received SIG%s%s", + signame, from_parent ? " from parent" : ""); + switch (signo) { + case SIGALRM: + terminate_command(pid, true); + break; + case SIGCONT_FG: + /* Continue in foreground, grant it controlling tty. */ + do { + status = tcsetpgrp(io_fds[SFD_SLAVE], cmnd_pgrp); + } while (status == -1 && errno == EINTR); + killpg(pid, SIGCONT); + break; + case SIGCONT_BG: + /* Continue in background, I take controlling tty. */ + do { + status = tcsetpgrp(io_fds[SFD_SLAVE], mon_pgrp); + } while (status == -1 && errno == EINTR); + killpg(pid, SIGCONT); + break; + case SIGKILL: + _exit(1); /* XXX */ + /* NOTREACHED */ + default: + /* Relay signal to command. */ + killpg(pid, signo); + break; + } + debug_return; +} + +/* + * Send status to parent over socketpair. + * Return value is the same as send(2). + */ +static int +send_status(int fd, struct command_status *cstat) +{ + int n = -1; + debug_decl(send_status, SUDO_DEBUG_EXEC); + + if (cstat->type != CMD_INVALID) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "sending status message to parent: [%d, %d]", + cstat->type, cstat->val); + do { + n = send(fd, cstat, sizeof(*cstat), 0); + } while (n == -1 && errno == EINTR); + if (n != sizeof(*cstat)) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "unable to send status to parent: %s", strerror(errno)); + } + cstat->type = CMD_INVALID; /* prevent re-sending */ + } + debug_return_int(n); +} + +/* + * Wait for command status after receiving SIGCHLD. + * If the command was stopped, the status is send back to the parent. + * Otherwise, cstat is filled in but not sent. + */ +static void +mon_handle_sigchld(int backchannel, struct command_status *cstat) +{ + char signame[SIG2STR_MAX]; + int status; + pid_t pid; + debug_decl(mon_handle_sigchld, SUDO_DEBUG_EXEC); + + /* Read command status. */ + do { + pid = waitpid(cmnd_pid, &status, WUNTRACED|WCONTINUED|WNOHANG); + } while (pid == -1 && errno == EINTR); + switch (pid) { + case 0: + errno = ECHILD; + /* FALLTHROUGH */ + case -1: + sudo_warn(U_("%s: %s"), __func__, "waitpid"); + debug_return; + } + + if (WIFCONTINUED(status)) { + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) resumed", + __func__, (int)cmnd_pid); + } else if (WIFSTOPPED(status)) { + if (sig2str(WSTOPSIG(status), signame) == -1) + snprintf(signame, sizeof(signame), "%d", WSTOPSIG(status)); + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) stopped, SIG%s", + __func__, (int)cmnd_pid, signame); + } else if (WIFSIGNALED(status)) { + if (sig2str(WTERMSIG(status), signame) == -1) + snprintf(signame, sizeof(signame), "%d", WTERMSIG(status)); + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) killed, SIG%s", + __func__, (int)cmnd_pid, signame); + cmnd_pid = -1; + } else if (WIFEXITED(status)) { + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) exited: %d", + __func__, (int)cmnd_pid, WEXITSTATUS(status)); + cmnd_pid = -1; + } else { + sudo_debug_printf(SUDO_DEBUG_WARN, + "%s: unexpected wait status %d for command (%d)", + __func__, status, (int)cmnd_pid); + } + + /* Don't overwrite execve() failure with child exit status. */ + if (cstat->type != CMD_ERRNO) { + /* + * Store wait status in cstat and forward to parent if stopped. + */ + cstat->type = CMD_WSTATUS; + cstat->val = status; + if (WIFSTOPPED(status)) { + /* Save the foreground pgid so we can restore it later. */ + do { + pid = tcgetpgrp(io_fds[SFD_SLAVE]); + } while (pid == -1 && errno == EINTR); + if (pid != mon_pgrp) + cmnd_pgrp = pid; + send_status(backchannel, cstat); + } + } + + debug_return; +} + +static void +mon_signal_pipe_cb(int fd, int what, void *v) +{ + struct monitor_closure *mc = v; + unsigned char signo; + ssize_t nread; + debug_decl(mon_signal_pipe_cb, SUDO_DEBUG_EXEC); + + nread = read(fd, &signo, sizeof(signo)); + if (nread <= 0) { + /* It should not be possible to get EOF but just in case. */ + if (nread == 0) + errno = ECONNRESET; + if (errno != EINTR && errno != EAGAIN) { + sudo_warn(U_("error reading from signal pipe")); + sudo_ev_loopbreak(mc->evbase); + } + } else { + /* + * Handle SIGCHLD specially and deliver other signals + * directly to the command. + */ + if (signo == SIGCHLD) { + mon_handle_sigchld(mc->backchannel, mc->cstat); + if (cmnd_pid == -1) { + /* Remove all but the errpipe event. */ + sudo_ev_del(mc->evbase, mc->backchannel_event); + sudo_ev_del(mc->evbase, mc->signal_pipe_event); + } + } else { + deliver_signal(cmnd_pid, signo, false); + } + } + debug_return; +} + +/* Note: this is basically the same as errpipe_cb() in exec_nopty.c */ +static void +mon_errpipe_cb(int fd, int what, void *v) +{ + struct monitor_closure *mc = v; + ssize_t nread; + int errval; + debug_decl(mon_errpipe_cb, SUDO_DEBUG_EXEC); + + /* + * Read errno from child or EOF when command is executed. + * Note that the error pipe is *blocking*. + */ + do { + nread = read(fd, &errval, sizeof(errval)); + } while (nread == -1 && errno == EINTR); + + switch (nread) { + case -1: + if (errno != EAGAIN) { + if (mc->cstat->val == CMD_INVALID) { + /* XXX - need a way to distinguish non-exec error. */ + mc->cstat->type = CMD_ERRNO; + mc->cstat->val = errno; + } + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: failed to read error pipe", __func__); + sudo_ev_loopbreak(mc->evbase); + } + break; + default: + if (nread == 0) { + /* The error pipe closes when the command is executed. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "EOF on error pipe"); + } else { + /* Errno value when child is unable to execute command. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "errno from child: %s", + strerror(errval)); + mc->cstat->type = CMD_ERRNO; + mc->cstat->val = errval; + } + sudo_ev_del(mc->evbase, mc->errpipe_event); + close(fd); + break; + } + debug_return; +} + +static void +mon_backchannel_cb(int fd, int what, void *v) +{ + struct monitor_closure *mc = v; + struct command_status cstmp; + ssize_t n; + debug_decl(mon_backchannel_cb, SUDO_DEBUG_EXEC); + + /* Read command from backchannel, should be a signal. */ + n = recv(fd, &cstmp, sizeof(cstmp), MSG_WAITALL); + if (n != sizeof(cstmp)) { + if (n == -1) { + if (errno == EINTR || errno == EAGAIN) + debug_return; + sudo_warn(U_("error reading from socketpair")); + } else { + /* short read or EOF, parent process died? */ + } + sudo_ev_loopbreak(mc->evbase); + } else { + if (cstmp.type == CMD_SIGNO) { + deliver_signal(cmnd_pid, cstmp.val, true); + } else { + sudo_warnx(U_("unexpected reply type on backchannel: %d"), cstmp.type); + } + } + debug_return; +} + +/* + * Sets up std{in,out,err} and executes the actual command. + * Returns only if execve() fails. + */ +static void +exec_cmnd_pty(struct command_details *details, bool foreground, int errfd) +{ + volatile pid_t self = getpid(); + debug_decl(exec_cmnd_pty, SUDO_DEBUG_EXEC); + + /* Register cleanup function */ + sudo_fatal_callback_register(pty_cleanup); + + /* Set command process group here too to avoid a race. */ + setpgid(0, self); + + /* Wire up standard fds, note that stdout/stderr may be pipes. */ + if (io_fds[SFD_STDIN] != STDIN_FILENO) { + if (dup2(io_fds[SFD_STDIN], STDIN_FILENO) == -1) + sudo_fatal("dup2"); + if (io_fds[SFD_STDIN] != io_fds[SFD_SLAVE]) + close(io_fds[SFD_STDIN]); + } + if (io_fds[SFD_STDOUT] != STDOUT_FILENO) { + if (dup2(io_fds[SFD_STDOUT], STDOUT_FILENO) == -1) + sudo_fatal("dup2"); + if (io_fds[SFD_STDOUT] != io_fds[SFD_SLAVE]) + close(io_fds[SFD_STDOUT]); + } + if (io_fds[SFD_STDERR] != STDERR_FILENO) { + if (dup2(io_fds[SFD_STDERR], STDERR_FILENO) == -1) + sudo_fatal("dup2"); + if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE]) + close(io_fds[SFD_STDERR]); + } + + /* Wait for parent to grant us the tty if we are foreground. */ + if (foreground && !ISSET(details->flags, CD_EXEC_BG)) { + struct timespec ts = { 0, 1000 }; /* 1us */ + while (tcgetpgrp(io_fds[SFD_SLAVE]) != self) + nanosleep(&ts, NULL); + } + + /* Done with the pty slave, don't leak it. */ + if (io_fds[SFD_SLAVE] != -1) + close(io_fds[SFD_SLAVE]); + + /* Execute command; only returns on error. */ + exec_cmnd(details, errfd); + + debug_return; +} + +/* + * Fill in the monitor closure and setup initial events. + * Allocates read events for the signal pipe, error pipe and backchannel. + */ +static void +fill_exec_closure_monitor(struct monitor_closure *mc, + struct command_status *cstat, int errfd, int backchannel) +{ + debug_decl(fill_exec_closure_monitor, SUDO_DEBUG_EXEC); + + /* Fill in the non-event part of the closure. */ + cstat->type = CMD_INVALID; + cstat->val = 0; + mc->cstat = cstat; + mc->backchannel = backchannel; + + /* Setup event base and events. */ + mc->evbase = sudo_ev_base_alloc(); + if (mc->evbase == NULL) + sudo_fatal(NULL); + + /* Event for local signals via signal_pipe. */ + mc->signal_pipe_event = sudo_ev_alloc(signal_pipe[0], + SUDO_EV_READ|SUDO_EV_PERSIST, mon_signal_pipe_cb, mc); + if (mc->signal_pipe_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(mc->evbase, mc->signal_pipe_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + + /* Event for command status via errfd. */ + mc->errpipe_event = sudo_ev_alloc(errfd, + SUDO_EV_READ|SUDO_EV_PERSIST, mon_errpipe_cb, mc); + if (mc->errpipe_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(mc->evbase, mc->errpipe_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + + /* Event for forwarded signals via backchannel. */ + mc->backchannel_event = sudo_ev_alloc(backchannel, + SUDO_EV_READ|SUDO_EV_PERSIST, mon_backchannel_cb, mc); + if (mc->backchannel_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(mc->evbase, mc->backchannel_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); +} + +/* + * Monitor process that creates a new session with the controlling tty, + * resets signal handlers and forks a child to call exec_cmnd_pty(). + * Waits for status changes from the command and relays them to the + * parent and relays signals from the parent to the command. + * Returns an error if fork(2) fails, else calls _exit(2). + */ +int +exec_monitor(struct command_details *details, bool foreground, int backchannel) +{ + struct command_status cstat; + struct monitor_closure mc; + sigaction_t sa; + int errpipe[2], n; + debug_decl(exec_monitor, SUDO_DEBUG_EXEC); + + /* Close unused fds. */ + if (io_fds[SFD_MASTER] != -1) + close(io_fds[SFD_MASTER]); + if (io_fds[SFD_USERTTY] != -1) + close(io_fds[SFD_USERTTY]); + + /* + * We use a pipe to atomically handle signal notification within + * the event loop. + */ + if (pipe2(signal_pipe, O_NONBLOCK) != 0) + sudo_fatal(U_("unable to create pipe")); + + /* Reset SIGWINCH and SIGALRM. */ + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sa.sa_handler = SIG_DFL; + if (sudo_sigaction(SIGWINCH, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGWINCH); + if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); + + /* Ignore any SIGTTIN or SIGTTOU we get. */ + sa.sa_handler = SIG_IGN; + if (sudo_sigaction(SIGTTIN, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTTIN); + if (sudo_sigaction(SIGTTOU, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTTOU); + + /* Block all signals in mon_handler(). */ + sigfillset(&sa.sa_mask); + + /* Note: HP-UX poll() will not be interrupted if SA_RESTART is set. */ + sa.sa_flags = SA_INTERRUPT; +#ifdef SA_SIGINFO + sa.sa_flags |= SA_SIGINFO; + sa.sa_sigaction = mon_handler; +#else + sa.sa_handler = mon_handler; +#endif + if (sudo_sigaction(SIGCHLD, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGCHLD); + + /* Catch common signals so we can cleanup properly. */ + sa.sa_flags = SA_RESTART; +#ifdef SA_SIGINFO + sa.sa_flags |= SA_SIGINFO; + sa.sa_sigaction = mon_handler; +#else + sa.sa_handler = mon_handler; +#endif + if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); + if (sudo_sigaction(SIGINT, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGINT); + if (sudo_sigaction(SIGQUIT, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGQUIT); + if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); + if (sudo_sigaction(SIGTSTP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTSTP); + if (sudo_sigaction(SIGUSR1, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGUSR1); + if (sudo_sigaction(SIGUSR2, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGUSR2); + + /* + * Start a new session with the parent as the session leader + * and the slave pty as the controlling terminal. + * This allows us to be notified when the command has been suspended. + */ + if (setsid() == -1) { + sudo_warn("setsid"); + goto bad; + } + if (pty_make_controlling() == -1) { + sudo_warn(U_("unable to set controlling tty")); + goto bad; + } + + mon_pgrp = getpgrp(); /* save a copy of our process group */ + + /* Start command and wait for it to stop or exit */ + if (pipe2(errpipe, O_CLOEXEC) == -1) + sudo_fatal(U_("unable to create pipe")); + cmnd_pid = sudo_debug_fork(); + if (cmnd_pid == -1) { + sudo_warn(U_("unable to fork")); + goto bad; + } + if (cmnd_pid == 0) { + /* We pass errno back to our parent via pipe on exec failure. */ + close(backchannel); + close(signal_pipe[0]); + close(signal_pipe[1]); + close(errpipe[0]); + restore_signals(); + + /* setup tty and exec command */ + exec_cmnd_pty(details, foreground, errpipe[1]); + while (write(errpipe[1], &errno, sizeof(int)) == -1) { + if (errno != EINTR) + break; + } + _exit(1); + } + close(errpipe[1]); + + /* No longer need execfd. */ + if (details->execfd != -1) { + close(details->execfd); + details->execfd = -1; + } + + /* Send the command's pid to main sudo process. */ + cstat.type = CMD_PID; + cstat.val = cmnd_pid; + while (send(backchannel, &cstat, sizeof(cstat), 0) == -1) { + if (errno != EINTR) + break; + } + + /* If any of stdin/stdout/stderr are pipes, close them in parent. */ + if (io_fds[SFD_STDIN] != io_fds[SFD_SLAVE]) + close(io_fds[SFD_STDIN]); + if (io_fds[SFD_STDOUT] != io_fds[SFD_SLAVE]) + close(io_fds[SFD_STDOUT]); + if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE]) + close(io_fds[SFD_STDERR]); + + /* Put command in its own process group. */ + cmnd_pgrp = cmnd_pid; + setpgid(cmnd_pid, cmnd_pgrp); + + /* Make the command the foreground process for the pty slave. */ + if (foreground && !ISSET(details->flags, CD_EXEC_BG)) { + do { + n = tcsetpgrp(io_fds[SFD_SLAVE], cmnd_pgrp); + } while (n == -1 && errno == EINTR); + } + + /* + * Create new event base and register read events for the + * signal pipe, error pipe, and backchannel. + */ + fill_exec_closure_monitor(&mc, &cstat, errpipe[0], backchannel); + + /* + * Wait for errno on pipe, signal on backchannel or for SIGCHLD. + * The event loop ends when the child is no longer running and + * the error pipe is closed. + */ + (void) sudo_ev_loop(mc.evbase, 0); + if (cmnd_pid != -1) { + /* XXX An error occurred, should send a message back. */ + sudo_debug_printf(SUDO_DEBUG_ERROR, + "Command still running after event loop exit, sending SIGKILL"); + kill(cmnd_pid, SIGKILL); + /* XXX - wait for cmnd_pid to exit */ + } else { + /* Send parent status. */ + send_status(backchannel, &cstat); + } + +#ifdef HAVE_SELINUX + if (ISSET(details->flags, CD_RBAC_ENABLED)) { + if (selinux_restore_tty() != 0) + sudo_warnx(U_("unable to restore tty label")); + } +#endif + sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, 1); + _exit(1); + +bad: + debug_return_int(errno); +} diff -Nru sudo-1.8.19p1/src/exec_nopty.c sudo-1.8.20p2/src/exec_nopty.c --- sudo-1.8.19p1/src/exec_nopty.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/src/exec_nopty.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,522 @@ +/* + * Copyright (c) 2009-2017 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 +#include +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include +#include +#include + +#include "sudo.h" +#include "sudo_exec.h" +#include "sudo_event.h" +#include "sudo_plugin.h" +#include "sudo_plugin_int.h" + +struct exec_closure_nopty { + pid_t child; + struct command_status *cstat; + struct command_details *details; + struct sudo_event_base *evbase; + struct sudo_event *signal_event; + struct sudo_event *errpipe_event; +}; + +static void signal_pipe_cb(int fd, int what, void *v); +#ifdef SA_SIGINFO +static void exec_handler_user_only(int s, siginfo_t *info, void *context); +#endif + +/* Note: this is basically the same as mon_errpipe_cb() in exec_monitor.c */ +static void +errpipe_cb(int fd, int what, void *v) +{ + struct exec_closure_nopty *ec = v; + ssize_t nread; + int errval; + debug_decl(errpipe_cb, SUDO_DEBUG_EXEC); + + /* + * Read errno from child or EOF when command is executed. + * Note that the error pipe is *blocking*. + */ + do { + nread = read(fd, &errval, sizeof(errval)); + } while (nread == -1 && errno == EINTR); + + switch (nread) { + case -1: + if (errno != EAGAIN) { + if (ec->cstat->val == CMD_INVALID) { + /* XXX - need a way to distinguish non-exec error. */ + ec->cstat->type = CMD_ERRNO; + ec->cstat->val = errno; + } + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: failed to read error pipe", __func__); + sudo_ev_loopbreak(ec->evbase); + } + break; + default: + if (nread == 0) { + /* The error pipe closes when the command is executed. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "EOF on error pipe"); + } else { + /* Errno value when child is unable to execute command. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "errno from child: %s", + strerror(errval)); + ec->cstat->type = CMD_ERRNO; + ec->cstat->val = errval; + } + sudo_ev_del(ec->evbase, ec->errpipe_event); + close(fd); + break; + } + debug_return; +} + +/* + * Fill in the exec closure and setup initial exec events. + * Allocates events for the signal pipe and error pipe. + */ +static void +fill_exec_closure_nopty(struct exec_closure_nopty *ec, + struct command_status *cstat, struct command_details *details, int errfd) +{ + debug_decl(fill_exec_closure_nopty, SUDO_DEBUG_EXEC) + + /* Fill in the non-event part of the closure. */ + ec->child = cmnd_pid; + ec->cstat = cstat; + ec->details = details; + + /* Setup event base and events. */ + ec->evbase = sudo_ev_base_alloc(); + if (ec->evbase == NULL) + sudo_fatal(NULL); + + /* Event for local signals via signal_pipe. */ + ec->signal_event = sudo_ev_alloc(signal_pipe[0], + SUDO_EV_READ|SUDO_EV_PERSIST, signal_pipe_cb, ec); + if (ec->signal_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(ec->evbase, ec->signal_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + + /* Event for command status via errfd. */ + ec->errpipe_event = sudo_ev_alloc(errfd, + SUDO_EV_READ|SUDO_EV_PERSIST, errpipe_cb, ec); + if (ec->errpipe_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(ec->evbase, ec->errpipe_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + + sudo_debug_printf(SUDO_DEBUG_INFO, "signal pipe fd %d\n", signal_pipe[0]); + sudo_debug_printf(SUDO_DEBUG_INFO, "error pipe fd %d\n", errfd); + + debug_return; +} + +/* + * Execute a command and wait for it to finish. + */ +int +exec_nopty(struct command_details *details, struct command_status *cstat) +{ + struct exec_closure_nopty ec; + sigaction_t sa; + int errpipe[2]; + debug_decl(exec_nopty, SUDO_DEBUG_EXEC) + + /* + * We use a pipe to get errno if execve(2) fails in the child. + */ + if (pipe2(errpipe, O_CLOEXEC) == -1) + sudo_fatal(U_("unable to create pipe")); + + /* + * Signals to pass to the child process (excluding SIGALRM). + * We block all other signals while running the signal handler. + * Note: HP-UX select() will not be interrupted if SA_RESTART set. + * + * We also need to handle suspend/restore of sudo and the command. + * In most cases, the command will be in the same process group as + * sudo and job control will "just work". However, if the command + * changes its process group ID and does not change it back (or is + * kill by SIGSTOP which is not catchable), we need to resume the + * command manually. Also, if SIGTSTP is sent directly to sudo, + * we need to suspend the command, and then suspend ourself, restoring + * the default SIGTSTP handler temporarily. + * + * XXX - currently we send SIGCONT upon resume in some cases where + * we don't need to (e.g. command pgrp == parent pgrp). + */ + + memset(&sa, 0, sizeof(sa)); + sigfillset(&sa.sa_mask); + sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */ +#ifdef SA_SIGINFO + sa.sa_flags |= SA_SIGINFO; + sa.sa_sigaction = exec_handler; +#else + sa.sa_handler = exec_handler; +#endif + if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); + if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); + if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); + if (sudo_sigaction(SIGPIPE, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGPIPE); + if (sudo_sigaction(SIGUSR1, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGUSR1); + if (sudo_sigaction(SIGUSR2, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGUSR2); + if (sudo_sigaction(SIGCHLD, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGCHLD); + if (sudo_sigaction(SIGCONT, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGCONT); +#ifdef SIGINFO + if (sudo_sigaction(SIGINFO, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGINFO); +#endif + + /* + * When not running the command in a pty, we do not want to + * forward signals generated by the kernel that the child will + * already have received by virtue of being in the controlling + * terminals's process group (SIGINT, SIGQUIT, SIGTSTP). + */ +#ifdef SA_SIGINFO + sa.sa_flags |= SA_SIGINFO; + sa.sa_sigaction = exec_handler_user_only; +#endif + if (sudo_sigaction(SIGINT, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGINT); + if (sudo_sigaction(SIGQUIT, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGQUIT); + if (sudo_sigaction(SIGTSTP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTSTP); + + /* + * The policy plugin's session init must be run before we fork + * or certain pam modules won't be able to track their state. + */ + if (policy_init_session(details) != true) + sudo_fatalx(U_("policy plugin failed session initialization")); + + ppgrp = getpgrp(); /* parent's process group */ + + cmnd_pid = sudo_debug_fork(); + switch (cmnd_pid) { + case -1: + sudo_fatal(U_("unable to fork")); + break; + case 0: + /* child */ + close(errpipe[0]); + close(signal_pipe[0]); + close(signal_pipe[1]); + exec_cmnd(details, errpipe[1]); + while (write(errpipe[1], &errno, sizeof(int)) == -1) { + if (errno != EINTR) + break; + } + sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, 1); + _exit(1); + } + sudo_debug_printf(SUDO_DEBUG_INFO, "executed %s, pid %d", details->command, + (int)cmnd_pid); + close(errpipe[1]); + + /* No longer need execfd. */ + if (details->execfd != -1) { + close(details->execfd); + details->execfd = -1; + } + + /* Set command timeout if specified. */ + if (ISSET(details->flags, CD_SET_TIMEOUT)) + alarm(details->timeout); + + /* + * Fill in exec closure, allocate event base and two persistent events: + * the signal pipe and the error pipe. + */ + fill_exec_closure_nopty(&ec, cstat, details, errpipe[0]); + + /* + * Non-pty event loop. + * Wait for command to exit, handles signals and the error pipe. + */ + if (sudo_ev_loop(ec.evbase, 0) == -1) + sudo_warn(U_("error in event loop")); + if (sudo_ev_got_break(ec.evbase)) { + /* error from callback */ + sudo_debug_printf(SUDO_DEBUG_ERROR, "event loop exited prematurely"); + /* kill command */ + terminate_command(ec.child, true); + } + +#ifdef HAVE_SELINUX + if (ISSET(details->flags, CD_RBAC_ENABLED)) { + if (selinux_restore_tty() != 0) + sudo_warnx(U_("unable to restore tty label")); + } +#endif + + /* Free things up. */ + sudo_ev_base_free(ec.evbase); + sudo_ev_free(ec.signal_event); + sudo_ev_free(ec.errpipe_event); + debug_return_int(cstat->type == CMD_ERRNO ? -1 : 0); +} + +/* + * Wait for command status after receiving SIGCHLD. + * If the command exits, fill in cstat and stop the event loop. + * If the command stops, save the tty pgrp, suspend sudo, then restore + * the tty pgrp when sudo resumes. + */ +static void +handle_sigchld_nopty(struct exec_closure_nopty *ec) +{ + pid_t pid; + int status; + char signame[SIG2STR_MAX]; + debug_decl(handle_sigchld_nopty, SUDO_DEBUG_EXEC) + + /* Read command status. */ + do { + pid = waitpid(ec->child, &status, WUNTRACED|WNOHANG); + } while (pid == -1 && errno == EINTR); + switch (pid) { + case 0: + /* waitpid() will return 0 for SIGCONT, which we don't care about */ + debug_return; + case -1: + sudo_warn(U_("%s: %s"), __func__, "waitpid"); + debug_return; + } + + if (WIFSTOPPED(status)) { + /* + * Save the controlling terminal's process group so we can restore it + * after we resume, if needed. Most well-behaved shells change the + * pgrp back to its original value before suspending so we must + * not try to restore in that case, lest we race with the child upon + * resume, potentially stopping sudo with SIGTTOU while the command + * continues to run. + */ + sigaction_t sa, osa; + pid_t saved_pgrp = -1; + int fd, signo = WSTOPSIG(status); + + if (sig2str(signo, signame) == -1) + snprintf(signame, sizeof(signame), "%d", signo); + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) stopped, SIG%s", + __func__, (int)ec->child, signame); + + fd = open(_PATH_TTY, O_RDWR); + if (fd != -1) { + saved_pgrp = tcgetpgrp(fd); + if (saved_pgrp == -1) { + close(fd); + fd = -1; + } + } + if (saved_pgrp != -1) { + /* + * Child was stopped trying to access the controlling terminal. + * If the child has a different pgrp and we own the controlling + * terminal, give it to the child's pgrp and let it continue. + */ + if (signo == SIGTTOU || signo == SIGTTIN) { + if (saved_pgrp == ppgrp) { + pid_t child_pgrp = getpgid(ec->child); + if (child_pgrp != ppgrp) { + if (tcsetpgrp_nobg(fd, child_pgrp) == 0) { + if (killpg(child_pgrp, SIGCONT) != 0) { + sudo_warn("kill(%d, SIGCONT)", + (int)child_pgrp); + } + close(fd); + goto done; + } + } + } + } + } + if (signo == SIGTSTP) { + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sa.sa_handler = SIG_DFL; + if (sudo_sigaction(SIGTSTP, &sa, &osa) != 0) { + sudo_warn(U_("unable to set handler for signal %d"), + SIGTSTP); + } + } + if (kill(getpid(), signo) != 0) + sudo_warn("kill(%d, SIG%s)", (int)getpid(), signame); + if (signo == SIGTSTP) { + if (sudo_sigaction(SIGTSTP, &osa, NULL) != 0) { + sudo_warn(U_("unable to restore handler for signal %d"), + SIGTSTP); + } + } + if (saved_pgrp != -1) { + /* + * On resume, restore foreground process group, if different. + * Otherwise, we cannot resume some shells (pdksh). + * + * It is possible that we are no longer the foreground process so + * use tcsetpgrp_nobg() to prevent sudo from receiving SIGTTOU. + */ + if (saved_pgrp != ppgrp) + tcsetpgrp_nobg(fd, saved_pgrp); + close(fd); + } + } else { + /* Child has exited or been killed, we are done. */ + if (WIFSIGNALED(status)) { + if (sig2str(WTERMSIG(status), signame) == -1) + snprintf(signame, sizeof(signame), "%d", WTERMSIG(status)); + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) killed, SIG%s", + __func__, (int)ec->child, signame); + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) exited: %d", + __func__, (int)ec->child, WEXITSTATUS(status)); + } + /* Don't overwrite execve() failure with child exit status. */ + if (ec->cstat->type != CMD_ERRNO) { + ec->cstat->type = CMD_WSTATUS; + ec->cstat->val = status; + } + ec->child = -1; + } +done: + debug_return; +} + +/* Signal pipe callback */ +static void +signal_pipe_cb(int fd, int what, void *v) +{ + struct exec_closure_nopty *ec = v; + char signame[SIG2STR_MAX]; + unsigned char signo; + ssize_t nread; + debug_decl(signal_pipe_cb, SUDO_DEBUG_EXEC) + + /* Process received signals until the child dies or the pipe is empty. */ + do { + /* read signal pipe */ + nread = read(fd, &signo, sizeof(signo)); + if (nread <= 0) { + /* It should not be possible to get EOF but just in case... */ + if (nread == 0) + errno = ECONNRESET; + /* Restart if interrupted by signal so the pipe doesn't fill. */ + if (errno == EINTR) + continue; + /* On error, store errno and break out of the event loop. */ + if (errno != EAGAIN) { + ec->cstat->type = CMD_ERRNO; + ec->cstat->val = errno; + sudo_warn(U_("error reading from signal pipe")); + sudo_ev_loopbreak(ec->evbase); + } + break; + } + if (sig2str(signo, signame) == -1) + snprintf(signame, sizeof(signame), "%d", signo); + sudo_debug_printf(SUDO_DEBUG_DIAG, + "%s: evbase %p, child: %d, signo %s(%d), cstat %p", + __func__, ec->evbase, (int)ec->child, signame, signo, ec->cstat); + + if (signo == SIGCHLD) { + handle_sigchld_nopty(ec); + if (ec->child == -1) { + /* Command exited or was killed, exit event loop. */ + sudo_ev_del(ec->evbase, ec->signal_event); + sudo_ev_loopexit(ec->evbase); + } + } else if (ec->child != -1) { + /* Send signal to child. */ + if (signo == SIGALRM) { + terminate_command(ec->child, false); + } else if (kill(ec->child, signo) != 0) { + sudo_warn("kill(%d, SIG%s)", (int)ec->child, signame); + } + } + } while (ec->child != -1); + debug_return; +} + +#ifdef SA_SIGINFO +/* + * Generic handler for signals passed from parent -> child. + * The other end of signal_pipe is checked in the main event loop. + * This version is for the non-pty case and does not forward + * signals that are generated by the kernel. + */ +static void +exec_handler_user_only(int s, siginfo_t *info, void *context) +{ + unsigned char signo = (unsigned char)s; + + /* + * Only forward user-generated signals not sent by a process in + * the command's own process group. Signals sent by the kernel + * may include SIGTSTP when the user presses ^Z. Curses programs + * often trap ^Z and send SIGTSTP to their own pgrp, so we don't + * want to send an extra SIGTSTP. + */ + if (!USER_SIGNALED(info)) + return; + if (info->si_pid != 0) { + pid_t si_pgrp = getpgid(info->si_pid); + if (si_pgrp != -1) { + if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) + return; + } else if (info->si_pid == cmnd_pid) { + return; + } + } + + /* + * The pipe is non-blocking, if we overflow the kernel's pipe + * buffer we drop the signal. This is not a problem in practice. + */ + while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { + if (errno != EINTR) + break; + } +} +#endif /* SA_SIGINFO */ diff -Nru sudo-1.8.19p1/src/exec_pty.c sudo-1.8.20p2/src/exec_pty.c --- sudo-1.8.19p1/src/exec_pty.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/src/exec_pty.c 2017-05-10 15:38:44.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2016 Todd C. Miller + * Copyright (c) 2009-2017 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 @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -30,13 +29,9 @@ # include #endif /* HAVE_STRINGS_H */ #include -#ifdef TIME_WITH_SYS_TIME -# include -#endif #include #include #include -#include #include "sudo.h" #include "sudo_event.h" @@ -44,25 +39,30 @@ #include "sudo_plugin.h" #include "sudo_plugin_int.h" -#define SFD_STDIN 0 -#define SFD_STDOUT 1 -#define SFD_STDERR 2 -#define SFD_MASTER 3 -#define SFD_SLAVE 4 -#define SFD_USERTTY 5 - /* Evaluates to true if the event has /dev/tty as its fd. */ #define USERTTY_EVENT(_ev) (sudo_ev_get_fd((_ev)) == io_fds[SFD_USERTTY]) #define TERM_COOKED 0 #define TERM_RAW 1 -/* Compatibility with older tty systems. */ -#if !defined(TIOCGWINSZ) && defined(TIOCGSIZE) -# define TIOCGWINSZ TIOCGSIZE -# define TIOCSWINSZ TIOCSSIZE -# define winsize ttysize -#endif +/* We keep a tailq of signals to forward to child. */ +struct sigforward { + TAILQ_ENTRY(sigforward) entries; + int signo; +}; +TAILQ_HEAD(sigfwd_list, sigforward); + +struct exec_closure_pty { + pid_t child; + sigset_t *omask; + struct command_status *cstat; + struct command_details *details; + struct sudo_event_base *evbase; + struct sudo_event *signal_event; + struct sudo_event *sigfwd_event; + struct sudo_event *backchannel_event; + struct sigfwd_list sigfwd_list; +}; /* * I/O buffer with associated read/write events and a logging action. @@ -83,101 +83,46 @@ SLIST_HEAD(io_buffer_list, io_buffer); static char slavename[PATH_MAX]; -static bool foreground, pipeline, tty_initialized; -static int io_fds[6] = { -1, -1, -1, -1, -1, -1}; +int io_fds[6] = { -1, -1, -1, -1, -1, -1}; /* XXX - sudo_exec.h? */ +static bool foreground, pipeline; +static bool tty_initialized; static int ttymode = TERM_COOKED; -static pid_t ppgrp, cmnd_pgrp, mon_pgrp; static sigset_t ttyblock; static struct io_buffer_list iobufs; +static const char *utmp_user; +static int fork_pty(struct command_details *details, int sv[], sigset_t *omask); static void del_io_events(bool nonblocking); -static int exec_monitor(struct command_details *details, int backchannel); -static void exec_pty(struct command_details *details, - struct command_status *cstat, int errfd); static void sigwinch(int s); static void sync_ttysize(int src, int dst); -static void deliver_signal(pid_t pid, int signo, bool from_parent); static int safe_close(int fd); static void ev_free_by_fd(struct sudo_event_base *evbase, int fd); static void check_foreground(void); +static void add_io_events(struct sudo_event_base *evbase); /* * Cleanup hook for sudo_fatal()/sudo_fatalx() */ -static void +void pty_cleanup(void) { debug_decl(cleanup, SUDO_DEBUG_EXEC); if (!TAILQ_EMPTY(&io_plugins) && io_fds[SFD_USERTTY] != -1) sudo_term_restore(io_fds[SFD_USERTTY], false); -#ifdef HAVE_SELINUX - selinux_restore_tty(); -#endif - utmp_logout(slavename, 0); /* XXX - only if CD_SET_UTMP */ + if (utmp_user != NULL) + utmp_logout(slavename, 0); debug_return; } /* - * Generic handler for signals recieved by the monitor process. - * The other end of signal_pipe is checked in the monitor event loop. - */ -#ifdef SA_SIGINFO -static void -mon_handler(int s, siginfo_t *info, void *context) -{ - unsigned char signo = (unsigned char)s; - - /* - * If the signal came from the process group of the command we ran, - * do not forward it as we don't want the child to indirectly kill - * itself. This can happen with, e.g., BSD-derived versions of - * reboot that call kill(-1, SIGTERM) to kill all other processes. - */ - if (s != SIGCHLD && USER_SIGNALED(info) && info->si_pid != 0) { - pid_t si_pgrp = getpgid(info->si_pid); - if (si_pgrp != -1) { - if (si_pgrp == cmnd_pgrp) - return; - } else if (info->si_pid == cmnd_pid) { - return; - } - } - - /* - * The pipe is non-blocking, if we overflow the kernel's pipe - * buffer we drop the signal. This is not a problem in practice. - */ - while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { - if (errno != EINTR) - break; - } -} -#else -static void -mon_handler(int s) -{ - unsigned char signo = (unsigned char)s; - - /* - * The pipe is non-blocking, if we overflow the kernel's pipe - * buffer we drop the signal. This is not a problem in practice. - */ - while (write(signal_pipe[1], &signo, sizeof(signo)) == -1) { - if (errno != EINTR) - break; - } -} -#endif - -/* * Allocate a pty if /dev/tty is a tty. * Fills in io_fds[SFD_USERTTY], io_fds[SFD_MASTER], io_fds[SFD_SLAVE] * and slavename globals. */ -void -pty_setup(uid_t uid, const char *tty, const char *utmp_user) +static void +pty_setup(uid_t uid, const char *tty) { debug_decl(pty_setup, SUDO_DEBUG_EXEC); @@ -197,6 +142,24 @@ debug_return; } +int +pty_make_controlling(void) +{ + if (io_fds[SFD_USERTTY] != -1) { +#ifdef TIOCSCTTY + if (ioctl(io_fds[SFD_SLAVE], TIOCSCTTY, NULL) != 0) + return -1; +#else + /* Set controlling tty by reopening slave. */ + int fd = open(slavename, O_RDWR); + if (fd == -1) + return -1; + close(fd); +#endif + } + return 0; +} + /* Call I/O plugin tty input log method. */ static bool log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob) @@ -416,13 +379,13 @@ * Returns SIGCONT_FG if the command should be resumed in the * foreground or SIGCONT_BG if it is a background process. */ -int -suspend_parent(int signo) +static int +suspend_sudo(int signo) { char signame[SIG2STR_MAX]; sigaction_t sa, osa; int ret = 0; - debug_decl(suspend_parent, SUDO_DEBUG_EXEC); + debug_decl(suspend_sudo, SUDO_DEBUG_EXEC); switch (signo) { case SIGTTOU: @@ -503,38 +466,6 @@ } /* - * Kill command with increasing urgency. - */ -void -terminate_command(pid_t pid, bool use_pgrp) -{ - debug_decl(terminate_command, SUDO_DEBUG_EXEC); - - /* - * Note that SIGCHLD will interrupt the sleep() - */ - if (use_pgrp) { - sudo_debug_printf(SUDO_DEBUG_INFO, "killpg %d SIGHUP", (int)pid); - killpg(pid, SIGHUP); - sudo_debug_printf(SUDO_DEBUG_INFO, "killpg %d SIGTERM", (int)pid); - killpg(pid, SIGTERM); - sleep(2); - sudo_debug_printf(SUDO_DEBUG_INFO, "killpg %d SIGKILL", (int)pid); - killpg(pid, SIGKILL); - } else { - sudo_debug_printf(SUDO_DEBUG_INFO, "kill %d SIGHUP", (int)pid); - kill(pid, SIGHUP); - sudo_debug_printf(SUDO_DEBUG_INFO, "kill %d SIGTERM", (int)pid); - kill(pid, SIGTERM); - sleep(2); - sudo_debug_printf(SUDO_DEBUG_INFO, "kill %d SIGKILL", (int)pid); - kill(pid, SIGKILL); - } - - debug_return; -} - -/* * Read an iobuf that is ready. */ static void @@ -708,11 +639,13 @@ * process with std{in,out,err} hooked up to the pty or pipes as appropriate. * Returns the child pid. */ -int +static int fork_pty(struct command_details *details, int sv[], sigset_t *omask) { + struct plugin_container *plugin; struct command_status cstat; - int io_pipe[3][2]; + int io_pipe[3][2] = { { -1, -1 }, { -1, -1 }, { -1, -1 } }; + bool interpose[3] = { false, false, false }; sigaction_t sa; sigset_t mask; pid_t child; @@ -738,6 +671,16 @@ sigaddset(&ttyblock, SIGTTIN); sigaddset(&ttyblock, SIGTTOU); + /* Determine whether any of std{in,out,err} should be logged. */ + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_stdin) + interpose[STDIN_FILENO] = true; + if (plugin->u.io->log_stdout) + interpose[STDOUT_FILENO] = true; + if (plugin->u.io->log_stderr) + interpose[STDERR_FILENO] = true; + } + /* * Setup stdin/stdout/stderr for child, to be duped after forking. * In background mode there is no stdin. @@ -763,58 +706,66 @@ } /* - * If either stdin, stdout or stderr is not a tty we use a pipe - * to interpose ourselves instead of duping the pty fd. + * If stdin, stdout or stderr is not a tty and logging is enabled, + * use a pipe to interpose ourselves instead of using the pty fd. */ - memset(io_pipe, 0, sizeof(io_pipe)); if (io_fds[SFD_STDIN] == -1 || !isatty(STDIN_FILENO)) { - sudo_debug_printf(SUDO_DEBUG_INFO, "stdin not a tty, creating a pipe"); - pipeline = true; - if (pipe(io_pipe[STDIN_FILENO]) != 0) - sudo_fatal(U_("unable to create pipe")); - io_buf_new(STDIN_FILENO, io_pipe[STDIN_FILENO][1], - log_stdin, &iobufs); - io_fds[SFD_STDIN] = io_pipe[STDIN_FILENO][0]; + if (!interpose[STDIN_FILENO]) { + /* Not logging stdin, do not interpose. */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "stdin not a tty, not logging"); + io_fds[SFD_STDIN] = dup(STDIN_FILENO); + if (io_fds[SFD_STDIN] == -1) + sudo_fatal("dup"); + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, + "stdin not a tty, creating a pipe"); + pipeline = true; + if (pipe(io_pipe[STDIN_FILENO]) != 0) + sudo_fatal(U_("unable to create pipe")); + io_buf_new(STDIN_FILENO, io_pipe[STDIN_FILENO][1], + log_stdin, &iobufs); + io_fds[SFD_STDIN] = io_pipe[STDIN_FILENO][0]; + } } if (io_fds[SFD_STDOUT] == -1 || !isatty(STDOUT_FILENO)) { - sudo_debug_printf(SUDO_DEBUG_INFO, "stdout not a tty, creating a pipe"); - pipeline = true; - if (pipe(io_pipe[STDOUT_FILENO]) != 0) - sudo_fatal(U_("unable to create pipe")); - io_buf_new(io_pipe[STDOUT_FILENO][0], STDOUT_FILENO, - log_stdout, &iobufs); - io_fds[SFD_STDOUT] = io_pipe[STDOUT_FILENO][1]; + if (!interpose[STDOUT_FILENO]) { + /* Not logging stdout, do not interpose. */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "stdout not a tty, not logging"); + io_fds[SFD_STDOUT] = dup(STDOUT_FILENO); + if (io_fds[SFD_STDOUT] == -1) + sudo_fatal("dup"); + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, + "stdout not a tty, creating a pipe"); + pipeline = true; + if (pipe(io_pipe[STDOUT_FILENO]) != 0) + sudo_fatal(U_("unable to create pipe")); + 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)) { - sudo_debug_printf(SUDO_DEBUG_INFO, "stderr not a tty, creating a pipe"); - if (pipe(io_pipe[STDERR_FILENO]) != 0) - sudo_fatal(U_("unable to create pipe")); - io_buf_new(io_pipe[STDERR_FILENO][0], STDERR_FILENO, - log_stderr, &iobufs); - io_fds[SFD_STDERR] = io_pipe[STDERR_FILENO][1]; + if (!interpose[STDERR_FILENO]) { + /* Not logging stderr, do not interpose. */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "stderr not a tty, not logging"); + io_fds[SFD_STDERR] = dup(STDERR_FILENO); + if (io_fds[SFD_STDERR] == -1) + sudo_fatal("dup"); + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, + "stderr not a tty, creating a pipe"); + if (pipe(io_pipe[STDERR_FILENO]) != 0) + sudo_fatal(U_("unable to create pipe")); + io_buf_new(io_pipe[STDERR_FILENO][0], STDERR_FILENO, + log_stderr, &iobufs); + io_fds[SFD_STDERR] = io_pipe[STDERR_FILENO][1]; + } } - /* We don't want to receive SIGTTIN/SIGTTOU, getting EIO is preferable. */ - sa.sa_handler = SIG_IGN; - if (sudo_sigaction(SIGTTIN, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTTIN); - if (sudo_sigaction(SIGTTOU, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTTOU); - - /* Job control signals to relay from parent to child. */ - sigfillset(&sa.sa_mask); - sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */ -#ifdef SA_SIGINFO - sa.sa_flags |= SA_SIGINFO; - sa.sa_sigaction = handler; -#else - sa.sa_handler = handler; -#endif - if (sudo_sigaction(SIGCHLD, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGCHLD); - if (sudo_sigaction(SIGTSTP, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTSTP); - if (foreground) { /* Copy terminal attrs from user tty -> pty slave. */ if (sudo_term_copy(io_fds[SFD_USERTTY], io_fds[SFD_SLAVE])) { @@ -853,31 +804,40 @@ (void)fcntl(sv[1], F_SETFD, FD_CLOEXEC); sigprocmask(SIG_SETMASK, omask, NULL); /* Close the other end of the stdin/stdout/stderr pipes and exec. */ - if (io_pipe[STDIN_FILENO][1]) + if (io_pipe[STDIN_FILENO][1] != -1) close(io_pipe[STDIN_FILENO][1]); - if (io_pipe[STDOUT_FILENO][0]) + if (io_pipe[STDOUT_FILENO][0] != -1) close(io_pipe[STDOUT_FILENO][0]); - if (io_pipe[STDERR_FILENO][0]) + if (io_pipe[STDERR_FILENO][0] != -1) close(io_pipe[STDERR_FILENO][0]); - exec_monitor(details, sv[1]); + /* + * If stdin/stdout is not a tty, start command in the background + * since it might be part of a pipeline that reads from /dev/tty. + * In this case, we rely on the command receiving SIGTTOU or SIGTTIN + * when it needs access to the controlling tty. + */ + exec_monitor(details, foreground && !pipeline, sv[1]); cstat.type = CMD_ERRNO; cstat.val = errno; - ignore_result(send(sv[1], &cstat, sizeof(cstat), 0)); + while (send(sv[1], &cstat, sizeof(cstat), 0) == -1) { + if (errno != EINTR) + break; + } _exit(1); } /* Close the other end of the stdin/stdout/stderr pipes. */ - if (io_pipe[STDIN_FILENO][0]) + if (io_pipe[STDIN_FILENO][0] != -1) close(io_pipe[STDIN_FILENO][0]); - if (io_pipe[STDOUT_FILENO][1]) + if (io_pipe[STDOUT_FILENO][1] != -1) close(io_pipe[STDOUT_FILENO][1]); - if (io_pipe[STDERR_FILENO][1]) + if (io_pipe[STDERR_FILENO][1] != -1) close(io_pipe[STDERR_FILENO][1]); debug_return_int(child); } -void +static void pty_close(struct command_status *cstat) { struct io_buffer *iob; @@ -908,670 +868,590 @@ if (io_fds[SFD_USERTTY] != -1) sudo_term_restore(io_fds[SFD_USERTTY], false); - /* If child was signalled, write the reason to stdout like the shell. */ - if (cstat->type == CMD_WSTATUS && WIFSIGNALED(cstat->val)) { - int signo = WTERMSIG(cstat->val); - if (signo && signo != SIGINT && signo != SIGPIPE) { - const char *reason = strsignal(signo); - n = io_fds[SFD_USERTTY] != -1 ? - io_fds[SFD_USERTTY] : STDOUT_FILENO; - if (write(n, reason, strlen(reason)) != -1) { - if (WCOREDUMP(cstat->val)) { - ignore_result(write(n, " (core dumped)", 14)); - } - ignore_result(write(n, "\n", 1)); - } - } - } - utmp_logout(slavename, cstat->type == CMD_WSTATUS ? cstat->val : 0); /* XXX - only if CD_SET_UTMP */ + /* Update utmp */ + if (utmp_user != NULL) + utmp_logout(slavename, cstat->type == CMD_WSTATUS ? cstat->val : 0); debug_return; } /* - * Schedule I/O events before starting the main event loop or - * resuming from suspend. + * Schedule a signal to be forwarded. */ -void -add_io_events(struct sudo_event_base *evbase) +static void +schedule_signal(struct exec_closure_pty *ec, int signo) { - struct io_buffer *iob; - debug_decl(add_io_events, SUDO_DEBUG_EXEC); + struct sigforward *sigfwd; + char signame[SIG2STR_MAX]; + debug_decl(schedule_signal, SUDO_DEBUG_EXEC) - /* - * Schedule all readers as long as the buffer is not full. - * Schedule writers that contain buffered data. - * Normally, write buffers are added on demand when data is read. - */ - SLIST_FOREACH(iob, &iobufs, entries) { - /* Don't read/write from /dev/tty if we are not in the foreground. */ - if (iob->revent != NULL && - (ttymode == TERM_RAW || !USERTTY_EVENT(iob->revent))) { - if (iob->len != sizeof(iob->buf)) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "added I/O revent %p, fd %d, events %d", - iob->revent, iob->revent->fd, iob->revent->events); - if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + if (signo == SIGCONT_FG) + strlcpy(signame, "CONT_FG", sizeof(signame)); + else if (signo == SIGCONT_BG) + strlcpy(signame, "CONT_BG", sizeof(signame)); + else if (sig2str(signo, signame) == -1) + snprintf(signame, sizeof(signame), "%d", signo); + sudo_debug_printf(SUDO_DEBUG_DIAG, "scheduled SIG%s for child", signame); + + if ((sigfwd = calloc(1, sizeof(*sigfwd))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + sigfwd->signo = signo; + TAILQ_INSERT_TAIL(&ec->sigfwd_list, sigfwd, entries); + + if (sudo_ev_add(ec->evbase, ec->sigfwd_event, NULL, true) == -1) + sudo_fatal(U_("unable to add event to queue")); + + debug_return; +} + +static void +backchannel_cb(int fd, int what, void *v) +{ + struct exec_closure_pty *ec = v; + ssize_t n; + debug_decl(backchannel_cb, SUDO_DEBUG_EXEC) + + /* read child status */ + n = recv(fd, ec->cstat, sizeof(struct command_status), MSG_WAITALL); + if (n != sizeof(struct command_status)) { + if (n == -1) { + switch (errno) { + case EINTR: + /* got a signal, restart loop to service it. */ + sudo_ev_loopcontinue(ec->evbase); + break; + case EAGAIN: + /* not ready after all... */ + break; + default: + ec->cstat->type = CMD_ERRNO; + ec->cstat->val = errno; + sudo_debug_printf(SUDO_DEBUG_ERROR, + "failed to read child status: %s", strerror(errno)); + sudo_ev_loopbreak(ec->evbase); + break; } + } else { + /* Short read or EOF. */ + sudo_debug_printf(SUDO_DEBUG_ERROR, + "failed to read child status: %s", n ? "short read" : "EOF"); + /* XXX - need new CMD_ type for monitor errors. */ + errno = n ? EIO : ECONNRESET; + ec->cstat->type = CMD_ERRNO; + ec->cstat->val = errno; + sudo_ev_loopbreak(ec->evbase); } - if (iob->wevent != NULL && - (foreground || !USERTTY_EVENT(iob->wevent))) { - if (iob->len > iob->off) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "added I/O wevent %p, fd %d, events %d", - iob->wevent, iob->wevent->fd, iob->wevent->events); - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); - } + debug_return; + } + switch (ec->cstat->type) { + case CMD_PID: + /* + * Once we know the command's pid we can unblock + * signals which ere blocked in fork_pty(). This + * avoids a race between exec of the command and + * receipt of a fatal signal from it. + */ + cmnd_pid = ec->cstat->val; + sudo_debug_printf(SUDO_DEBUG_INFO, "executed %s, pid %d", + ec->details->command, (int)cmnd_pid); + sigprocmask(SIG_SETMASK, ec->omask, NULL); + break; + case CMD_WSTATUS: + if (WIFSTOPPED(ec->cstat->val)) { + /* Suspend parent and tell child how to resume on return. */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "child stopped, suspending parent"); + n = suspend_sudo(WSTOPSIG(ec->cstat->val)); + schedule_signal(ec, n); + /* Re-enable I/O events and restart event loop to service signal. */ + add_io_events(ec->evbase); + sudo_ev_loopcontinue(ec->evbase); + } else { + /* Child exited or was killed, either way we are done. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "child exited or was killed"); + sudo_ev_loopexit(ec->evbase); } + break; + case CMD_ERRNO: + /* Child was unable to execute command or broken pipe. */ + sudo_debug_printf(SUDO_DEBUG_INFO, "errno from child: %s", + strerror(ec->cstat->val)); + sudo_ev_loopbreak(ec->evbase); + break; } debug_return; } /* - * Flush any output buffered in iobufs or readable from fds other - * than /dev/tty. Removes I/O events from the event base when done. + * Handle changes to the monitors's status (SIGCHLD). */ static void -del_io_events(bool nonblocking) +handle_sigchld_pty(struct exec_closure_pty *ec) { - struct io_buffer *iob; - struct sudo_event_base *evbase; - debug_decl(del_io_events, SUDO_DEBUG_EXEC); + int n, status; + pid_t pid; + debug_decl(handle_sigchld_pty, SUDO_DEBUG_EXEC) - /* Remove iobufs from existing event base. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->revent != NULL) { + /* + * Monitor process was signaled; wait for it as needed. + */ + do { + pid = waitpid(ec->child, &status, WUNTRACED|WNOHANG); + } while (pid == -1 && errno == EINTR); + if (pid == ec->child) { + /* + * If the monitor dies we get notified via backchannel_cb(). + * If it was stopped, we should stop too (the command keeps + * running in its pty) and continue it when we come back. + */ + if (WIFSTOPPED(status)) { sudo_debug_printf(SUDO_DEBUG_INFO, - "deleted I/O revent %p, fd %d, events %d", - iob->revent, iob->revent->fd, iob->revent->events); - sudo_ev_del(NULL, iob->revent); - } - if (iob->wevent != NULL) { + "monitor stopped, suspending sudo"); + n = suspend_sudo(WSTOPSIG(status)); + kill(pid, SIGCONT); + schedule_signal(ec, n); + /* Re-enable I/O events and restart event loop. */ + add_io_events(ec->evbase); + sudo_ev_loopcontinue(ec->evbase); + } else if (WIFSIGNALED(status)) { + char signame[SIG2STR_MAX]; + if (sig2str(WTERMSIG(status), signame) == -1) + snprintf(signame, sizeof(signame), "%d", WTERMSIG(status)); + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: monitor (%d) killed, SIG%s", + __func__, (int)ec->child, signame); + ec->child = -1; + } else { sudo_debug_printf(SUDO_DEBUG_INFO, - "deleted I/O wevent %p, fd %d, events %d", - iob->wevent, iob->wevent->fd, iob->wevent->events); - sudo_ev_del(NULL, iob->wevent); + "%s: monitor exited, status %d", __func__, WEXITSTATUS(status)); + ec->child = -1; } } + debug_return; +} - /* Create temporary event base for flushing. */ - evbase = sudo_ev_base_alloc(); - if (evbase == NULL) - sudo_fatal(NULL); +/* Signal pipe callback */ +static void +signal_pipe_cb(int fd, int what, void *v) +{ + struct exec_closure_pty *ec = v; + char signame[SIG2STR_MAX]; + unsigned char signo; + ssize_t nread; + debug_decl(signal_pipe_cb, SUDO_DEBUG_EXEC) - /* Avoid reading from /dev/tty, just flush existing data. */ - SLIST_FOREACH(iob, &iobufs, entries) { - /* Don't read from /dev/tty while flushing. */ - if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) { - if (iob->len != sizeof(iob->buf)) { - if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + /* Process received signals until the child dies or the pipe is empty. */ + do { + /* read signal pipe */ + nread = read(fd, &signo, sizeof(signo)); + if (nread <= 0) { + /* It should not be possible to get EOF but just in case... */ + if (nread == 0) + errno = ECONNRESET; + /* Restart if interrupted by signal so the pipe doesn't fill. */ + if (errno == EINTR) + continue; + /* On error, store errno and break out of the event loop. */ + if (errno != EAGAIN) { + ec->cstat->type = CMD_ERRNO; + ec->cstat->val = errno; + sudo_warn(U_("error reading from signal pipe")); + sudo_ev_loopbreak(ec->evbase); } + break; } - /* Flush any write buffers with data in them. */ - if (iob->wevent != NULL) { - if (iob->len > iob->off) { - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + if (sig2str(signo, signame) == -1) + snprintf(signame, sizeof(signame), "%d", signo); + sudo_debug_printf(SUDO_DEBUG_DIAG, + "%s: evbase %p, child: %d, signo %s(%d), cstat %p", + __func__, ec->evbase, (int)ec->child, signame, signo, ec->cstat); + + if (signo == SIGCHLD) { + handle_sigchld_pty(ec); + } else if (ec->child != -1) { + /* Schedule signo to be forwared to the child. */ + schedule_signal(ec, signo); + /* Restart event loop to service signal immediately. */ + sudo_ev_loopcontinue(ec->evbase); + } + } while (ec->child != -1); + debug_return; +} + +/* + * Forward signals in sigfwd_list to the monitor so it can + * deliver them to the command. + */ +static void +sigfwd_cb(int sock, int what, void *v) +{ + struct exec_closure_pty *ec = v; + char signame[SIG2STR_MAX]; + struct sigforward *sigfwd; + struct command_status cstat; + ssize_t nsent; + debug_decl(sigfwd_cb, SUDO_DEBUG_EXEC) + + while ((sigfwd = TAILQ_FIRST(&ec->sigfwd_list)) != NULL) { + if (sigfwd->signo == SIGCONT_FG) + strlcpy(signame, "CONT_FG", sizeof(signame)); + else if (sigfwd->signo == SIGCONT_BG) + strlcpy(signame, "CONT_BG", sizeof(signame)); + else if (sig2str(sigfwd->signo, signame) == -1) + snprintf(signame, sizeof(signame), "%d", sigfwd->signo); + sudo_debug_printf(SUDO_DEBUG_INFO, + "sending SIG%s to child over backchannel", signame); + cstat.type = CMD_SIGNO; + cstat.val = sigfwd->signo; + do { + nsent = send(sock, &cstat, sizeof(cstat), 0); + } while (nsent == -1 && errno == EINTR); + TAILQ_REMOVE(&ec->sigfwd_list, sigfwd, entries); + free(sigfwd); + if (nsent != sizeof(cstat)) { + if (errno == EPIPE) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "broken pipe writing to child over backchannel"); + /* Other end of socket gone, empty out sigfwd_list. */ + while ((sigfwd = TAILQ_FIRST(&ec->sigfwd_list)) != NULL) { + TAILQ_REMOVE(&ec->sigfwd_list, sigfwd, entries); + free(sigfwd); + } + /* XXX - child (monitor) is dead, we should exit too? */ } + break; } } - (void) sudo_ev_loop(evbase, SUDO_EVLOOP_NONBLOCK); - - /* - * If not in non-blocking mode, make sure we flush write buffers. - * We don't want to read from the pty or stdin since that might block - * and the command is no longer running anyway. - */ - if (!nonblocking) { - /* Clear out iobufs from event base. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) - sudo_ev_del(evbase, iob->revent); - if (iob->wevent != NULL) - sudo_ev_del(evbase, iob->wevent); - } - - SLIST_FOREACH(iob, &iobufs, entries) { - /* Flush any write buffers with data in them. */ - if (iob->wevent != NULL) { - if (iob->len > iob->off) { - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); - } - } - } - (void) sudo_ev_loop(evbase, 0); - - /* We should now have flushed all write buffers. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->wevent != NULL) { - if (iob->len > iob->off) { - sudo_debug_printf(SUDO_DEBUG_ERROR, - "unflushed data: wevent %p, fd %d, events %d", - iob->wevent, iob->wevent->fd, iob->wevent->events); - } - } - } - } - - /* Free temporary event base, removing its events. */ - sudo_ev_base_free(evbase); - - debug_return; -} - -static void -deliver_signal(pid_t pid, int signo, bool from_parent) -{ - char signame[SIG2STR_MAX]; - int status; - debug_decl(deliver_signal, SUDO_DEBUG_EXEC); - - if (signo == SIGCONT_FG) - strlcpy(signame, "CONT_FG", sizeof(signame)); - else if (signo == SIGCONT_BG) - strlcpy(signame, "CONT_BG", sizeof(signame)); - else if (sig2str(signo, signame) == -1) - snprintf(signame, sizeof(signame), "%d", signo); - - /* Handle signal from parent. */ - sudo_debug_printf(SUDO_DEBUG_INFO, "received SIG%s%s", - signame, from_parent ? " from parent" : ""); - switch (signo) { - case SIGALRM: - terminate_command(pid, true); - break; - case SIGCONT_FG: - /* Continue in foreground, grant it controlling tty. */ - do { - status = tcsetpgrp(io_fds[SFD_SLAVE], cmnd_pgrp); - } while (status == -1 && errno == EINTR); - killpg(pid, SIGCONT); - break; - case SIGCONT_BG: - /* Continue in background, I take controlling tty. */ - do { - status = tcsetpgrp(io_fds[SFD_SLAVE], mon_pgrp); - } while (status == -1 && errno == EINTR); - killpg(pid, SIGCONT); - break; - case SIGKILL: - _exit(1); /* XXX */ - /* NOTREACHED */ - default: - /* Relay signal to command. */ - killpg(pid, signo); - break; - } - debug_return; -} - -/* - * Send status to parent over socketpair. - * Return value is the same as send(2). - */ -static int -send_status(int fd, struct command_status *cstat) -{ - int n = -1; - debug_decl(send_status, SUDO_DEBUG_EXEC); - - if (cstat->type != CMD_INVALID) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "sending status message to parent: [%d, %d]", - cstat->type, cstat->val); - do { - n = send(fd, cstat, sizeof(*cstat), 0); - } while (n == -1 && errno == EINTR); - if (n != sizeof(*cstat)) { - sudo_debug_printf(SUDO_DEBUG_ERROR, - "unable to send status to parent: %s", strerror(errno)); - } - cstat->type = CMD_INVALID; /* prevent re-sending */ - } - debug_return_int(n); -} +} /* - * Wait for command status after receiving SIGCHLD. - * If the command was stopped, the status is send back to the parent. - * Otherwise, cstat is filled in but not sent. - * Returns true if command is still alive, else false. + * Fill in the exec closure and setup initial exec events. + * Allocates events for the signal pipe and backchannel. + * Forwarded signals on the backchannel are enabled on demand. */ -static bool -handle_sigchld(int backchannel, struct command_status *cstat) -{ - char signame[SIG2STR_MAX]; - bool alive = true; - int status; - pid_t pid; - debug_decl(handle_sigchld, SUDO_DEBUG_EXEC); - - /* Read command status. */ - do { - pid = waitpid(cmnd_pid, &status, WUNTRACED|WCONTINUED|WNOHANG); - } while (pid == -1 && errno == EINTR); - switch (pid) { - case 0: - errno = ECHILD; - /* FALLTHROUGH */ - case -1: - sudo_debug_printf(SUDO_DEBUG_DIAG, - "waitpid returned %d, expected pid %d", pid, cmnd_pid); - sudo_warn(U_("%s: %s"), __func__, "waitpid"); - debug_return_bool(false); - } - - if (WIFCONTINUED(status)) { - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) resumed", - __func__, cmnd_pid); - } else if (WIFSTOPPED(status)) { - if (sig2str(WSTOPSIG(status), signame) == -1) - snprintf(signame, sizeof(signame), "%d", WSTOPSIG(status)); - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) stopped, SIG%s", - __func__, cmnd_pid, signame); - } else if (WIFSIGNALED(status)) { - if (sig2str(WTERMSIG(status), signame) == -1) - snprintf(signame, sizeof(signame), "%d", WTERMSIG(status)); - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) killed, SIG%s", - __func__, cmnd_pid, signame); - alive = false; - } else if (WIFEXITED(status)) { - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: command (%d) exited: %d", - __func__, cmnd_pid, WEXITSTATUS(status)); - alive = false; - } else { - sudo_debug_printf(SUDO_DEBUG_WARN, - "%s: unexpected wait status %d for command (%d)", - __func__, status, cmnd_pid); - } - - /* Don't overwrite execve() failure with child exit status. */ - if (cstat->type != CMD_ERRNO) { - /* - * Store wait status in cstat and forward to parent if stopped. - */ - cstat->type = CMD_WSTATUS; - cstat->val = status; - if (WIFSTOPPED(status)) { - /* Save the foreground pgid so we can restore it later. */ - do { - pid = tcgetpgrp(io_fds[SFD_SLAVE]); - } while (pid == -1 && errno == EINTR); - if (pid != mon_pgrp) - cmnd_pgrp = pid; - send_status(backchannel, cstat); - } - } - - debug_return_bool(alive); -} - -struct monitor_closure { - struct sudo_event_base *evbase; - struct sudo_event *errpipe_event; - struct sudo_event *backchannel_event; - struct sudo_event *signal_pipe_event; - struct command_status *cstat; - int backchannel; - bool alive; -}; - static void -mon_signal_pipe_cb(int fd, int what, void *v) -{ - struct monitor_closure *mc = v; - unsigned char signo; - ssize_t nread; - debug_decl(mon_signal_pipe_cb, SUDO_DEBUG_EXEC); - - nread = read(fd, &signo, sizeof(signo)); - if (nread <= 0) { - /* It should not be possible to get EOF but just in case. */ - if (nread == 0) - errno = ECONNRESET; - if (errno != EINTR && errno != EAGAIN) { - sudo_warn(U_("error reading from signal pipe")); - sudo_ev_loopbreak(mc->evbase); - } - } else { - /* - * Handle SIGCHLD specially and deliver other signals - * directly to the command. - */ - if (signo == SIGCHLD) { - mc->alive = handle_sigchld(mc->backchannel, mc->cstat); - if (!mc->alive) { - /* Remove all but the errpipe event. */ - sudo_ev_del(mc->evbase, mc->backchannel_event); - sudo_ev_del(mc->evbase, mc->signal_pipe_event); - } - } else { - deliver_signal(cmnd_pid, signo, false); - } - } - debug_return; -} +fill_exec_closure_pty(struct exec_closure_pty *ec, struct command_status *cstat, + struct command_details *details, pid_t child, sigset_t *omask, + int backchannel) +{ + debug_decl(fill_exec_closure_pty, SUDO_DEBUG_EXEC) + + /* Fill in the non-event part of the closure. */ + ec->child = child; + ec->omask = omask; + ec->cstat = cstat; + ec->details = details; + TAILQ_INIT(&ec->sigfwd_list); + + /* Setup event base and events. */ + ec->evbase = sudo_ev_base_alloc(); + if (ec->evbase == NULL) + sudo_fatal(NULL); -static void -mon_errpipe_cb(int fd, int what, void *v) -{ - struct monitor_closure *mc = v; - ssize_t n; - debug_decl(mon_errpipe_cb, SUDO_DEBUG_EXEC); + /* Event for local signals via signal_pipe. */ + ec->signal_event = sudo_ev_alloc(signal_pipe[0], + SUDO_EV_READ|SUDO_EV_PERSIST, signal_pipe_cb, ec); + if (ec->signal_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(ec->evbase, ec->signal_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); - /* read errno or EOF from command pipe */ - n = read(fd, mc->cstat, sizeof(struct command_status)); - if (n == -1) { - if (errno != EINTR && errno != EAGAIN) { - sudo_warn(U_("error reading from pipe")); - sudo_ev_loopbreak(mc->evbase); - } - } else { - /* Got errno or EOF, either way we are done with errpipe. */ - sudo_debug_printf(SUDO_DEBUG_DIAG, "%s: type: %d, val: %d", - __func__, mc->cstat->type, mc->cstat->val); - sudo_ev_del(mc->evbase, mc->errpipe_event); - close(fd); - } - debug_return; -} + /* Event for command status via backchannel. */ + ec->backchannel_event = sudo_ev_alloc(backchannel, + SUDO_EV_READ|SUDO_EV_PERSIST, backchannel_cb, ec); + if (ec->backchannel_event == NULL) + sudo_fatal(NULL); + if (sudo_ev_add(ec->evbase, ec->backchannel_event, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); -static void -mon_backchannel_cb(int fd, int what, void *v) -{ - struct monitor_closure *mc = v; - struct command_status cstmp; - ssize_t n; - debug_decl(mon_backchannel_cb, SUDO_DEBUG_EXEC); + /* The signal forwarding event gets added on demand. */ + ec->sigfwd_event = sudo_ev_alloc(backchannel, + SUDO_EV_WRITE, sigfwd_cb, ec); + if (ec->sigfwd_event == NULL) + sudo_fatal(NULL); - /* Read command from backchannel, should be a signal. */ - n = recv(fd, &cstmp, sizeof(cstmp), MSG_WAITALL); - if (n != sizeof(cstmp)) { - if (n == -1) { - if (errno == EINTR || errno == EAGAIN) - debug_return; - sudo_warn(U_("error reading from socketpair")); - } else { - /* short read or EOF, parent process died? */ - } - sudo_ev_loopbreak(mc->evbase); - } else { - if (cstmp.type == CMD_SIGNO) { - deliver_signal(cmnd_pid, cstmp.val, true); - } else { - sudo_warnx(U_("unexpected reply type on backchannel: %d"), cstmp.type); - } - } - debug_return; + sudo_debug_printf(SUDO_DEBUG_INFO, "signal pipe fd %d\n", signal_pipe[0]); + sudo_debug_printf(SUDO_DEBUG_INFO, "backchannel fd %d\n", backchannel); } /* - * Monitor process that creates a new session with the controlling tty, - * resets signal handlers and forks a child to call exec_pty(). - * Waits for status changes from the command and relays them to the - * parent and relays signals from the parent to the command. - * Returns an error if fork(2) fails, else calls _exit(2). + * Execute a command in a pty, potentially with I/O loggging, and + * wait for it to finish. + * This is a little bit tricky due to how POSIX job control works and + * we fact that we have two different controlling terminals to deal with. */ -static int -exec_monitor(struct command_details *details, int backchannel) +int +exec_pty(struct command_details *details, struct command_status *cstat) { - struct command_status cstat; - struct sudo_event_base *evbase; - struct monitor_closure mc; + struct sigforward *sigfwd, *sigfwd_next; + struct exec_closure_pty ec; sigaction_t sa; - int errpipe[2], n; - debug_decl(exec_monitor, SUDO_DEBUG_EXEC); + sigset_t omask; + pid_t child; + int sv[2]; + debug_decl(exec_pty, SUDO_DEBUG_EXEC) - /* Close unused fds. */ - if (io_fds[SFD_MASTER] != -1) - close(io_fds[SFD_MASTER]); - if (io_fds[SFD_USERTTY] != -1) - close(io_fds[SFD_USERTTY]); + /* + * Allocate a pty. + */ + if (ISSET(details->flags, CD_SET_UTMP)) + utmp_user = details->utmp_user ? details->utmp_user : user_details.username; + sudo_debug_printf(SUDO_DEBUG_INFO, "allocate pty for I/O logging"); + pty_setup(details->euid, user_details.tty); /* - * We use a pipe to atomically handle signal notification within - * the event loop. + * We communicate with the child over a bi-directional pair of sockets. + * Parent sends signal info to child and child sends back wait status. */ - if (pipe_nonblock(signal_pipe) != 0) - sudo_fatal(U_("unable to create pipe")); + if (socketpair(PF_UNIX, SOCK_STREAM, 0, sv) == -1) + sudo_fatal(U_("unable to create sockets")); - /* Reset SIGWINCH and SIGALRM. */ + /* + * Signals to forward to the child process (excluding SIGALRM). + * We block all other signals while running the signal handler. + * Note: HP-UX select() will not be interrupted if SA_RESTART set. + */ memset(&sa, 0, sizeof(sa)); - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART; - sa.sa_handler = SIG_DFL; - if (sudo_sigaction(SIGWINCH, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGWINCH); - if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); - - /* Ignore any SIGTTIN or SIGTTOU we get. */ - sa.sa_handler = SIG_IGN; - if (sudo_sigaction(SIGTTIN, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTTIN); - if (sudo_sigaction(SIGTTOU, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTTOU); - - /* Block all signals in mon_handler(). */ sigfillset(&sa.sa_mask); - - /* Note: HP-UX poll() will not be interrupted if SA_RESTART is set. */ - sa.sa_flags = SA_INTERRUPT; + sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */ #ifdef SA_SIGINFO sa.sa_flags |= SA_SIGINFO; - sa.sa_sigaction = mon_handler; + sa.sa_sigaction = exec_handler; #else - sa.sa_handler = mon_handler; + sa.sa_handler = exec_handler; #endif + if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); + if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); + if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); + if (sudo_sigaction(SIGPIPE, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGPIPE); + if (sudo_sigaction(SIGUSR1, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGUSR1); + if (sudo_sigaction(SIGUSR2, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGUSR2); if (sudo_sigaction(SIGCHLD, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGCHLD); - - /* Catch common signals so we can cleanup properly. */ - sa.sa_flags = SA_RESTART; -#ifdef SA_SIGINFO - sa.sa_flags |= SA_SIGINFO; - sa.sa_sigaction = mon_handler; -#else - sa.sa_handler = mon_handler; +#ifdef SIGINFO + if (sudo_sigaction(SIGINFO, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGINFO); #endif - if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); + + /* + * Unlike the non-pty case, we can use our normal signal handler + * for tty-generated signals triggered by the user. + */ if (sudo_sigaction(SIGINT, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGINT); if (sudo_sigaction(SIGQUIT, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGQUIT); - if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); if (sudo_sigaction(SIGTSTP, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGTSTP); - if (sudo_sigaction(SIGUSR1, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGUSR1); - if (sudo_sigaction(SIGUSR2, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGUSR2); /* - * Start a new session with the parent as the session leader - * and the slave pty as the controlling terminal. - * This allows us to be notified when the command has been suspended. + * We don't want to receive SIGTTIN/SIGTTOU, getting EIO is preferable. */ - if (setsid() == -1) { - sudo_warn("setsid"); - goto bad; - } - if (io_fds[SFD_SLAVE] != -1) { -#ifdef TIOCSCTTY - if (ioctl(io_fds[SFD_SLAVE], TIOCSCTTY, NULL) != 0) - sudo_fatal(U_("unable to set controlling tty")); -#else - /* Set controlling tty by reopening slave. */ - if ((n = open(slavename, O_RDWR)) >= 0) - close(n); -#endif - } + sa.sa_flags = SA_RESTART; + sa.sa_handler = SIG_IGN; + if (sudo_sigaction(SIGTTIN, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTTIN); + if (sudo_sigaction(SIGTTOU, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGTTOU); - mon_pgrp = getpgrp(); /* save a copy of our process group */ + /* + * The policy plugin's session init must be run before we fork + * or certain pam modules won't be able to track their state. + */ + if (policy_init_session(details) != true) + sudo_fatalx(U_("policy plugin failed session initialization")); /* - * If stdin/stdout is not a tty, start command in the background - * since it might be part of a pipeline that reads from /dev/tty. - * In this case, we rely on the command receiving SIGTTOU or SIGTTIN - * when it needs access to the controlling tty. + * Child will run the command in the pty, parent will pass data + * to and from pty. + * XXX - inline fork_pty or refactor differently? */ - if (pipeline) - foreground = false; + child = fork_pty(details, sv, &omask); + close(sv[1]); - /* Start command and wait for it to stop or exit */ - if (pipe(errpipe) == -1) - sudo_fatal(U_("unable to create pipe")); - cmnd_pid = sudo_debug_fork(); - if (cmnd_pid == -1) { - sudo_warn(U_("unable to fork")); - goto bad; - } - if (cmnd_pid == 0) { - /* We pass errno back to our parent via pipe on exec failure. */ - close(backchannel); - close(signal_pipe[0]); - close(signal_pipe[1]); - close(errpipe[0]); - (void)fcntl(errpipe[1], F_SETFD, FD_CLOEXEC); - restore_signals(); - - /* setup tty and exec command */ - exec_pty(details, &cstat, errpipe[1]); - while (write(errpipe[1], &cstat, sizeof(cstat)) == -1) { - if (errno != EINTR) - break; - } - _exit(1); + /* No longer need execfd. */ + if (details->execfd != -1) { + close(details->execfd); + details->execfd = -1; } - close(errpipe[1]); - /* Send the command's pid to main sudo process. */ - cstat.type = CMD_PID; - cstat.val = cmnd_pid; - ignore_result(send(backchannel, &cstat, sizeof(cstat), 0)); - - /* If any of stdin/stdout/stderr are pipes, close them in parent. */ - if (io_fds[SFD_STDIN] != io_fds[SFD_SLAVE]) - close(io_fds[SFD_STDIN]); - if (io_fds[SFD_STDOUT] != io_fds[SFD_SLAVE]) - close(io_fds[SFD_STDOUT]); - if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE]) - close(io_fds[SFD_STDERR]); - - /* Put command in its own process group. */ - cmnd_pgrp = cmnd_pid; - setpgid(cmnd_pid, cmnd_pgrp); - - /* Make the command the foreground process for the pty slave. */ - if (foreground && !ISSET(details->flags, CD_EXEC_BG)) { - do { - n = tcsetpgrp(io_fds[SFD_SLAVE], cmnd_pgrp); - } while (n == -1 && errno == EINTR); - } + /* Set command timeout if specified. */ + if (ISSET(details->flags, CD_SET_TIMEOUT)) + alarm(details->timeout); /* - * Create new event base and register read events for the - * signal pipe, error pipe, and backchannel. + * I/O logging must be in the C locale for floating point numbers + * to be logged consistently. */ - evbase = sudo_ev_base_alloc(); - if (evbase == NULL) - sudo_fatal(NULL); + setlocale(LC_ALL, "C"); - memset(&cstat, 0, sizeof(cstat)); - mc.cstat = &cstat; - mc.evbase = evbase; - mc.backchannel = backchannel; - mc.alive = true; - - mc.signal_pipe_event = sudo_ev_alloc(signal_pipe[0], - SUDO_EV_READ|SUDO_EV_PERSIST, mon_signal_pipe_cb, &mc); - if (mc.signal_pipe_event == NULL) - sudo_fatal(NULL); - if (sudo_ev_add(evbase, mc.signal_pipe_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + /* + * Allocate event base and two persistent events: + * the signal pipe and the child process's backchannel. + */ + fill_exec_closure_pty(&ec, cstat, details, child, &omask, sv[0]); - mc.errpipe_event = sudo_ev_alloc(errpipe[0], - SUDO_EV_READ|SUDO_EV_PERSIST, mon_errpipe_cb, &mc); - if (mc.errpipe_event == NULL) - sudo_fatal(NULL); - if (sudo_ev_add(evbase, mc.errpipe_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + /* + * In the event loop we pass input from user tty to master + * and pass output from master to stdout and IO plugin. + */ + add_io_events(ec.evbase); + if (sudo_ev_loop(ec.evbase, 0) == -1) + sudo_warn(U_("error in event loop")); + if (sudo_ev_got_break(ec.evbase)) { + /* error from callback */ + sudo_debug_printf(SUDO_DEBUG_ERROR, "event loop exited prematurely"); + } + + /* Flush any remaining output and free pty-related memory. */ + pty_close(cstat); + + /* Free things up. */ + sudo_ev_base_free(ec.evbase); + sudo_ev_free(ec.sigfwd_event); + sudo_ev_free(ec.signal_event); + sudo_ev_free(ec.backchannel_event); + TAILQ_FOREACH_SAFE(sigfwd, &ec.sigfwd_list, entries, sigfwd_next) { + free(sigfwd); + } + debug_return_int(cstat->type == CMD_ERRNO ? -1 : 0); +} - mc.backchannel_event = sudo_ev_alloc(backchannel, - SUDO_EV_READ|SUDO_EV_PERSIST, mon_backchannel_cb, &mc); - if (mc.backchannel_event == NULL) - sudo_fatal(NULL); - if (sudo_ev_add(evbase, mc.backchannel_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); +/* + * Schedule I/O events before starting the main event loop or + * resuming from suspend. + */ +static void +add_io_events(struct sudo_event_base *evbase) +{ + struct io_buffer *iob; + debug_decl(add_io_events, SUDO_DEBUG_EXEC); /* - * Wait for errno on pipe, signal on backchannel or for SIGCHLD. - * The event loop ends when the child is no longer running and - * the error pipe is closed. + * Schedule all readers as long as the buffer is not full. + * Schedule writers that contain buffered data. + * Normally, write buffers are added on demand when data is read. */ - (void) sudo_ev_loop(evbase, 0); - if (mc.alive) { - /* XXX An error occurred, should send a message back. */ - sudo_debug_printf(SUDO_DEBUG_ERROR, - "Command still running after event loop exit, sending SIGKILL"); - kill(cmnd_pid, SIGKILL); - } else { - /* Send parent status. */ - send_status(backchannel, &cstat); + SLIST_FOREACH(iob, &iobufs, entries) { + /* Don't read/write from /dev/tty if we are not in the foreground. */ + if (iob->revent != NULL && + (ttymode == TERM_RAW || !USERTTY_EVENT(iob->revent))) { + if (iob->len != sizeof(iob->buf)) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "added I/O revent %p, fd %d, events %d", + iob->revent, iob->revent->fd, iob->revent->events); + if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + } + } + if (iob->wevent != NULL && + (foreground || !USERTTY_EVENT(iob->wevent))) { + if (iob->len > iob->off) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "added I/O wevent %p, fd %d, events %d", + iob->wevent, iob->wevent->fd, iob->wevent->events); + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + } + } } - sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, 1); - _exit(1); - -bad: - debug_return_int(errno); + debug_return; } /* - * Sets up std{in,out,err} and executes the actual command. - * Returns only if execve() fails. + * Flush any output buffered in iobufs or readable from fds other + * than /dev/tty. Removes I/O events from the event base when done. */ static void -exec_pty(struct command_details *details, - struct command_status *cstat, int errfd) +del_io_events(bool nonblocking) { - volatile pid_t self = getpid(); - debug_decl(exec_pty, SUDO_DEBUG_EXEC); + struct io_buffer *iob; + struct sudo_event_base *evbase; + debug_decl(del_io_events, SUDO_DEBUG_EXEC); - /* Register cleanup function */ - sudo_fatal_callback_register(pty_cleanup); + /* Remove iobufs from existing event base. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->revent != NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "deleted I/O revent %p, fd %d, events %d", + iob->revent, iob->revent->fd, iob->revent->events); + sudo_ev_del(NULL, iob->revent); + } + if (iob->wevent != NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "deleted I/O wevent %p, fd %d, events %d", + iob->wevent, iob->wevent->fd, iob->wevent->events); + sudo_ev_del(NULL, iob->wevent); + } + } - /* Set command process group here too to avoid a race. */ - setpgid(0, self); - - /* Wire up standard fds, note that stdout/stderr may be pipes. */ - if (dup2(io_fds[SFD_STDIN], STDIN_FILENO) == -1 || - dup2(io_fds[SFD_STDOUT], STDOUT_FILENO) == -1 || - dup2(io_fds[SFD_STDERR], STDERR_FILENO) == -1) - sudo_fatal("dup2"); - - /* Wait for parent to grant us the tty if we are foreground. */ - if (foreground && !ISSET(details->flags, CD_EXEC_BG)) { - while (tcgetpgrp(io_fds[SFD_SLAVE]) != self) - continue; /* spin */ - } - - /* We have guaranteed that the slave fd is > 2 */ - if (io_fds[SFD_SLAVE] != -1) - close(io_fds[SFD_SLAVE]); - if (io_fds[SFD_STDIN] != io_fds[SFD_SLAVE]) - close(io_fds[SFD_STDIN]); - if (io_fds[SFD_STDOUT] != io_fds[SFD_SLAVE]) - close(io_fds[SFD_STDOUT]); - if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE]) - close(io_fds[SFD_STDERR]); + /* Create temporary event base for flushing. */ + evbase = sudo_ev_base_alloc(); + if (evbase == NULL) + sudo_fatal(NULL); - /* Execute command; only returns on error. */ - exec_cmnd(details, cstat, errfd); + /* Avoid reading from /dev/tty, just flush existing data. */ + SLIST_FOREACH(iob, &iobufs, entries) { + /* Don't read from /dev/tty while flushing. */ + if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) { + if (iob->len != sizeof(iob->buf)) { + if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + } + } + /* Flush any write buffers with data in them. */ + if (iob->wevent != NULL) { + if (iob->len > iob->off) { + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + } + } + } + (void) sudo_ev_loop(evbase, SUDO_EVLOOP_NONBLOCK); + + /* + * If not in non-blocking mode, make sure we flush write buffers. + * We don't want to read from the pty or stdin since that might block + * and the command is no longer running anyway. + */ + if (!nonblocking) { + /* Clear out iobufs from event base. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) + sudo_ev_del(evbase, iob->revent); + if (iob->wevent != NULL) + sudo_ev_del(evbase, iob->wevent); + } + + SLIST_FOREACH(iob, &iobufs, entries) { + /* Flush any write buffers with data in them. */ + if (iob->wevent != NULL) { + if (iob->len > iob->off) { + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal(U_("unable to add event to queue")); + } + } + } + (void) sudo_ev_loop(evbase, 0); + + /* We should now have flushed all write buffers. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->wevent != NULL) { + if (iob->len > iob->off) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "unflushed data: wevent %p, fd %d, events %d", + iob->wevent, iob->wevent->fd, iob->wevent->events); + } + } + } + } + + /* Free temporary event base, removing its events. */ + sudo_ev_base_free(evbase); debug_return; } diff -Nru sudo-1.8.19p1/src/Makefile.in sudo-1.8.20p2/src/Makefile.in --- sudo-1.8.19p1/src/Makefile.in 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/src/Makefile.in 2017-05-10 15:38:44.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2015 Todd C. Miller +# Copyright (c) 2010-2017 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 @@ -104,7 +104,7 @@ INIT_SCRIPT=@INIT_SCRIPT@ RC_LINK=@RC_LINK@ -TEST_PROGS = check_ttyname +TEST_PROGS = check_ttyname @CHECK_NOEXEC@ TEST_LIBS = @LIBS@ $(LT_LIBS) TEST_LDFLAGS = @LDFLAGS@ @@ -114,10 +114,10 @@ PROGS = @PROGS@ -OBJS = conversation.o env_hooks.o exec.o exec_common.o exec_pty.o \ - get_pty.o hooks.o net_ifs.o load_plugins.o parse_args.o \ - preserve_fds.o signal.o sudo.o sudo_edit.o tgetpass.o ttyname.o \ - utmp.o @SUDO_OBJS@ +OBJS = conversation.o env_hooks.o exec.o exec_common.o exec_monitor.o \ + exec_nopty.o exec_pty.o get_pty.o hooks.o net_ifs.o load_plugins.o \ + parse_args.o preserve_fds.o signal.o sudo.o sudo_edit.o \ + tcsetpgrp_nobg.o tgetpass.o ttyname.o utmp.o @SUDO_OBJS@ SESH_OBJS = sesh.o exec_common.o @@ -161,7 +161,7 @@ sesh: $(SESH_OBJS) $(LT_LIBS) $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(SESH_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) -check_noexec: $(CHECK_NOEXEC_OBJS) $(top_builddir)/lib/util/libsudo_util.la +check_noexec: $(CHECK_NOEXEC_OBJS) $(top_builddir)/lib/util/libsudo_util.la sudo_noexec.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_NOEXEC_OBJS) $(TEST_LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LIBS) check_ttyname: $(CHECK_TTYNAME_OBJS) $(top_builddir)/lib/util/libsudo_util.la @@ -172,20 +172,27 @@ install: install-binaries install-rc @INSTALL_NOEXEC@ install-dirs: + # We only create the rc.d dir when installing to the actual system dir $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir) \ $(DESTDIR)$(libexecdir)/sudo $(DESTDIR)$(noexecdir) if test -n "$(INIT_SCRIPT)"; then \ - $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(INIT_DIR) \ - `echo $(DESTDIR)$(RC_LINK) | $(SED) 's,/[^/]*$$,,'`; \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(INIT_DIR); \ + if test -z "$(DESTDIR)"; then \ + $(SHELL) $(top_srcdir)/mkinstalldirs \ + `echo $(RC_LINK) | $(SED) 's,/[^/]*$$,,'`; \ + fi; \ elif test -n "$(tmpfiles_d)"; then \ $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(tmpfiles_d); \ fi install-rc: install-dirs + # We only create the rc.d link when installing to the actual system dir if [ -n "$(INIT_SCRIPT)" ]; then \ $(INSTALL) $(INSTALL_OWNER) -m 0755 $(top_builddir)/init.d/$(INIT_SCRIPT) $(DESTDIR)$(INIT_DIR)/sudo; \ - rm -f $(DESTDIR)$(RC_LINK); \ - ln -s $(INIT_DIR)/sudo $(DESTDIR)$(RC_LINK); \ + if test -z "$(DESTDIR)"; then \ + rm -f $(RC_LINK); \ + ln -s $(INIT_DIR)/sudo $(RC_LINK); \ + fi; \ elif test -n "$(tmpfiles_d)"; then \ $(INSTALL) $(INSTALL_OWNER) -m 0644 $(top_builddir)/init.d/sudo.conf $(DESTDIR)$(tmpfiles_d)/sudo.conf; \ fi @@ -226,14 +233,12 @@ cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I. -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c -check: $(TEST_PROGS) @CHECK_NOEXEC@ +check: $(TEST_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ ./check_ttyname; \ - fi - -check_sudo_noexec: sudo_noexec.la check_noexec - @if test X"$(cross_compiling)" != X"yes"; then \ - ./check_noexec .libs/$(noexecfile); \ + if test X"@CHECK_NOEXEC@" != X""; then \ + ./check_noexec .libs/$(noexecfile); \ + fi; \ fi clean: @@ -299,6 +304,24 @@ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exec_common.c +exec_monitor.o: $(srcdir)/exec_monitor.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exec_monitor.c +exec_nopty.o: $(srcdir)/exec_nopty.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exec_nopty.c exec_pty.o: $(srcdir)/exec_pty.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ @@ -403,6 +426,13 @@ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_edit.c +tcsetpgrp_nobg.o: $(srcdir)/tcsetpgrp_nobg.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/tcsetpgrp_nobg.c tgetpass.o: $(srcdir)/tgetpass.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ diff -Nru sudo-1.8.19p1/src/parse_args.c sudo-1.8.20p2/src/parse_args.c --- sudo-1.8.19p1/src/parse_args.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/src/parse_args.c 2017-05-10 15:38:44.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1993-1996, 1998-2015 Todd C. Miller + * Copyright (c) 1993-1996, 1998-2017 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 @@ -101,7 +101,9 @@ { "plugin_dir" }, #define ARG_REMOTE_HOST 21 { "remote_host" }, -#define NUM_SETTINGS 22 +#define ARG_TIMEOUT 22 + { "timeout" }, +#define NUM_SETTINGS 23 { NULL } }; @@ -118,7 +120,7 @@ * Note that we must disable arg permutation to support setting environment * variables and to better support the optional arg of the -h flag. */ -static const char short_opts[] = "+Aa:bC:c:D:Eeg:Hh::iKklnPp:r:Sst:U:u:Vv"; +static const char short_opts[] = "+Aa:bC:c:D:Eeg:Hh::iKklnPp:r:SsT:t:U:u:Vv"; static struct option long_opts[] = { { "askpass", no_argument, NULL, 'A' }, { "auth-type", required_argument, NULL, 'a' }, @@ -142,6 +144,7 @@ { "stdin", no_argument, NULL, 'S' }, { "shell", no_argument, NULL, 's' }, { "type", required_argument, NULL, 't' }, + { "command-timeout",required_argument, NULL, 'T' }, { "other-user", required_argument, NULL, 'U' }, { "user", required_argument, NULL, 'u' }, { "version", no_argument, NULL, 'V' }, @@ -332,6 +335,9 @@ sudo_settings[ARG_SELINUX_TYPE].value = optarg; break; #endif + case 'T': + sudo_settings[ARG_TIMEOUT].value = optarg; + break; case 'S': SET(tgetpass_flags, TGP_STDIN); break; @@ -588,7 +594,7 @@ help(void) { struct sudo_lbuf lbuf; - const int indent = 30; + const int indent = 32; const char *pname = getprogname(); debug_decl(help, SUDO_DEBUG_ARGS) @@ -602,67 +608,69 @@ usage(0); sudo_lbuf_append(&lbuf, _("\nOptions:\n")); - sudo_lbuf_append(&lbuf, " -A, --askpass %s\n", + sudo_lbuf_append(&lbuf, " -A, --askpass %s\n", _("use a helper program for password prompting")); #ifdef HAVE_BSD_AUTH_H - sudo_lbuf_append(&lbuf, " -a, --auth-type=type %s\n", + sudo_lbuf_append(&lbuf, " -a, --auth-type=type %s\n", _("use specified BSD authentication type")); #endif - sudo_lbuf_append(&lbuf, " -b, --background %s\n", + sudo_lbuf_append(&lbuf, " -b, --background %s\n", _("run command in the background")); - sudo_lbuf_append(&lbuf, " -C, --close-from=num %s\n", + sudo_lbuf_append(&lbuf, " -C, --close-from=num %s\n", _("close all file descriptors >= num")); #ifdef HAVE_LOGIN_CAP_H - sudo_lbuf_append(&lbuf, " -c, --login-class=class %s\n", + sudo_lbuf_append(&lbuf, " -c, --login-class=class %s\n", _("run command with the specified BSD login class")); #endif - sudo_lbuf_append(&lbuf, " -E, --preserve-env %s\n", + sudo_lbuf_append(&lbuf, " -E, --preserve-env %s\n", _("preserve user environment when running command")); - sudo_lbuf_append(&lbuf, " -e, --edit %s\n", + sudo_lbuf_append(&lbuf, " -e, --edit %s\n", _("edit files instead of running a command")); - sudo_lbuf_append(&lbuf, " -g, --group=group %s\n", + sudo_lbuf_append(&lbuf, " -g, --group=group %s\n", _("run command as the specified group name or ID")); - sudo_lbuf_append(&lbuf, " -H, --set-home %s\n", + sudo_lbuf_append(&lbuf, " -H, --set-home %s\n", _("set HOME variable to target user's home dir")); - sudo_lbuf_append(&lbuf, " -h, --help %s\n", + sudo_lbuf_append(&lbuf, " -h, --help %s\n", _("display help message and exit")); - sudo_lbuf_append(&lbuf, " -h, --host=host %s\n", + sudo_lbuf_append(&lbuf, " -h, --host=host %s\n", _("run command on host (if supported by plugin)")); - sudo_lbuf_append(&lbuf, " -i, --login %s\n", + sudo_lbuf_append(&lbuf, " -i, --login %s\n", _("run login shell as the target user; a command may also be specified")); - sudo_lbuf_append(&lbuf, " -K, --remove-timestamp %s\n", + sudo_lbuf_append(&lbuf, " -K, --remove-timestamp %s\n", _("remove timestamp file completely")); - sudo_lbuf_append(&lbuf, " -k, --reset-timestamp %s\n", + sudo_lbuf_append(&lbuf, " -k, --reset-timestamp %s\n", _("invalidate timestamp file")); - sudo_lbuf_append(&lbuf, " -l, --list %s\n", + sudo_lbuf_append(&lbuf, " -l, --list %s\n", _("list user's privileges or check a specific command; use twice for longer format")); - sudo_lbuf_append(&lbuf, " -n, --non-interactive %s\n", + sudo_lbuf_append(&lbuf, " -n, --non-interactive %s\n", _("non-interactive mode, no prompts are used")); - sudo_lbuf_append(&lbuf, " -P, --preserve-groups %s\n", + sudo_lbuf_append(&lbuf, " -P, --preserve-groups %s\n", _("preserve group vector instead of setting to target's")); - sudo_lbuf_append(&lbuf, " -p, --prompt=prompt %s\n", + sudo_lbuf_append(&lbuf, " -p, --prompt=prompt %s\n", _("use the specified password prompt")); #ifdef HAVE_SELINUX - sudo_lbuf_append(&lbuf, " -r, --role=role %s\n", + sudo_lbuf_append(&lbuf, " -r, --role=role %s\n", _("create SELinux security context with specified role")); #endif - sudo_lbuf_append(&lbuf, " -S, --stdin %s\n", + sudo_lbuf_append(&lbuf, " -S, --stdin %s\n", _("read password from standard input")); - sudo_lbuf_append(&lbuf, " -s, --shell %s\n", + sudo_lbuf_append(&lbuf, " -s, --shell %s\n", _("run shell as the target user; a command may also be specified")); #ifdef HAVE_SELINUX - sudo_lbuf_append(&lbuf, " -t, --type=type %s\n", + sudo_lbuf_append(&lbuf, " -t, --type=type %s\n", _("create SELinux security context with specified type")); #endif - sudo_lbuf_append(&lbuf, " -U, --other-user=user %s\n", + sudo_lbuf_append(&lbuf, " -T, --command-timeout=timeout %s\n", + _("terminate command after the specified time limit")); + sudo_lbuf_append(&lbuf, " -U, --other-user=user %s\n", _("in list mode, display privileges for user")); - sudo_lbuf_append(&lbuf, " -u, --user=user %s\n", + sudo_lbuf_append(&lbuf, " -u, --user=user %s\n", _("run command (or edit file) as specified user name or ID")); - sudo_lbuf_append(&lbuf, " -V, --version %s\n", + sudo_lbuf_append(&lbuf, " -V, --version %s\n", _("display version information and exit")); - sudo_lbuf_append(&lbuf, " -v, --validate %s\n", + sudo_lbuf_append(&lbuf, " -v, --validate %s\n", _("update user's timestamp without running a command")); - sudo_lbuf_append(&lbuf, " -- %s\n", + sudo_lbuf_append(&lbuf, " -- %s\n", _("stop processing command line arguments")); sudo_lbuf_print(&lbuf); sudo_lbuf_destroy(&lbuf); diff -Nru sudo-1.8.19p1/src/signal.c sudo-1.8.20p2/src/signal.c --- sudo-1.8.19p1/src/signal.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/src/signal.c 2017-05-10 15:38:43.000000000 +0000 @@ -27,6 +27,7 @@ #endif /* HAVE_STRINGS_H */ #include #include +#include #include #include "sudo.h" @@ -125,7 +126,7 @@ * We use a pipe to atomically handle signal notification within * the select() loop without races (we may not have pselect()). */ - if (pipe_nonblock(signal_pipe) != 0) + if (pipe2(signal_pipe, O_NONBLOCK) != 0) sudo_fatal(U_("unable to create pipe")); memset(&sa, 0, sizeof(sa)); diff -Nru sudo-1.8.19p1/src/sudo.c sudo-1.8.20p2/src/sudo.c --- sudo-1.8.19p1/src/sudo.c 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/src/sudo.c 2017-05-10 15:38:44.000000000 +0000 @@ -70,6 +70,9 @@ # endif /* __hpux */ # include #endif /* HAVE_GETPRPWNAM && HAVE_SET_AUTH_PARAMETERS */ +#ifdef __linux__ +# include +#endif #include #include "sudo.h" @@ -104,7 +107,7 @@ * Local functions */ static void fix_fds(void); -static void disable_coredumps(void); +static void disable_coredump(bool restore); static void sudo_check_suid(const char *path); static char **get_user_info(struct user_details *); static void command_info_to_details(char * const info[], @@ -136,9 +139,6 @@ static int iolog_show_version(struct plugin_container *plugin, int verbose); static void iolog_unlink(struct plugin_container *plugin); -#ifdef RLIMIT_CORE -static struct rlimit corelimit; -#endif #ifdef __linux__ static struct rlimit nproclimit; #endif @@ -201,7 +201,8 @@ exit(EXIT_FAILURE); /* get_user_info printed error message */ /* Disable core dumps if not enabled in sudo.conf. */ - disable_coredumps(); + if (sudo_conf_disable_coredump()) + disable_coredump(false); /* Parse command line arguments. */ sudo_mode = parse_args(argc, argv, &nargc, &nargv, &settings, &env_add); @@ -300,11 +301,6 @@ /* Become full root (not just setuid) so user cannot kill us. */ if (setuid(ROOT_UID) == -1) sudo_warn("setuid(%d)", ROOT_UID); - /* Restore coredumpsize resource limit before running. */ -#ifdef RLIMIT_CORE - if (sudo_conf_disable_coredump()) - (void) setrlimit(RLIMIT_CORE, &corelimit); -#endif /* RLIMIT_CORE */ if (ISSET(command_details.flags, CD_SUDOEDIT)) { status = sudo_edit(&command_details); } else { @@ -316,13 +312,21 @@ sudo_fatalx(U_("unexpected sudo mode 0x%x"), sudo_mode); } + /* + * If the command was terminated by a signal, sudo needs to terminated + * the same way. Otherwise, the shell may ignore a keyboard-generated + * signal. However, we want to avoid having sudo dump core itself. + */ if (WIFSIGNALED(status)) { sigaction_t sa; + if (WCOREDUMP(status)) + disable_coredump(false); + memset(&sa, 0, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_handler = SIG_DFL; - sigaction(SIGINT, &sa, NULL); + sigaction(WTERMSIG(status), &sa, NULL); sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, WTERMSIG(status) | 128); kill(getpid(), WTERMSIG(status)); @@ -384,7 +388,7 @@ static int fill_group_list(struct user_details *ud, int system_maxgroups) { - int tries, ret = -1; + int ret = -1; debug_decl(fill_group_list, SUDO_DEBUG_UTIL) /* @@ -408,6 +412,8 @@ if (ud->ngroups != -1) ret = 0; #else + int tries; + /* * It is possible to belong to more groups in the group database * than NGROUPS_MAX. We start off with NGROUPS_MAX * 4 entries @@ -842,7 +848,7 @@ bool qualified; debug_decl(sudo_check_suid, SUDO_DEBUG_PCOMM) - if (geteuid() != 0) { + if (geteuid() != ROOT_UID) { /* Search for sudo binary in PATH if not fully qualified. */ qualified = strchr(sudo, '/') != NULL; if (!qualified) { @@ -889,27 +895,39 @@ /* * Disable core dumps to avoid dropping a core with user password in it. - * We will reset this limit before executing the command. + * Called with restore set to true before executing the command. * Not all operating systems disable core dumps for setuid processes. */ static void -disable_coredumps(void) +disable_coredump(bool restore) { -#if defined(RLIMIT_CORE) struct rlimit rl; - debug_decl(disable_coredumps, SUDO_DEBUG_UTIL) + static struct rlimit corelimit; +#ifdef __linux__ + static int dumpflag; +#endif + debug_decl(disable_coredump, SUDO_DEBUG_UTIL) - /* - * Turn off core dumps? - */ - if (sudo_conf_disable_coredump()) { - (void) getrlimit(RLIMIT_CORE, &corelimit); - memcpy(&rl, &corelimit, sizeof(struct rlimit)); - rl.rlim_cur = 0; - (void) setrlimit(RLIMIT_CORE, &rl); + if (restore) { + (void) setrlimit(RLIMIT_CORE, &corelimit); +#ifdef __linux__ + (void) prctl(PR_SET_DUMPABLE, dumpflag, 0, 0, 0); +#endif /* __linux__ */ + debug_return; } + + (void) getrlimit(RLIMIT_CORE, &corelimit); + rl.rlim_cur = 0; + rl.rlim_max = 0; + (void) setrlimit(RLIMIT_CORE, &rl); +#ifdef __linux__ + /* On Linux, also set PR_SET_DUMPABLE to zero (reset by execve). */ + if ((dumpflag = prctl(PR_GET_DUMPABLE, 0, 0, 0, 0)) == -1) + dumpflag = 0; + (void) prctl(PR_SET_DUMPABLE, 0, 0, 0, 0); +#endif /* __linux__ */ + debug_return; -#endif /* RLIMIT_CORE */ } /* @@ -1004,6 +1022,10 @@ } #endif + /* Restore coredumpsize resource limit before running. */ + if (sudo_conf_disable_coredump()) + disable_coredump(true); + if (details->pw != NULL) { #ifdef HAVE_PROJECT_H set_project(details->pw); diff -Nru sudo-1.8.19p1/src/sudo_exec.h sudo-1.8.20p2/src/sudo_exec.h --- sudo-1.8.19p1/src/sudo_exec.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/src/sudo_exec.h 2017-05-10 15:38:43.000000000 +0000 @@ -36,6 +36,16 @@ #endif /* + * Indices into io_fds[] when running a command in a pty. + */ +#define SFD_STDIN 0 +#define SFD_STDOUT 1 +#define SFD_STDERR 2 +#define SFD_MASTER 3 +#define SFD_SLAVE 4 +#define SFD_USERTTY 5 + +/* * Special values to indicate whether continuing in foreground or background. */ #define SIGCONT_FG -2 @@ -69,33 +79,35 @@ #define SESH_ERR_SOME_FILES 33 /* copy error, some files copied */ /* - * Symbols shared between exec.c and exec_pty.c + * Symbols shared between exec.c, exec_nopty.c, exec_pty.c and exec_monitor.c */ +struct command_details; +struct command_status; /* exec.c */ -extern volatile pid_t cmnd_pid; +extern volatile pid_t cmnd_pid, ppgrp; +void exec_cmnd(struct command_details *details, int errfd); +void terminate_command(pid_t pid, bool use_pgrp); +#ifdef SA_SIGINFO +void exec_handler(int s, siginfo_t *info, void *context); +#else +void exec_handler(int s); +#endif /* exec_common.c */ int sudo_execve(int fd, const char *path, char *const argv[], char *envp[], bool noexec); char **disable_execute(char *envp[], const char *dso); +/* exec_nopty.c */ +int exec_nopty(struct command_details *details, struct command_status *cstat); + /* exec_pty.c */ -struct sudo_event_base; -struct command_details; -struct command_status; -int fork_pty(struct command_details *details, int sv[], sigset_t *omask); -int suspend_parent(int signo); -void exec_cmnd(struct command_details *details, struct command_status *cstat, - int errfd); -void add_io_events(struct sudo_event_base *evbase); -#ifdef SA_SIGINFO -void handler(int s, siginfo_t *info, void *context); -#else -void handler(int s); -#endif -void pty_close(struct command_status *cstat); -void pty_setup(uid_t uid, const char *tty, const char *utmp_user); -void terminate_command(pid_t pid, bool use_pgrp); +int exec_pty(struct command_details *details, struct command_status *cstat); +void pty_cleanup(void); +int pty_make_controlling(void); + +/* exec_monitor.c */ +int exec_monitor(struct command_details *details, bool foreground, int backchannel); /* utmp.c */ bool utmp_login(const char *from_line, const char *to_line, int ttyfd, diff -Nru sudo-1.8.19p1/src/sudo.h sudo-1.8.20p2/src/sudo.h --- sudo-1.8.19p1/src/sudo.h 2016-12-18 13:52:23.000000000 +0000 +++ sudo-1.8.20p2/src/sudo.h 2017-05-10 15:38:43.000000000 +0000 @@ -195,7 +195,6 @@ struct sudo_conv_callback *callback); /* exec.c */ -int pipe_nonblock(int fds[2]); int sudo_execute(struct command_details *details, struct command_status *cstat); /* parse_args.c */ @@ -271,4 +270,7 @@ void closefrom_except(int startfd, struct preserved_fd_list *pfds); void parse_preserved_fds(struct preserved_fd_list *pfds, const char *fdstr); +/* setpgrp_nobg.c */ +int tcsetpgrp_nobg(int fd, pid_t pgrp_id); + #endif /* SUDO_SUDO_H */ diff -Nru sudo-1.8.19p1/src/sudo_usage.h.in sudo-1.8.20p2/src/sudo_usage.h.in --- sudo-1.8.19p1/src/sudo_usage.h.in 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/src/sudo_usage.h.in 2017-05-10 15:38:43.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (c) 2007-2010, 2013 Todd C. Miller + * Copyright (c) 2007-2010, 2013, 2015, 2017 + * 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 @@ -26,8 +27,8 @@ #define SUDO_USAGE1 " -h | -K | -k | -V" #define SUDO_USAGE2 " -v [-AknS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-u user]" #define SUDO_USAGE3 " -l [-AknS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-U user] [-u user] [command]" -#define SUDO_USAGE4 " [-AbEHknPS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s] []" -#define SUDO_USAGE5 " -e [-AknS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-u user] file ..." +#define SUDO_USAGE4 " [-AbEHknPS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] []" +#define SUDO_USAGE5 " -e [-AknS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ..." /* * Configure script arguments used to build sudo. diff -Nru sudo-1.8.19p1/src/tcsetpgrp_nobg.c sudo-1.8.20p2/src/tcsetpgrp_nobg.c --- sudo-1.8.19p1/src/tcsetpgrp_nobg.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.20p2/src/tcsetpgrp_nobg.c 2017-05-10 15:38:43.000000000 +0000 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017 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 +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include +#include + +#include "sudo.h" + +static volatile sig_atomic_t got_sigttou; + +/* + * SIGTTOU signal handler for tcsetpgrp_nobg() that just sets a flag. + */ +static void +sigttou(int signo) +{ + got_sigttou = 1; +} + +/* + * Like tcsetpgrp() but restarts on EINTR _except_ for SIGTTOU. + * Returns 0 on success or -1 on failure, setting errno. + * Sets got_sigttou on failure if interrupted by SIGTTOU. + */ +int +tcsetpgrp_nobg(int fd, pid_t pgrp_id) +{ + sigaction_t sa, osa; + int rc; + + /* + * If we receive SIGTTOU from tcsetpgrp() it means we are + * not in the foreground process group. + * This avoid a TOCTOU race compared to using tcgetpgrp(). + */ + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_INTERRUPT; /* do not restart syscalls */ + sa.sa_handler = sigttou; + got_sigttou = 0; + (void)sigaction(SIGTTOU, &sa, &osa); + do { + rc = tcsetpgrp(fd, pgrp_id); + } while (rc != 0 && errno == EINTR && !got_sigttou); + (void)sigaction(SIGTTOU, &osa, NULL); + + return rc; +} diff -Nru sudo-1.8.19p1/src/ttyname.c sudo-1.8.20p2/src/ttyname.c --- sudo-1.8.19p1/src/ttyname.c 2016-12-18 13:52:09.000000000 +0000 +++ sudo-1.8.20p2/src/ttyname.c 2017-05-31 15:14:31.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2016 Todd C. Miller + * Copyright (c) 2012-2017 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 @@ -145,20 +145,22 @@ } #elif defined(HAVE_STRUCT_PSINFO_PR_TTYDEV) || defined(HAVE_PSTAT_GETPROC) || defined(__linux__) /* - * Devices to search before doing a breadth-first scan. + * Device nodes and directories to search before searching all of /dev */ static char *search_devs[] = { "/dev/console", - "/dev/wscons", - "/dev/pts/", - "/dev/vt/", - "/dev/term/", - "/dev/zcons/", + "/dev/pts/", /* POSIX pty */ + "/dev/vt/", /* Solaris virtual console */ + "/dev/term/", /* Solaris serial ports */ + "/dev/zcons/", /* Solaris zone console */ + "/dev/pty/", /* HP-UX old-style pty */ NULL }; +/* + * Device nodes to ignore when searching all of /dev + */ static char *ignore_devs[] = { - "/dev/fd/", "/dev/stdin", "/dev/stdout", "/dev/stderr", @@ -166,23 +168,41 @@ }; /* - * Do a breadth-first scan of dir looking for the specified device. + * Do a scan of a directory looking for the specified device. + * Does not descend into subdirectories. * Returns name on success and NULL on failure, setting errno. */ static char * -sudo_ttyname_scan(const char *dir, dev_t rdev, bool builtin, char *name, size_t namelen) +sudo_ttyname_scan(const char *dir, dev_t rdev, char *name, size_t namelen) { - size_t sdlen, num_subdirs = 0, max_subdirs = 0; - char pathbuf[PATH_MAX], **subdirs = NULL; + size_t sdlen; + char pathbuf[PATH_MAX]; char *ret = NULL; struct dirent *dp; + struct stat sb; unsigned int i; DIR *d = NULL; debug_decl(sudo_ttyname_scan, SUDO_DEBUG_UTIL) - if (dir[0] == '\0' || (d = opendir(dir)) == NULL) + if (dir[0] == '\0') { + errno = ENOENT; + goto done; + } + if ((d = opendir(dir)) == NULL) goto done; + if (fstat(dirfd(d), &sb) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to fstat %s", dir); + goto done; + } + if ((sb.st_mode & S_IWOTH) != 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "ignoring world-writable directory %s", dir); + errno = ENOENT; + goto done; + } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "scanning for dev %u in %s", (unsigned int)rdev, dir); @@ -220,18 +240,6 @@ } if (ignore_devs[i] != NULL) continue; - if (!builtin) { - /* Skip entries in search_devs; we already checked them. */ - for (i = 0; search_devs[i] != NULL; i++) { - len = strlen(search_devs[i]); - if (search_devs[i][len - 1] == '/') - len--; - if (d_len == len && strncmp(pathbuf, search_devs[i], len) == 0) - break; - } - if (search_devs[i] != NULL) - continue; - } # if defined(HAVE_STRUCT_DIRENT_D_TYPE) && defined(DTTOIF) /* * Avoid excessive stat() calls by checking dp->d_type. @@ -244,39 +252,14 @@ if (stat(pathbuf, &sb) == -1) continue; break; - case DT_DIR: - /* Directory, no need to stat() it. */ - sb.st_mode = DTTOIF(dp->d_type); - sb.st_rdev = 0; /* quiet ccc-analyzer false positive */ - break; default: - /* Not a character device, link or directory, skip it. */ + /* Not a character device or link, skip it. */ continue; } # else if (stat(pathbuf, &sb) == -1) continue; # endif - if (S_ISDIR(sb.st_mode)) { - if (!builtin) { - /* Add to list of subdirs to search. */ - if (num_subdirs + 1 > max_subdirs) { - char **new_subdirs; - - new_subdirs = reallocarray(subdirs, max_subdirs + 64, - sizeof(char *)); - if (new_subdirs == NULL) - goto done; - subdirs = new_subdirs; - max_subdirs += 64; - } - subdirs[num_subdirs] = strdup(pathbuf); - if (subdirs[num_subdirs] == NULL) - goto done; - num_subdirs++; - } - continue; - } if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "resolved dev %u as %s", (unsigned int)rdev, pathbuf); @@ -292,16 +275,9 @@ } } - /* Search subdirs if we didn't find it in the root level. */ - for (i = 0; ret == NULL && i < num_subdirs; i++) - ret = sudo_ttyname_scan(subdirs[i], rdev, false, name, namelen); - done: if (d != NULL) closedir(d); - for (i = 0; i < num_subdirs; i++) - free(subdirs[i]); - free(subdirs); debug_return_str(ret); } @@ -320,7 +296,7 @@ debug_decl(sudo_ttyname_dev, SUDO_DEBUG_UTIL) /* - * First check search_devs for common tty devices. + * First check search_devs[] for common tty devices. */ for (sd = search_devs; (devname = *sd) != NULL; sd++) { len = strlen(devname); @@ -345,7 +321,7 @@ "comparing dev %u to %s: no", (unsigned int)rdev, buf); } else { /* Traverse directory */ - ret = sudo_ttyname_scan(devname, rdev, true, name, namelen); + ret = sudo_ttyname_scan(devname, rdev, name, namelen); if (ret != NULL || errno == ENOMEM) goto done; } @@ -363,9 +339,9 @@ } /* - * Not found? Do a breadth-first traversal of /dev/. + * Not found? Check all device nodes in /dev. */ - ret = sudo_ttyname_scan(_PATH_DEV, rdev, false, name, namelen); + ret = sudo_ttyname_scan(_PATH_DEV, rdev, name, namelen); done: debug_return_str(ret); @@ -475,42 +451,61 @@ char * get_process_ttyname(char *name, size_t namelen) { - char path[PATH_MAX], *line = NULL; + const char path[] = "/proc/self/stat"; + char *cp, buf[1024]; char *ret = NULL; - size_t linesize = 0; int serrno = errno; - ssize_t len; - FILE *fp; + ssize_t nread; + int fd; debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL) - /* Try to determine the tty from tty_nr in /proc/pid/stat. */ - snprintf(path, sizeof(path), "/proc/%u/stat", (unsigned int)getpid()); - if ((fp = fopen(path, "r")) != NULL) { - len = getline(&line, &linesize, fp); - fclose(fp); - if (len != -1) { - /* Field 7 is the tty dev (0 if no tty) */ - char *cp = line; - char *ep = line; - const char *errstr; - int field = 0; - while (*++ep != '\0') { - if (*ep == ' ') { - *ep = '\0'; - if (++field == 7) { - dev_t tdev = strtonum(cp, INT_MIN, INT_MAX, &errstr); - if (errstr) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "%s: tty device %s: %s", path, cp, errstr); - } - if (tdev > 0) { - errno = serrno; - ret = sudo_ttyname_dev(tdev, name, namelen); - goto done; + /* + * Try to determine the tty from tty_nr in /proc/self/stat. + * Ignore /proc/self/stat if it contains embedded NUL bytes. + */ + if ((fd = open(path, O_RDONLY | O_NOFOLLOW)) != -1) { + cp = buf; + while ((nread = read(fd, cp, buf + sizeof(buf) - cp)) != 0) { + if (nread == -1) { + if (errno == EAGAIN || errno == EINTR) + continue; + break; + } + cp += nread; + if (cp >= buf + sizeof(buf)) + break; + } + if (nread == 0 && memchr(buf, '\0', cp - buf) == NULL) { + /* + * Field 7 is the tty dev (0 if no tty). + * Since the process name at field 2 "(comm)" may include + * whitespace (including newlines), start at the last ')' found. + */ + *cp = '\0'; + cp = strrchr(buf, ')'); + if (cp != NULL) { + char *ep = cp; + const char *errstr; + int field = 1; + + while (*++ep != '\0') { + if (*ep == ' ') { + *ep = '\0'; + if (++field == 7) { + dev_t tdev = strtonum(cp, INT_MIN, INT_MAX, &errstr); + if (errstr) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: tty device %s: %s", path, cp, errstr); + } + if (tdev > 0) { + errno = serrno; + ret = sudo_ttyname_dev(tdev, name, namelen); + goto done; + } + break; } - break; + cp = ep + 1; } - cp = ep + 1; } } } @@ -518,7 +513,8 @@ errno = ENOENT; done: - free(line); + if (fd != -1) + close(fd); if (ret == NULL) sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to resolve tty via %s", path); diff -Nru sudo-1.8.19p1/src/utmp.c sudo-1.8.20p2/src/utmp.c --- sudo-1.8.19p1/src/utmp.c 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/src/utmp.c 2017-05-10 15:38:43.000000000 +0000 @@ -219,8 +219,8 @@ ut->ut_type = DEAD_PROCESS; # endif # if defined(HAVE_STRUCT_UTMPX_UT_EXIT) || defined(HAVE_STRUCT_UTMP_UT_EXIT) - ut->ut_exit.__e_exit = WEXITSTATUS(status); - ut->ut_exit.__e_termination = WIFEXITED(status) ? WEXITSTATUS(status) : 0; + ut->ut_exit.__e_termination = WIFSIGNALED(status) ? WTERMSIG(status) : 0; + ut->ut_exit.__e_exit = WIFEXITED(status) ? WEXITSTATUS(status) : 0; # endif utmp_settime(ut); if (pututxline(ut) != NULL) diff -Nru sudo-1.8.19p1/sudo.pp sudo-1.8.20p2/sudo.pp --- sudo-1.8.19p1/sudo.pp 2016-12-18 13:52:06.000000000 +0000 +++ sudo-1.8.20p2/sudo.pp 2017-05-10 15:38:43.000000000 +0000 @@ -85,10 +85,11 @@ if test -n "$linux_audit"; then pp_rpm_requires="audit-libs >= $linux_audit" fi + # The package manager will handle an existing sudoers file + rm -f ${pp_destdir}$sudoersdir/sudoers.dist %else - # For all but RPM and Debian we need to install sudoers with a different - # name and make a copy of it if there is no existing file. - mv ${pp_destdir}$sudoersdir/sudoers ${pp_destdir}$sudoersdir/sudoers.dist + # For all but RPM and Debian we copy sudoers in a post-install script. + rm -f ${pp_destdir}$sudoersdir/sudoers %endif %if [deb] @@ -456,8 +457,8 @@ %post [rpm] case "%{pp_rpm_distro}" in aix*) - # Create /etc/rc.d/rc2.d/S90sudo link if /etc/rc.d exists - if [ -d /etc/rc.d ]; then + # Create /etc/rc.d/rc2.d/S90sudo link if possible + if [ -d /etc/rc.d/rc2.d ]; then rm -f /etc/rc.d/rc2.d/S90sudo ln -s /etc/rc.d/init.d/sudo /etc/rc.d/rc2.d/S90sudo fi