diff options
author | Todd C. Miller <Todd.Miller@courtesan.com> | 2014-03-07 14:52:58 -0700 |
---|---|---|
committer | Todd C. Miller <Todd.Miller@courtesan.com> | 2014-03-07 14:52:58 -0700 |
commit | f5e3743ab5890acdd5060c1e522214503c8c8cc0 (patch) | |
tree | 1e287b1ac0a5b1fc386d5210e6d46095fd60dede | |
parent | c5991e9dbc14f876fbfb8f1ae42c430568d8bef5 (diff) | |
parent | b57a867e3fb4e6a8465f2b5940c9014327824df2 (diff) | |
download | sudo-f5e3743ab5890acdd5060c1e522214503c8c8cc0.tar.gz |
Merge sudo 1.8.10 from trunkSUDO_1_8_10
148 files changed, 10136 insertions, 4105 deletions
@@ -22,6 +22,8 @@ Makefile$ ^doc/.*\.mdoc\.sed$ ^doc/varsub$ +^init.d/*.sh$ + ^pathnames\.h$ ^src/sudo$ ^src/sesh$ @@ -122,14 +122,28 @@ Directory and file names: --docdir=DIR Install other sudo documentation in DIR [DATAROOTDIR/doc/sudo] - --with-plugindir=PATH + --with-plugindir=DIR Set the directory that sudo looks in to find the policy and I/O logging plugins. Defaults to the LIBEXEC/sudo. - --with-timedir=PATH - Use PATH to store the sudo time stamp files. By default, - the first existing directory in the following list is used: - /var/db, /var/lib, /var/adm, /usr/adm. + --with-rundir=DIR + Set the directory to be used for sudo-specific files that + do not survive a system reboot. This is typically where + the time stamp directory is located. By default, configure + will use the first existing directory in the following list: + /var/run, /var/db, /var/lib, /var/adm, /usr/adm + This directory should be cleared when the system reboots. + On systems that lack /var/run, the default rundir and vardir + may be the same. In this case, only the ts directory inside + the rundir needs to be cleared at boot time. + + --with-vardir=DIR + Set the directory to be used for sudo-specific files that + survive a system reboot. This is typically where the lecture + status directory is stored. By default, configure will use + the first existing directory in the following list: + /var/db, /var/lib, /var/adm, /usr/adm + This directory should not be cleared when the system boots. Compilation options: --disable-hardening @@ -23,6 +23,7 @@ common/fmt_string.c common/gidlist.c common/lbuf.c common/progname.c +common/regress/atofoo/atofoo_test.c common/regress/sudo_conf/conf_test.c common/regress/sudo_conf/test1.in common/regress/sudo_conf/test1.out.ok @@ -60,6 +61,7 @@ common/term.c common/ttysize.c compat/Makefile.in compat/charclass.h +compat/clock_gettime.c compat/closefrom.c compat/endian.h compat/fnmatch.c @@ -73,6 +75,7 @@ compat/getopt.h compat/getopt_long.c compat/glob.c compat/glob.h +compat/inet_pton.c compat/isblank.c compat/memrchr.c compat/memset_s.c @@ -156,6 +159,8 @@ include/sudo_event.h include/sudo_plugin.h include/sudo_util.h indent.pro +init.d/aix.sh.in +init.d/hpux.sh.in install-sh ltmain.sh m4/ax_check_compile_flag.m4 @@ -244,6 +249,8 @@ plugins/sudoers/mkdefaults plugins/sudoers/parse.c plugins/sudoers/parse.h plugins/sudoers/po/README +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 @@ -270,6 +277,8 @@ plugins/sudoers/po/pt_BR.mo plugins/sudoers/po/pt_BR.po plugins/sudoers/po/sl.mo plugins/sudoers/po/sl.po +plugins/sudoers/po/sr.mo +plugins/sudoers/po/sr.po plugins/sudoers/po/sudoers.pot plugins/sudoers/po/sv.mo plugins/sudoers/po/sv.po @@ -407,8 +416,9 @@ src/locale_stub.c src/net_ifs.c src/openbsd.c src/parse_args.c -src/preserve_fds.c src/po/README +src/po/ca.mo +src/po/ca.po src/po/cs.mo src/po/cs.po src/po/da.mo @@ -457,6 +467,7 @@ src/po/vi.po src/po/zh_CN.mo src/po/zh_CN.po src/preload.c +src/preserve_fds.c src/regress/ttyname/check_ttyname.c src/selinux.c src/sesh.c diff --git a/Makefile.in b/Makefile.in index d8a79811c..0111490a2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -33,7 +33,8 @@ localedir = @localedir@ localstatedir = @localstatedir@ docdir = @docdir@ mandir = @mandir@ -timedir = @timedir@ +rundir = @rundir@ +vardir = @vardir@ # User and group ids the installed files should be "owned" by install_uid = 0 @@ -78,39 +79,50 @@ XGETTEXT_OPTS = -F -k_ -kN_ -kU_ --copyright-holder="Todd C. Miller" \ --flag easprintf:3:c-format --flag lbuf_append:2:c-format \ --flag lbuf_append_quoted:3:c-format --foreign-user +# Default cppcheck options when run from the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + all: config.status - for d in $(SUBDIRS); \ - do (cd $$d && exec $(MAKE) $@) && continue; \ + for d in $(SUBDIRS); do \ + (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done check pre-install: config.status - for d in $(SUBDIRS); \ - do (cd $$d && exec $(MAKE) $@) && continue; \ + for d in $(SUBDIRS); do \ + (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done +cppcheck: config.status + rval=0; \ + for d in $(SUBDIRS); do \ + echo checking $$d; \ + (cd $$d && exec $(MAKE) CPPCHECK_OPTS="$(CPPCHECK_OPTS)" $@) || rval=`expr $$rval + $$?`; \ + done; \ + exit $$rval + install-dirs install-binaries install-includes install-plugin: config.status pre-install - for d in $(SUBDIRS); \ - do (cd $$d && exec $(MAKE) $@) && continue; \ + for d in $(SUBDIRS); do \ + (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done install-doc: config.status ChangeLog - for d in $(SUBDIRS); \ - do (cd $$d && exec $(MAKE) $@) && continue; \ + for d in $(SUBDIRS); do \ + (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done install: config.status ChangeLog pre-install install-nls - for d in $(SUBDIRS); \ - do (cd $$d && exec $(MAKE) $@) && continue; \ + for d in $(SUBDIRS); do \ + (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done uninstall: uninstall-nls - for d in $(SUBDIRS); \ - do (cd $$d && exec $(MAKE) $@) && continue; \ + for d in $(SUBDIRS); do \ + (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done @@ -285,7 +297,8 @@ package: sudo.pp sbindir=$(sbindir) \ libexecdir=$(libexecdir) \ includedir=$(includedir) \ - timedir=$(timedir) \ + vardir=$(vardir) \ + rundir=$(rundir) \ mandir=$(mandir) \ localedir=$(localedir) \ docdir=$(docdir) \ @@ -1,3 +1,56 @@ +What's new in Sudo 1.8.10? + + * It is now possible to disable network interface probing in + sudo.conf by changing the value of the probe_interfaces + setting. + + * When listing a user's privileges (sudo -l), the sudoers plugin + will now prompt for the user's password even if the targetpw, + rootpw or runaspw options are set. + + * The sudoers plugin uses a new format for its time stamp files. + Each user now has a single file which may contain multiple records + when per-tty time stamps are in use (the default). The time + stamps use a monotonic timer where available and are once again + located in a directory under /var/run. The lecture status is + now stored separately from the time stamps in a different directory. + Bug #616 + + * sudo's -K option will now remove all of the user's time stamps, + not just the time stamp for the current terminal. The -k option + can be used to only disable time stamps for the current terminal. + + * If sudo was started in the background and needed to prompt for + a password, it was not possible to suspend it at the password + prompt. This now works properly. + + * LDAP-based sudoers now uses a default search filter of + (objectClass=sudoRole) for more efficient queries. The netgroup + query has been modified to avoid falling below the minimum length + for OpenLDAP substring indices. + + * The new "use_netgroups" sudoers option can be used to explicitly + enable or disable netgroups support. For LDAP-based sudoers, + netgroup support requires an expensive substring match on the + server. If netgroups are not needed, this option can be disabled + to reduce the load on the LDAP server. + + * Sudo is once again able to open the sudoers file when the group + on sudoers doesn't match the expected value, so long as the file + is not group writable. + + * Sudo now installs an init.d script to clear the time stamp + directory at boot time on AIX and HP-UX systems. These systems + either lack /var/run or do not clear it on boot. + + * The JSON format used by "visudo -x" now properly supports the + negation operator. In addition, the Options object is now the + same for both Defaults and Cmnd_Specs. + + * Czech and Serbian translations for sudoers from translationproject.org. + + * Catalan translation for sudo from translationproject.org. + What's new in Sudo 1.8.9p5? * Fixed a compilation error on AIX when LDAP support is enabled. diff --git a/common/Makefile.in b/common/Makefile.in index aed7b5f97..d886dfe63 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -54,8 +54,11 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # Regression tests -TEST_PROGS = conf_test parseln_test hltq_test +TEST_PROGS = atofoo_test conf_test hltq_test parseln_test TEST_LIBS = @LIBS@ @LIBINTL@ ../compat/libreplace.la TEST_LDFLAGS = @LDFLAGS@ @@ -71,6 +74,8 @@ LTOBJS = alloc.lo atobool.lo atoid.lo atomode.lo event.lo fatal.lo fileops.lo \ setgroups.lo sudo_conf.lo sudo_debug.lo sudo_dso.lo sudo_printf.lo \ term.lo ttysize.lo @COMMON_OBJS@ +ATOFOO_TEST_OBJS = atofoo_test.lo locale_stub.lo + PARSELN_TEST_OBJS = parseln_test.lo locale_stub.lo CONF_TEST_OBJS = conf_test.lo locale_stub.lo @@ -90,6 +95,9 @@ Makefile: $(srcdir)/Makefile.in libsudo_util.la: $(LTOBJS) $(LIBTOOL) --mode=link $(CC) -o $@ $(LTOBJS) -no-install +atofoo_test: $(ATOFOO_TEST_OBJS) libsudo_util.la + $(LIBTOOL) --mode=link $(CC) -o $@ $(ATOFOO_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + conf_test: $(CONF_TEST_OBJS) libsudo_util.la $(LIBTOOL) --mode=link $(CC) -o $@ $(CONF_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) @@ -115,10 +123,18 @@ install-plugin: uninstall: +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + check: $(TEST_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ passed=0; failed=0; total=0; \ total=1; \ + if ./atofoo_test; then \ + passed=`expr $$passed + 1`; \ + else \ + failed=`expr $$failed + 1`; \ + fi; \ if ./hltq_test; then \ passed=`expr $$passed + 1`; \ else \ @@ -177,6 +193,10 @@ atobool.lo: $(srcdir)/atobool.c $(incdir)/missing.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h \ $(top_srcdir)/compat/stdbool.h $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/atobool.c +atofoo_test.lo: $(srcdir)/regress/atofoo/atofoo_test.c $(incdir)/fatal.h \ + $(incdir)/missing.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h + $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/atofoo/atofoo_test.c atoid.lo: $(srcdir)/atoid.c $(incdir)/gettext.h $(incdir)/missing.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h @@ -191,8 +211,8 @@ conf_test.lo: $(srcdir)/regress/sudo_conf/conf_test.c $(incdir)/missing.h \ $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/sudo_conf/conf_test.c event.lo: $(srcdir)/event.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/queue.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_event.h $(top_builddir)/config.h \ - $(top_srcdir)/compat/stdbool.h + $(incdir)/sudo_event.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event.c event_poll.lo: $(srcdir)/event_poll.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/queue.h $(incdir)/sudo_debug.h \ @@ -201,8 +221,8 @@ event_poll.lo: $(srcdir)/event_poll.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_poll.c event_select.lo: $(srcdir)/event_select.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/missing.h $(incdir)/queue.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_event.h $(top_builddir)/config.h \ - $(top_srcdir)/compat/stdbool.h + $(incdir)/sudo_event.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_select.c fatal.lo: $(srcdir)/fatal.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/gettext.h $(incdir)/missing.h $(incdir)/queue.h \ @@ -256,8 +276,8 @@ sudo_conf.lo: $(srcdir)/sudo_conf.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_conf.c sudo_debug.lo: $(srcdir)/sudo_debug.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/gettext.h $(incdir)/missing.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_plugin.h $(top_builddir)/config.h \ - $(top_srcdir)/compat/stdbool.h + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_debug.c sudo_dso.lo: $(srcdir)/sudo_dso.c $(incdir)/missing.h $(incdir)/sudo_dso.h \ $(top_builddir)/config.h diff --git a/common/aix.c b/common/aix.c index f6c8bfd4e..c0f2a418b 100644 --- a/common/aix.c +++ b/common/aix.c @@ -31,15 +31,15 @@ #include <usersec.h> #include <uinfo.h> +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" #include "sudo_debug.h" #include "sudo_util.h" -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" - #ifdef HAVE_GETUSERATTR #ifndef HAVE_SETRLIMIT64 diff --git a/common/alloc.c b/common/alloc.c index 7d2afb5d1..411db3023 100644 --- a/common/alloc.c +++ b/common/alloc.c @@ -48,13 +48,13 @@ #endif #include <limits.h> +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" - /* * If there is no SIZE_MAX or SIZE_T_MAX we have to assume that size_t * could be signed (as it is on SunOS 4.x). This just means that diff --git a/common/atoid.c b/common/atoid.c index 056dc126f..5e622cc05 100644 --- a/common/atoid.c +++ b/common/atoid.c @@ -41,7 +41,7 @@ #include <limits.h> #define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" +#include "gettext.h" /* must be included before missing.h */ #include "missing.h" #include "sudo_debug.h" diff --git a/common/atomode.c b/common/atomode.c index 64bad4af5..ae5a5f598 100644 --- a/common/atomode.c +++ b/common/atomode.c @@ -30,7 +30,7 @@ #include <errno.h> #define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" +#include "gettext.h" /* must be included before missing.h */ #include "missing.h" #include "sudo_debug.h" diff --git a/common/event.c b/common/event.c index 6135c71dc..f1fdf14cd 100644 --- a/common/event.c +++ b/common/event.c @@ -48,6 +48,7 @@ #include "fatal.h" #include "sudo_debug.h" #include "sudo_event.h" +#include "sudo_util.h" /* XXX - use non-exiting allocators? */ @@ -167,7 +168,7 @@ sudo_ev_add(struct sudo_event_base *base, struct sudo_event *ev, ev->timeout.tv_sec += timo->tv_sec; ev->timeout.tv_usec += timo->tv_usec; TAILQ_FOREACH(evtmp, &base->timeouts, timeouts_entries) { - if (timevalcmp(timo, &evtmp->timeout, <)) + if (sudo_timevalcmp(timo, &evtmp->timeout, <)) break; } if (evtmp != NULL) { @@ -275,7 +276,7 @@ rescan: /* Timed out, activate timeout events. */ gettimeofday(&now, NULL); while ((ev = TAILQ_FIRST(&base->timeouts)) != NULL) { - if (timevalcmp(&ev->timeout, &now, >)) + if (sudo_timevalcmp(&ev->timeout, &now, >)) break; /* Remove from timeouts list. */ CLR(ev->flags, SUDO_EVQ_TIMEOUTS); @@ -385,14 +386,13 @@ sudo_ev_get_timeleft(struct sudo_event *ev, struct timeval *tv) debug_decl(sudo_ev_get_timeleft, SUDO_DEBUG_EVENT) if (!ISSET(ev->flags, SUDO_EVQ_TIMEOUTS)) { - timevalclear(tv); + sudo_timevalclear(tv); debug_return_int(-1); } gettimeofday(&now, NULL); - *tv = ev->timeout; - timevalsub(tv, &now); + sudo_timevalsub(&ev->timeout, &now, tv); if (tv->tv_sec < 0 || (tv->tv_sec == 0 && tv->tv_usec < 0)) - timevalclear(tv); + sudo_timevalclear(tv); debug_return_int(0); } diff --git a/common/event_select.c b/common/event_select.c index 1d3179dbc..bac3b4d9f 100644 --- a/common/event_select.c +++ b/common/event_select.c @@ -54,6 +54,7 @@ #include "fatal.h" #include "sudo_debug.h" #include "sudo_event.h" +#include "sudo_util.h" /* XXX - use non-exiting allocators? */ @@ -155,14 +156,13 @@ sudo_ev_scan_impl(struct sudo_event_base *base, int flags) if ((ev = TAILQ_FIRST(&base->timeouts)) != NULL) { gettimeofday(&now, NULL); - tv = ev->timeout; - timevalsub(&tv, &now); + sudo_timevalsub(&ev->timeout, &now, &tv); if (tv.tv_sec < 0 || (tv.tv_sec == 0 && tv.tv_usec < 0)) - timevalclear(&tv); + sudo_timevalclear(&tv); timeout = &tv; } else { if (ISSET(flags, SUDO_EVLOOP_NONBLOCK)) { - timevalclear(&tv); + sudo_timevalclear(&tv); timeout = &tv; } else { timeout = NULL; diff --git a/common/fatal.c b/common/fatal.c index d42914748..aae23dab9 100644 --- a/common/fatal.c +++ b/common/fatal.c @@ -28,15 +28,15 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" #include "queue.h" #include "sudo_plugin.h" -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" - struct sudo_fatal_callback { SLIST_ENTRY(sudo_fatal_callback) entries; void (*func)(void); diff --git a/common/gidlist.c b/common/gidlist.c index 695626f0f..8b112eb5a 100644 --- a/common/gidlist.c +++ b/common/gidlist.c @@ -30,7 +30,7 @@ #include <grp.h> #define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" +#include "gettext.h" /* must be included before missing.h */ #include "missing.h" #include "alloc.h" diff --git a/common/regress/atofoo/atofoo_test.c b/common/regress/atofoo/atofoo_test.c new file mode 100644 index 000000000..8c3f6d382 --- /dev/null +++ b/common/regress/atofoo/atofoo_test.c @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2014 Todd C. Miller <Todd.Miller@courtesan.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <config.h> + +#include <sys/types.h> +#include <stdio.h> +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif /* STDC_HEADERS */ +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif + +#include "missing.h" +#include "sudo_util.h" +#include "fatal.h" + +__dso_public int main(int argc, char *argv[]); + +/* atobool() tests */ +static struct atobool_data { + const char *bool_str; + int value; +} atobool_data[] = { + { "true", true }, + { "false", false }, + { "TrUe", true }, + { "fAlSe", false }, + { "1", true }, + { "0", false }, + { "on", true }, + { "off", false }, + { "yes", true }, + { "no", false }, + { "nope", -1 }, + { "10", -1 }, + { "one", -1 }, + { "zero", -1 }, + { NULL, 0 } +}; + +static int +test_atobool(void) +{ + struct atobool_data *d; + int errors = 0; + int value; + + for (d = atobool_data; d->bool_str != NULL; d++) { + value = atobool(d->bool_str); + if (value != d->value) { + warningx_nodebug("FAIL: %s != %d", d->bool_str, d->value); + errors++; + } + } + + return errors; +} + +/* atoid() tests */ +static struct atoid_data { + const char *idstr; + id_t id; + const char *sep; + const char *ep; +} atoid_data[] = { + { "0,1", 0, ",", "," }, + { "10", 10, NULL, NULL }, + { "-2", -2, NULL, NULL }, + { "-2", 4294967294U, NULL, NULL }, + { "4294967294", 4294967294U, NULL, NULL }, + { NULL, 0, NULL, NULL } +}; + +static int +test_atoid(void) +{ + struct atoid_data *d; + const char *errstr; + char *ep; + int errors = 0; + id_t value; + + for (d = atoid_data; d->idstr != NULL; d++) { + errstr = "some error"; + value = atoid(d->idstr, d->sep, &ep, &errstr); + if (errstr != NULL) { + if (d->id != (id_t)-1) { + warningx_nodebug("FAIL: %s: %s", d->idstr, errstr); + errors++; + } + } else if (value != d->id) { + warningx_nodebug("FAIL: %s != %u", d->idstr, (unsigned int)d->id); + errors++; + } else if (d->ep != NULL && ep[0] != d->ep[0]) { + warningx_nodebug("FAIL: ep[0] %d != %d", (int)(unsigned char)ep[0], + (int)(unsigned char)d->ep[0]); + errors++; + } + } + + return errors; +} + +/* atomode() tests */ +static struct atomode_data { + const char *mode_str; + mode_t mode; +} atomode_data[] = { + { "755", 0755 }, + { "007", 007 }, + { "7", 7 }, + { "8", -1 }, + { NULL, 0 } +}; + +static int +test_atomode(void) +{ + struct atomode_data *d; + const char *errstr; + int errors = 0; + mode_t mode; + + for (d = atomode_data; d->mode_str != NULL; d++) { + errstr = "some error"; + mode = atomode(d->mode_str, &errstr); + if (errstr != NULL) { + if (d->mode != (mode_t)-1) { + warningx_nodebug("FAIL: %s: %s", d->mode_str, errstr); + errors++; + } + } else if (mode != d->mode) { + warningx_nodebug("FAIL: %s != 0%o", d->mode_str, d->mode); + errors++; + } + } + + return errors; +} + +/* + * Simple tests for atobool(), atoid(), atomode(). + */ +int +main(int argc, char *argv[]) +{ + int errors = 0; + + initprogname(argc > 0 ? argv[0] : "atofoo"); + + errors += test_atobool(); + errors += test_atoid(); + errors += test_atomode(); + + exit(errors); +} diff --git a/common/regress/sudo_conf/conf_test.c b/common/regress/sudo_conf/conf_test.c index 658e030ab..69c09f48d 100644 --- a/common/regress/sudo_conf/conf_test.c +++ b/common/regress/sudo_conf/conf_test.c @@ -43,6 +43,7 @@ #include "missing.h" #include "sudo_conf.h" +#include "sudo_util.h" static void sudo_conf_dump(void); @@ -56,8 +57,9 @@ __dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) { + initprogname(argc > 0 ? argv[0] : "conf_test"); if (argc != 2) { - fprintf(stderr, "usage: conf_test conf_file\n"); + fprintf(stderr, "usage: %s conf_file\n", getprogname()); exit(1); } sudo_conf_read(argv[1]); diff --git a/common/regress/sudo_parseln/parseln_test.c b/common/regress/sudo_parseln/parseln_test.c index 73b960dc1..369325c16 100644 --- a/common/regress/sudo_parseln/parseln_test.c +++ b/common/regress/sudo_parseln/parseln_test.c @@ -43,6 +43,7 @@ #include "missing.h" #include "fileops.h" +#include "sudo_util.h" __dso_public int main(int argc, char *argv[]); @@ -59,6 +60,8 @@ main(int argc, char *argv[]) size_t linesize = 0; char *line = NULL; + initprogname(argc > 0 ? argv[0] : "parseln_test"); + while (sudo_parseln(&line, &linesize, &lineno, stdin) != -1) printf("%6u\t%s\n", lineno, line); free(line); diff --git a/common/regress/tailq/hltq_test.c b/common/regress/tailq/hltq_test.c index 49b724db6..42437e68b 100644 --- a/common/regress/tailq/hltq_test.c +++ b/common/regress/tailq/hltq_test.c @@ -44,6 +44,7 @@ #include "missing.h" #include "fatal.h" #include "queue.h" +#include "sudo_util.h" __dso_public int main(int argc, char *argv[]); @@ -70,6 +71,8 @@ main(int argc, char *argv[]) struct test_data_list tq; int errors = 0; + initprogname(argc > 0 ? argv[0] : "hltq_test"); + /* * Initialize three data elements and concatenate them in order. */ diff --git a/common/sudo_conf.c b/common/sudo_conf.c index 0704a7b1d..3d8d6bb57 100644 --- a/common/sudo_conf.c +++ b/common/sudo_conf.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2013 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2009-2014 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -45,6 +45,9 @@ #include <errno.h> #include <limits.h> +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #define SUDO_ERROR_WRAP 0 #include "missing.h" @@ -58,9 +61,6 @@ #include "sudo_util.h" #include "secure_path.h" -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" - #ifdef __TANDEM # define ROOT_UID 65535 #else @@ -86,6 +86,7 @@ static void set_variable(const char *entry, const char *conf_file); static void set_var_disable_coredump(const char *entry, const char *conf_file); static void set_var_group_source(const char *entry, const char *conf_file); static void set_var_max_groups(const char *entry, const char *conf_file); +static void set_var_probe_interfaces(const char *entry, const char *conf_file); static unsigned int conf_lineno; @@ -101,11 +102,13 @@ static struct sudo_conf_table sudo_conf_table_vars[] = { { "disable_coredump", sizeof("disable_coredump") - 1, set_var_disable_coredump }, { "group_source", sizeof("group_source") - 1, set_var_group_source }, { "max_groups", sizeof("max_groups") - 1, set_var_max_groups }, + { "probe_interfaces", sizeof("probe_interfaces") - 1, set_var_probe_interfaces }, { NULL } }; static struct sudo_conf_data { bool disable_coredump; + bool probe_interfaces; int group_source; int max_groups; const char *debug_flags; @@ -113,6 +116,7 @@ static struct sudo_conf_data { struct sudo_conf_paths paths[5]; } sudo_conf_data = { true, + true, GROUP_SOURCE_ADAPTIVE, -1, NULL, @@ -192,6 +196,15 @@ set_var_max_groups(const char *entry, const char *conf_file) } } +static void +set_var_probe_interfaces(const char *entry, const char *conf_file) +{ + int val = atobool(entry); + + if (val != -1) + sudo_conf_data.probe_interfaces = val; +} + /* * "Debug progname debug_file debug_flags" */ @@ -362,6 +375,12 @@ sudo_conf_disable_coredump(void) return sudo_conf_data.disable_coredump; } +bool +sudo_conf_probe_interfaces(void) +{ + return sudo_conf_data.probe_interfaces; +} + /* * Reads in /etc/sudo.conf and populates sudo_conf_data. */ diff --git a/common/sudo_debug.c b/common/sudo_debug.c index ed842bc62..7e09580ab 100644 --- a/common/sudo_debug.c +++ b/common/sudo_debug.c @@ -47,14 +47,15 @@ #include <fcntl.h> #include <time.h> +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" #include "sudo_plugin.h" #include "sudo_debug.h" - -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" +#include "sudo_util.h" /* * The debug priorities and subsystems are currently hard-coded. diff --git a/common/sudo_dso.c b/common/sudo_dso.c index 6e71c597f..44f060400 100644 --- a/common/sudo_dso.c +++ b/common/sudo_dso.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2012-2013 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2010, 2012-2014 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -131,9 +131,16 @@ sudo_dso_findsym(void *vhandle, const char *symbol) */ if (vhandle == SUDO_DSO_NEXT) { /* Iterate over all shared libs looking for symbol. */ + shl_t myhandle = PROG_HANDLE; struct shl_descriptor *desc; int idx = 0; + + /* Find program's real handle. */ + if (shl_gethandle(PROG_HANDLE, &desc) == 0) + myhandle = desc->handle; while (shl_get(idx++, &desc) == 0) { + if (desc->handle == myhandle) + continue; if (shl_findsym(&desc->handle, symbol, TYPE_UNDEFINED, &value) == 0) break; } diff --git a/common/term.c b/common/term.c index fa8d41145..e03b29b06 100644 --- a/common/term.c +++ b/common/term.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2012 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -35,7 +35,10 @@ #ifdef HAVE_STRINGS_H # include <strings.h> #endif /* HAVE_STRINGS_H */ +#include <errno.h> +#include <signal.h> #include <termios.h> +#include <unistd.h> #include "missing.h" #include "sudo_debug.h" @@ -64,49 +67,108 @@ static struct termios term, oterm; static int changed; + +/* tgetpass() needs to know the erase and kill chars for cbreak mode. */ int term_erase; int term_kill; -int -term_restore(int fd, int flush) +static volatile sig_atomic_t got_sigttou; + +/* + * SIGTTOU signal handler for term_restore that just sets a flag. + */ +static void sigttou(int signo) +{ + got_sigttou = 1; +} + +/* + * Like tcsetattr() 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. + */ +static int +tcsetattr_nobg(int fd, int flags, struct termios *tp) +{ + sigaction_t sa, osa; + int rc; + + /* + * If we receive SIGTTOU from tcsetattr() it means we are + * not in the foreground process group. + * This should be less racy than using tcgetpgrp(). + */ + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_handler = sigttou; + got_sigttou = 0; + sigaction(SIGTTOU, &sa, &osa); + do { + rc = tcsetattr(fd, flags, tp); + } while (rc != 0 && errno == EINTR && !got_sigttou); + sigaction(SIGTTOU, &osa, NULL); + + return rc; +} + +/* + * Restore saved terminal settings if we are in the foreground process group. + * Returns true on success or false on failure. + */ +bool +term_restore(int fd, bool flush) { debug_decl(term_restore, SUDO_DEBUG_UTIL) if (changed) { - int flags = TCSASOFT; - flags |= flush ? TCSAFLUSH : TCSADRAIN; - if (tcsetattr(fd, flags, &oterm) != 0) - debug_return_int(0); + const int flags = flush ? (TCSASOFT|TCSAFLUSH) : (TCSASOFT|TCSADRAIN); + if (tcsetattr_nobg(fd, flags, &oterm) != 0) + debug_return_bool(false); changed = 0; } - debug_return_int(1); + debug_return_bool(true); } -int +/* + * Disable terminal echo. + * Returns true on success or false on failure. + */ +bool term_noecho(int fd) { debug_decl(term_noecho, SUDO_DEBUG_UTIL) +again: if (!changed && tcgetattr(fd, &oterm) != 0) - debug_return_int(0); + debug_return_bool(false); (void) memcpy(&term, &oterm, sizeof(term)); CLR(term.c_lflag, ECHO|ECHONL); #ifdef VSTATUS term.c_cc[VSTATUS] = _POSIX_VDISABLE; #endif - if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { + if (tcsetattr_nobg(fd, TCSADRAIN|TCSASOFT, &term) == 0) { changed = 1; - debug_return_int(1); + debug_return_bool(true); + } + if (got_sigttou) { + /* We were in the background, so oterm is probably bogus. */ + kill(getpid(), SIGTTOU); + goto again; } - debug_return_int(0); + debug_return_bool(false); } -int +/* + * Set terminal to raw mode. + * Returns true on success or false on failure. + */ +bool term_raw(int fd, int isig) { struct termios term; debug_decl(term_raw, SUDO_DEBUG_UTIL) +again: if (!changed && tcgetattr(fd, &oterm) != 0) return 0; (void) memcpy(&term, &oterm, sizeof(term)); @@ -118,47 +180,74 @@ term_raw(int fd, int isig) CLR(term.c_lflag, ECHO | ICANON | ISIG | IEXTEN); if (isig) SET(term.c_lflag, ISIG); - if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { + if (tcsetattr_nobg(fd, TCSADRAIN|TCSASOFT, &term) == 0) { changed = 1; - debug_return_int(1); + debug_return_bool(true); + } + if (got_sigttou) { + /* We were in the background, so oterm is probably bogus. */ + kill(getpid(), SIGTTOU); + goto again; } - debug_return_int(0); + debug_return_bool(false); } -int +/* + * Set terminal to cbreak mode. + * Returns true on success or false on failure. + */ +bool term_cbreak(int fd) { debug_decl(term_cbreak, SUDO_DEBUG_UTIL) +again: if (!changed && tcgetattr(fd, &oterm) != 0) return 0; (void) memcpy(&term, &oterm, sizeof(term)); /* Set terminal to half-cooked mode */ term.c_cc[VMIN] = 1; term.c_cc[VTIME] = 0; + /* cppcheck-suppress redundantAssignment */ CLR(term.c_lflag, ECHO | ECHONL | ICANON | IEXTEN); + /* cppcheck-suppress redundantAssignment */ SET(term.c_lflag, ISIG); #ifdef VSTATUS term.c_cc[VSTATUS] = _POSIX_VDISABLE; #endif - if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { + if (tcsetattr_nobg(fd, TCSADRAIN|TCSASOFT, &term) == 0) { term_erase = term.c_cc[VERASE]; term_kill = term.c_cc[VKILL]; changed = 1; - debug_return_int(1); + debug_return_bool(true); + } + if (got_sigttou) { + /* We were in the background, so oterm is probably bogus. */ + kill(getpid(), SIGTTOU); + goto again; } - debug_return_int(0); + debug_return_bool(false); } -int +/* + * Copy terminal settings from one descriptor to another. + * Returns true on success or false on failure. + */ +bool term_copy(int src, int dst) { struct termios tt; debug_decl(term_copy, SUDO_DEBUG_UTIL) +again: if (tcgetattr(src, &tt) != 0) - debug_return_int(0); - if (tcsetattr(dst, TCSANOW|TCSASOFT, &tt) != 0) - debug_return_int(0); - debug_return_int(1); + debug_return_bool(false); + if (tcsetattr_nobg(dst, TCSANOW|TCSASOFT, &tt) == 0) + debug_return_bool(true); + if (got_sigttou) { + /* We were in the background, so oterm is probably bogus. */ + kill(getpid(), SIGTTOU); + goto again; + } + debug_return_bool(false); } diff --git a/compat/Makefile.in b/compat/Makefile.in index 843200e38..034daedaf 100644 --- a/compat/Makefile.in +++ b/compat/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -54,6 +54,9 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # OS dependent defines DEFS = @OSDEFS@ @@ -130,6 +133,9 @@ install-plugin: uninstall: +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + check: $(TEST_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ if test -f fnm_test; then \ @@ -164,6 +170,9 @@ realclean: distclean cleandir: realclean # Autogenerated dependencies, do not modify +clock_gettime.lo: $(srcdir)/clock_gettime.c $(incdir)/missing.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/timespec.h + $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/clock_gettime.c closefrom.lo: $(srcdir)/closefrom.c $(incdir)/missing.h $(top_builddir)/config.h $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/closefrom.c fnm_test.o: $(srcdir)/regress/fnmatch/fnm_test.c $(incdir)/missing.h \ diff --git a/compat/clock_gettime.c b/compat/clock_gettime.c new file mode 100644 index 000000000..f0463a6b6 --- /dev/null +++ b/compat/clock_gettime.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014 Todd C. Miller <Todd.Miller@courtesan.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <config.h> + +#if !defined(HAVE_CLOCK_GETTIME) + +#include <sys/types.h> +#include <sys/time.h> + +#include <errno.h> +#include <stdio.h> +#ifdef TIME_WITH_SYS_TIME +# include <time.h> +#endif +#ifndef HAVE_STRUCT_TIMESPEC +# include "compat/timespec.h" +#endif + +#include "missing.h" + +#ifdef __MACH__ +# include <mach/mach.h> +# include <mach/mach_time.h> +# include <mach/clock.h> +#endif + +/* + * Trivial clock_gettime() that supports CLOCK_REALTIME + * (and CLOCK_MONOTONIC on Mach). + */ +int +clock_gettime(clockid_t clock_id, struct timespec *ts) +{ + + switch (clock_id) { +#ifdef __MACH__ + case CLOCK_MONOTONIC: + { + uint64_t abstime, nsec; + static mach_timebase_info_data_t timebase_info; + + if (timebase_info.denom == 0) + (void) mach_timebase_info(&timebase_info); + abstime = mach_absolute_time(); + nsec = abstime * timebase_info.numer / timebase_info.denom; + ts->tv_sec = nsec / 1000000000; + ts->tv_nsec = nsec % 1000000000; + return 0; + } +#endif + case CLOCK_REALTIME: + { + struct timeval tv; + + gettimeofday(&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + return 0; + } + default: + errno = EINVAL; + return -1; + } +} + +#endif /* !HAVE_CLOCK_GETTIME */ diff --git a/compat/getaddrinfo.c b/compat/getaddrinfo.c index 2e3da84c5..10d2b1113 100644 --- a/compat/getaddrinfo.c +++ b/compat/getaddrinfo.c @@ -52,6 +52,7 @@ #ifdef HAVE_STRINGS_H # include <strings.h> #endif /* HAVE_STRINGS_H */ +#include <limits.h> #include <netdb.h> #include <errno.h> @@ -299,7 +300,7 @@ gai_lookup(const char *nodename, int flags, int socktype, unsigned short port, const char *canonical; int i; - if (inet_aton(nodename, &addr)) { + if (inet_pton(AF_INET, nodename, &addr)) { canonical = (flags & AI_CANONNAME) ? nodename : NULL; ai = gai_addrinfo_new(socktype, canonical, addr, port); if (ai == NULL) diff --git a/compat/inet_pton.c b/compat/inet_pton.c new file mode 100644 index 000000000..a4e0fafd9 --- /dev/null +++ b/compat/inet_pton.c @@ -0,0 +1,258 @@ +/* $OpenBSD: inet_pton.c,v 1.8 2010/05/06 15:47:14 claudio Exp $ */ + +/* Copyright (c) 1996 by Internet Software Consortium. + * + * 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 INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include <config.h> + +#if !defined(HAVE_INET_PTON) + +#include <sys/param.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <arpa/nameser.h> +#ifdef HAVE_STRING_H +# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) +# include <memory.h> +# endif +# include <string.h> +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif /* HAVE_STRINGS_H */ +#include <errno.h> + +#include "missing.h" + +#ifndef EAFNOSUPPORT +# define EAFNOSUPPORT EINVAL +#endif + +#ifndef NS_INADDRSZ +# ifdef INADDRSZ +# define NS_INADDRSZ INADDRSZ +# else +# define NS_INADDRSZ 4 +# endif +#endif +#ifndef NS_IN6ADDRSZ +# ifdef IN6ADDRSZ +# define NS_IN6ADDRSZ IN6ADDRSZ +# else +# define NS_IN6ADDRSZ 16 +# endif +#endif +#ifndef NS_INT16SZ +# ifdef INT16SZ +# define NS_INT16SZ INT16SZ +# else +# define NS_INT16SZ 2 +# endif +#endif + +/* + * WARNING: Don't even consider trying to compile this on a system where + * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. + */ + +/* int + * inet_pton4(src, dst) + * like inet_aton() but without all the hexadecimal and shorthand. + * return: + * 1 if `src' is a valid dotted quad, else 0. + * notice: + * does not touch `dst' unless it's returning 1. + * author: + * Paul Vixie, 1996. + */ +static int +inet_pton4(const char *src, u_char *dst) +{ + const char digits[] = "0123456789"; + int saw_digit, octets, ch; + u_char tmp[NS_INADDRSZ], *tp; + + saw_digit = 0; + octets = 0; + /* cppcheck-suppress uninitvar */ + *(tp = tmp) = '\0'; + while ((ch = (unsigned char)*src++) != '\0') { + const char *pch; + + if ((pch = strchr(digits, ch)) != NULL) { + u_int new = *tp * 10 + (pch - digits); + + if (new > 255) + return (0); + if (!saw_digit) { + if (++octets > 4) + return (0); + saw_digit = 1; + } + *tp = new; + } else if (ch == '.' && saw_digit) { + if (octets == 4) + return (0); + *++tp = 0; + saw_digit = 0; + } else + return (0); + } + if (octets < 4) + return (0); + + memcpy(dst, tmp, NS_INADDRSZ); + return (1); +} + +#ifdef HAVE_STRUCT_IN6_ADDR +/* int + * inet_pton6(src, dst) + * convert presentation level address to network order binary form. + * return: + * 1 if `src' is a valid [RFC1884 2.2] address, else 0. + * notice: + * does not touch `dst' unless it's returning 1. + * credit: + * inspired by Mark Andrews. + * author: + * Paul Vixie, 1996. + */ +static int +inet_pton6(const char *src, u_char *dst) +{ + const char xdigits_l[] = "0123456789abcdef", + xdigits_u[] = "0123456789ABCDEF"; + u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; + const char *xdigits, *curtok; + int ch, saw_xdigit, count_xdigit; + u_int val; + + /* cppcheck-suppress uninitvar */ + memset((tp = tmp), 0, NS_IN6ADDRSZ); + endp = tp + NS_IN6ADDRSZ; + colonp = NULL; + /* Leading :: requires some special handling. */ + if (*src == ':') + if (*++src != ':') + return (0); + curtok = src; + saw_xdigit = count_xdigit = 0; + val = 0; + while ((ch = (unsigned char)*src++) != '\0') { + const char *pch; + + if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) + pch = strchr((xdigits = xdigits_u), ch); + if (pch != NULL) { + if (count_xdigit >= 4) + return (0); + val <<= 4; + val |= (pch - xdigits); + if (val > 0xffff) + return (0); + saw_xdigit = 1; + count_xdigit++; + continue; + } + if (ch == ':') { + curtok = src; + if (!saw_xdigit) { + if (colonp) + return (0); + colonp = tp; + continue; + } else if (*src == '\0') { + return (0); + } + if (tp + NS_INT16SZ > endp) + return (0); + *tp++ = (u_char) (val >> 8) & 0xff; + *tp++ = (u_char) val & 0xff; + saw_xdigit = 0; + count_xdigit = 0; + val = 0; + continue; + } + if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && + inet_pton4(curtok, tp) > 0) { + tp += NS_INADDRSZ; + saw_xdigit = 0; + count_xdigit = 0; + break; /* '\0' was seen by inet_pton4(). */ + } + return (0); + } + if (saw_xdigit) { + if (tp + NS_INT16SZ > endp) + return (0); + *tp++ = (u_char) (val >> 8) & 0xff; + *tp++ = (u_char) val & 0xff; + } + if (colonp != NULL) { + /* + * Since some memmove()'s erroneously fail to handle + * overlapping regions, we'll do the shift by hand. + */ + const long n = tp - colonp; + long i; + + if (tp == endp) + return (0); + for (i = 1; i <= n; i++) { + endp[- i] = colonp[n - i]; + colonp[n - i] = 0; + } + tp = endp; + } + if (tp != endp) + return (0); + memcpy(dst, tmp, NS_IN6ADDRSZ); + return (1); +} +#endif /* HAVE_STRUCT_IN6_ADDR */ + +/* int + * inet_pton(af, src, dst) + * convert from presentation format (which usually means ASCII printable) + * to network format (which is usually some kind of binary format). + * return: + * 1 if the address was valid for the specified address family + * 0 if the address wasn't valid (`dst' is untouched in this case) + * -1 if some other error occurred (`dst' is untouched in this case, too) + * author: + * Paul Vixie, 1996. + */ +int +inet_pton(int af, const char *src, void *dst) +{ + switch (af) { + case AF_INET: + return (inet_pton4(src, dst)); +#ifdef HAVE_STRUCT_IN6_ADDR + case AF_INET6: + return (inet_pton6(src, dst)); +#endif /* HAVE_STRUCT_IN6_ADDR */ + default: + errno = EAFNOSUPPORT; + return (-1); + } + /* NOTREACHED */ +} + +#endif /* HAVE_INET_PTON */ diff --git a/compat/strsignal.c b/compat/strsignal.c index 2f42fdfa6..b82ba0c89 100644 --- a/compat/strsignal.c +++ b/compat/strsignal.c @@ -23,10 +23,10 @@ #include <stdio.h> #include <signal.h> -#include "missing.h" - #define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" +#include "gettext.h" /* must be included before missing.h */ + +#include "missing.h" #if defined(HAVE_DECL_SYS_SIGLIST) && HAVE_DECL_SYS_SIGLIST == 1 # define sudo_sys_siglist sys_siglist diff --git a/compat/strtonum.c b/compat/strtonum.c index 35d4d41f4..d665d6486 100644 --- a/compat/strtonum.c +++ b/compat/strtonum.c @@ -37,10 +37,10 @@ # include <strings.h> #endif /* HAVE_STRINGS_H */ -#include "missing.h" - #define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" +#include "gettext.h" /* must be included before missing.h */ + +#include "missing.h" #ifdef HAVE_STRTONUM diff --git a/config.h.in b/config.h.in index 62f13d13e..611a3f5a9 100644 --- a/config.h.in +++ b/config.h.in @@ -70,6 +70,9 @@ /* Define to 1 to enable BSM audit support. */ #undef HAVE_BSM_AUDIT +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + /* Define to 1 if you have the `closefrom' function. */ #undef HAVE_CLOSEFROM @@ -259,6 +262,9 @@ /* Define to 1 if your Kerberos is Heimdal. */ #undef HAVE_HEIMDAL +/* Define to 1 if you have the `inet_pton' function. */ +#undef HAVE_INET_PTON + /* Define to 1 if you have the `initprivs' function. */ #undef HAVE_INITPRIVS @@ -1051,6 +1057,9 @@ __func__ */ #undef __func__ +/* Define to `int' if <time.h> does not define. */ +#undef clockid_t + /* Define to empty if `const' does not conform to ANSI C. */ #undef const @@ -1106,41 +1115,6 @@ code using `volatile' can become incorrect without. Disable with care. */ #undef volatile -/* - * Macros to convert ctime and mtime into timevals. - */ -#define timespec2timeval(_ts, _tv) do { \ - (_tv)->tv_sec = (_ts)->tv_sec; \ - (_tv)->tv_usec = (_ts)->tv_nsec / 1000; \ -} while (0) - -#ifdef HAVE_ST_MTIM -# ifdef HAVE_ST__TIM -# define ctim_get(_x, _y) timespec2timeval(&(_x)->st_ctim.st__tim, (_y)) -# define mtim_get(_x, _y) timespec2timeval(&(_x)->st_mtim.st__tim, (_y)) -# else -# define ctim_get(_x, _y) timespec2timeval(&(_x)->st_ctim, (_y)) -# define mtim_get(_x, _y) timespec2timeval(&(_x)->st_mtim, (_y)) -# endif -#else -# ifdef HAVE_ST_MTIMESPEC -# define ctim_get(_x, _y) timespec2timeval(&(_x)->st_ctimespec, (_y)) -# define mtim_get(_x, _y) timespec2timeval(&(_x)->st_mtimespec, (_y)) -# else -# define ctim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0) -# define mtim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0) -# endif /* HAVE_ST_MTIMESPEC */ -#endif /* HAVE_ST_MTIM */ - -#ifdef __GNUC__ -# define ignore_result(x) do { \ - __typeof__(x) y = (x); \ - (void)y; \ -} while(0) -#else -# define ignore_result(x) (void)(x) -#endif - /* BSD compatibility on some SVR4 systems. */ #ifdef __svr4__ # define BSD_COMP @@ -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.9p5. +# Generated by GNU Autoconf 2.69 for sudo 1.8.10. # # Report bugs to <http://www.sudo.ws/bugs/>. # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.8.9p5' -PACKAGE_STRING='sudo 1.8.9p5' +PACKAGE_VERSION='1.8.10' +PACKAGE_STRING='sudo 1.8.10' PACKAGE_BUGREPORT='http://www.sudo.ws/bugs/' PACKAGE_URL='' @@ -716,8 +716,12 @@ umask_override sudo_umask password_timeout timeout -timedir +vardir +rundir iolog_dir +RC_LINK +INIT_DIR +INIT_SCRIPT NO_VIZ SSP_CFLAGS SSP_LDFLAGS @@ -770,6 +774,7 @@ GETGROUPS_LIB REPLAY_LIBS AFS_LIBS NET_LIBS +STATIC_SUDOERS SUDOERS_LIBS SUDO_LIBS SUDO_OBJS @@ -874,6 +879,8 @@ with_passprompt with_badpass_message with_fqdn with_timedir +with_rundir +with_vardir with_iologdir with_sendmail with_sudoers_mode @@ -1498,7 +1505,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sudo 1.8.9p5 to adapt to many kinds of systems. +\`configure' configures sudo 1.8.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1563,7 +1570,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.8.9p5:";; + short | recursive ) echo "Configuration of sudo 1.8.10:";; esac cat <<\_ACEOF @@ -1659,7 +1666,9 @@ Optional Packages: --with-passprompt default password prompt --with-badpass-message message the user sees when the password is wrong --with-fqdn expect fully qualified hosts in sudoers - --with-timedir path to the sudo timestamp dir + --with-timedir=DIR deprecated + --with-rundir=DIR path to the sudo time stamp parent dir + --with-vardir=DIR path to the sudo var dir --with-iologdir=DIR directory to store sudo I/O log files in --with-sendmail set path to sendmail --without-sendmail do not send mail at all @@ -1697,7 +1706,7 @@ Optional Packages: --without-interfaces don't try to read the ip addr of ether interfaces --with-stow deprecated --with-askpass=PATH Fully qualified pathname of askpass helper - --with-plugindir set directory to load plugins from + --with-plugindir=DIR set directory to load plugins from --with-man manual pages use man macros --with-mdoc manual pages use mdoc macros --with-selinux enable SELinux support @@ -1793,7 +1802,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.8.9p5 +sudo configure 1.8.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2502,7 +2511,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sudo $as_me 1.8.9p5, which was +It was created by sudo $as_me 1.8.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2963,11 +2972,16 @@ $as_echo "$as_me: Configuring Sudo version $PACKAGE_VERSION" >&6;} + + + + # # Begin initial values for man page substitution # iolog_dir=/var/log/sudo-io -timedir=/var/adm/sudo +rundir=/var/run/sudo +vardir=/var/adm/sudo timeout=5 password_timeout=5 sudo_umask=0022 @@ -3038,6 +3052,9 @@ LT_LDEXPORTS="-export-symbols \$(shlib_exp)" LT_LDDEP="\$(shlib_exp)" NO_VIZ="-DNO_VIZ" OS_INIT=os_init_common +INIT_SCRIPT= +INIT_DIR= +RC_LINK= CHECKSHADOW=true shadow_defs= @@ -4714,9 +4731,31 @@ fi # Check whether --with-timedir was given. if test "${with_timedir+set}" = set; then : withval=$with_timedir; case $with_timedir in - yes) as_fn_error $? "\"must give --with-timedir an argument.\"" "$LINENO" 5 + *) as_fn_error $? "\"--without-timedir no longer supported, see --with-rundir.\"" "$LINENO" 5 + ;; +esac +fi + + + +# Check whether --with-rundir was given. +if test "${with_rundir+set}" = set; then : + withval=$with_rundir; case $with_rundir in + yes) as_fn_error $? "\"must give --with-rundir an argument.\"" "$LINENO" 5 ;; - no) as_fn_error $? "\"--without-timedir not supported.\"" "$LINENO" 5 + no) as_fn_error $? "\"--without-rundir not supported.\"" "$LINENO" 5 + ;; +esac +fi + + + +# Check whether --with-vardir was given. +if test "${with_vardir+set}" = set; then : + withval=$with_vardir; case $with_vardir in + yes) as_fn_error $? "\"must give --with-vardirdir an argument.\"" "$LINENO" 5 + ;; + no) as_fn_error $? "\"--without-vardirdir not supported.\"" "$LINENO" 5 ;; esac fi @@ -14193,6 +14232,11 @@ fi RTLD_PRELOAD_VAR="LDR_PRELOAD" fi + # Remove timedir on boot, AIX does not have /var/run + INIT_SCRIPT=aix.sh + INIT_DIR=/etc/rc.d/init.d + RC_LINK=/etc/rc.d/rc2.d/S90sudo + # AIX-specific functions for ac_func in getuserattr setauthdb setrlimit64 do : @@ -14212,8 +14256,25 @@ done : ${mansectsu='1m'} : ${mansectform='4'} + # HP-UX does not clear /var/run so we need to do it + INIT_SCRIPT=hpux.sh + INIT_DIR=/sbin/init.d + RC_LINK=/sbin/rc2.d/S900sudo + # HP-UX shared libs must be executable SHLIB_MODE=0755 + + for ac_func in pstat_getproc +do : + ac_fn_c_check_func "$LINENO" "pstat_getproc" "ac_cv_func_pstat_getproc" +if test "x$ac_cv_func_pstat_getproc" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PSTAT_GETPROC 1 +_ACEOF + +fi +done + ;; *-*-hpux*) # AFS support needs -lBSD @@ -14223,6 +14284,11 @@ done : ${mansectsu='1m'} : ${mansectform='4'} + # HP-UX does not clear /var/run so we need to do it + INIT_SCRIPT=hpux.sh + INIT_DIR=/sbin/init.d + RC_LINK=/sbin/rc2.d/S900sudo + # HP-UX shared libs must be executable SHLIB_MODE=0755 @@ -16214,6 +16280,16 @@ $as_echo "#define gid_t int" >>confdefs.h fi +ac_fn_c_check_type "$LINENO" "clockid_t" "ac_cv_type_clockid_t" "#include <sys/types.h> +#include <time.h> +" +if test "x$ac_cv_type_clockid_t" = xyes; then : + +else + $as_echo "#define clockid_t int" >>confdefs.h + +fi + ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include <sys/types.h> #include <signal.h> " @@ -17849,6 +17925,72 @@ esac fi +for ac_func in clock_gettime +do : + ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOCK_GETTIME 1 +_ACEOF + +else + + # On Solaris, clock_gettime is in librt + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} 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 clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=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_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + + $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h + + SUDOERS_LIBS="${SUDOERS_LIBS} -lrt" + +else + case " $LIBOBJS " in + *" clock_gettime.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS clock_gettime.$ac_objext" + ;; +esac + +fi + + +fi +done + for ac_func in getopt_long do : ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" @@ -18496,33 +18638,28 @@ $as_echo "no" >&6; } fi -ac_fn_c_check_func "$LINENO" "inet_addr" "ac_cv_func_inet_addr" -if test "x$ac_cv_func_inet_addr" = xyes; then : +ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" +if test "x$ac_cv_func_inet_pton" = xyes; then : else - ac_fn_c_check_func "$LINENO" "__inet_addr" "ac_cv_func___inet_addr" -if test "x$ac_cv_func___inet_addr" = xyes; then : - -else - - for libs in "-lsocket" "-linet" "-lsocket -lnsl"; do - _libs= - for lib in $libs; do - case "$NET_LIBS" in - *"$lib"*) ;; - *) _libs="$_libs $lib";; - esac - done - libs="${_libs# }" - test -z "$libs" && continue - lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`" - extralibs="`echo \"$libs\"|sed 's/^-l[^ ]*//'`" + for libs in "-lsocket" "-linet" "-lsocket -lnsl" "-lresolv"; do + _libs= + for lib in $libs; do + case "$NET_LIBS" in + *"$lib"*) ;; + *) _libs="$_libs $lib";; + esac + done + libs="${_libs# }" + test -z "$libs" && continue + lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`" + extralibs="`echo \"$libs\"|sed 's/^-l[^ ]*//'`" _sudo_check_lib_extras=`echo "$extralibs"|sed -e 's/ *//g' -e 's/-l/_/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_addr in -l$lib${5+ }$extralibs" >&5 -$as_echo_n "checking for inet_addr in -l$lib${5+ }$extralibs... " >&6; } - if { as_var=sudo_cv_lib_$lib''_inet_addr$_sudo_check_lib_extras; eval \${$as_var+:} false; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_pton in -l$lib${5+ }$extralibs" >&5 +$as_echo_n "checking for inet_pton in -l$lib${5+ }$extralibs... " >&6; } + if { as_var=sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras; eval \${$as_var+:} false; }; then : $as_echo_n "(cached) " >&6 else @@ -18537,19 +18674,19 @@ else #ifdef __cplusplus extern "C" #endif -char inet_addr (); +char inet_pton (); int main () { -return inet_addr (); +return inet_pton (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - eval sudo_cv_lib_$lib''_inet_addr$_sudo_check_lib_extras=yes + eval sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras=yes else - eval sudo_cv_lib_$lib''_inet_addr$_sudo_check_lib_extras=no + eval sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras=no fi rm -f core conftest.err conftest.$ac_objext \ @@ -18558,23 +18695,34 @@ rm -f core conftest.err conftest.$ac_objext \ fi - if eval test \$sudo_cv_lib_$lib''_inet_addr$_sudo_check_lib_extras = "yes"; then + if eval test \$sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - NET_LIBS="${NET_LIBS} $libs"; LIBS="${LIBS} $libs"; break + + $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h + + NET_LIBS="${NET_LIBS} $libs" + LIBS="${LIBS} $libs" + break + else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - done + done fi +if test X"$ac_cv_func_inet_pton" != X"yes"; then + case " $LIBOBJS " in + *" inet_pton.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext" + ;; +esac fi - ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog" if test "x$ac_cv_func_syslog" = xyes; then : @@ -20745,7 +20893,7 @@ return ldap_init (); return 0; } _ACEOF -for ac_lib in '' "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}"; do +for ac_lib in '' "ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}" "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}"; do if test -z "$ac_lib"; then ac_res="none required" else @@ -20786,7 +20934,25 @@ fi fi LIBS="${_LIBS} ${LDAP_LIBS}" OLIBS="$LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ber_set_option" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lber.h defines LBER_OPT_DEBUG_LEVEL" >&5 +$as_echo_n "checking whether lber.h defines LBER_OPT_DEBUG_LEVEL... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +# include <lber.h> +int +main () +{ +int opt=LBER_OPT_DEBUG_LEVEL; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ber_set_option" >&5 $as_echo_n "checking for library containing ber_set_option... " >&6; } if ${ac_cv_search_ber_set_option+:} false; then : $as_echo_n "(cached) " >&6 @@ -20844,9 +21010,17 @@ else found=no fi - if test X"$found" = X"yes" -a X"$LIBS" != X"$OLIBS"; then - LDAP_LIBS="$LDAP_LIBS -llber" - fi + if test X"$found" = X"yes" -a X"$LIBS" != X"$OLIBS"; then + LDAP_LIBS="$LDAP_LIBS -llber" + fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lber.h is needed" >&5 $as_echo_n "checking whether lber.h is needed... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21116,7 +21290,7 @@ case "$lt_cv_dlopen" in $as_echo "#define STATIC_SUDOERS_PLUGIN 1" >>confdefs.h SUDO_OBJS="${SUDO_OBJS} preload.o" - SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la" + STATIC_SUDOERS="\$(top_builddir)/plugins/sudoers/sudoers.la" SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else @@ -21131,7 +21305,7 @@ case "$lt_cv_dlopen" in $as_echo "#define STATIC_SUDOERS_PLUGIN 1" >>confdefs.h SUDO_OBJS="${SUDO_OBJS} preload.o" - SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la" + STATIC_SUDOERS="\$(top_builddir)/plugins/sudoers/sudoers.la" SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else @@ -21145,7 +21319,7 @@ case "$lt_cv_dlopen" in fi # Preload sudoers module symbols SUDO_OBJS="${SUDO_OBJS} preload.o" - SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la" + STATIC_SUDOERS="\$(top_builddir)/plugins/sudoers/sudoers.la" LT_STATIC="" ;; esac @@ -21252,21 +21426,39 @@ else $as_echo "unknown" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for timestamp file location" >&5 -$as_echo_n "checking for timestamp file location... " >&6; } -timedir="$with_timedir" -if test -z "$timedir"; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sudo run dir location" >&5 +$as_echo_n "checking for sudo run dir location... " >&6; } +rundir="$with_rundir" +if test -z "$rundir"; then + for d in /var/run /var/db /var/lib /var/adm /usr/adm; do + if test -d "$d"; then + rundir="$d/sudo" + break + fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rundir" >&5 +$as_echo "$rundir" >&6; } +cat >>confdefs.h <<EOF +#define _PATH_SUDO_TIMEDIR "$rundir/ts" +EOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sudo var dir location" >&5 +$as_echo_n "checking for sudo var dir location... " >&6; } +vardir="$with_vardir" +if test -z "$vardir"; then for d in /var/db /var/lib /var/adm /usr/adm; do if test -d "$d"; then - timedir="$d/sudo" + vardir="$d/sudo" break fi done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $timedir" >&5 -$as_echo "$timedir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vardir" >&5 +$as_echo "$vardir" >&6; } cat >>confdefs.h <<EOF -#define _PATH_SUDO_TIMEDIR "$timedir" +#define _PATH_SUDO_LECTURE_DIR "$vardir/lectured" EOF @@ -22258,7 +22450,7 @@ test "$localedir" = '${datarootdir}/locale' && localedir='$(datarootdir)/locale' test "$localstatedir" = '${prefix}/var' && localstatedir='$(prefix)/var' test "$sysconfdir" = '${prefix}/etc' -a X"$with_stow" != X"yes" && sysconfdir='/etc' -ac_config_files="$ac_config_files Makefile common/Makefile compat/Makefile doc/Makefile include/Makefile src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers" +ac_config_files="$ac_config_files Makefile common/Makefile compat/Makefile doc/Makefile include/Makefile init.d/aix.sh init.d/hpux.sh src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -22766,7 +22958,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sudo $as_me 1.8.9p5, which was +This file was extended by sudo $as_me 1.8.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22832,7 +23024,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sudo config.status 1.8.9p5 +sudo config.status 1.8.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -23246,6 +23438,8 @@ do "compat/Makefile") CONFIG_FILES="$CONFIG_FILES compat/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "init.d/aix.sh") CONFIG_FILES="$CONFIG_FILES init.d/aix.sh" ;; + "init.d/hpux.sh") CONFIG_FILES="$CONFIG_FILES init.d/hpux.sh" ;; "src/sudo_usage.h") CONFIG_FILES="$CONFIG_FILES src/sudo_usage.h" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "plugins/sample/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/sample/Makefile" ;; @@ -24335,6 +24529,22 @@ $as_echo "$as_me: You will need to customize sample.pam and install it as /etc/p ;; esac fi +case "$rundir" in + /var/run*) + clear_rundir=0 + ;; + *) + clear_rundir=1 + ;; +esac +if test $clear_rundir -eq 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: the $rundir/ts directory must be cleared at boot time." >&5 +$as_echo "$as_me: Warning: the $rundir/ts directory must be cleared at boot time." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: You may need to create a startup item to do this." >&5 +$as_echo "$as_me: You may need to create a startup item to do this." >&6;} +fi + + diff --git a/configure.ac b/configure.ac index 5da9a2a02..4f419f627 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ dnl dnl Copyright (c) 1994-1996,1998-2014 Todd C. Miller <Todd.Miller@courtesan.com> dnl AC_PREREQ([2.59]) -AC_INIT([sudo], [1.8.9p5], [http://www.sudo.ws/bugs/], [sudo]) +AC_INIT([sudo], [1.8.10], [http://www.sudo.ws/bugs/], [sudo]) AC_CONFIG_HEADER([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl @@ -33,6 +33,7 @@ AC_SUBST([SUDO_OBJS]) AC_SUBST([LIBS]) AC_SUBST([SUDO_LIBS]) AC_SUBST([SUDOERS_LIBS]) +AC_SUBST([STATIC_SUDOERS]) AC_SUBST([NET_LIBS]) AC_SUBST([AFS_LIBS]) AC_SUBST([REPLAY_LIBS]) @@ -85,11 +86,15 @@ AC_SUBST([PIE_CFLAGS]) AC_SUBST([SSP_LDFLAGS]) AC_SUBST([SSP_CFLAGS]) AC_SUBST([NO_VIZ]) +AC_SUBST([INIT_SCRIPT]) +AC_SUBST([INIT_DIR]) +AC_SUBST([RC_LINK]) dnl dnl Variables that get substituted in docs (not overridden by environment) dnl AC_SUBST([iolog_dir])dnl real initial value from SUDO_IO_LOGDIR -AC_SUBST([timedir])dnl real initial value from SUDO_TIMEDIR +AC_SUBST([rundir])dnl real initial value from SUDO_RUNDIR +AC_SUBST([vardir])dnl real initial value from SUDO_VARDIR AC_SUBST([timeout]) AC_SUBST([password_timeout]) AC_SUBST([sudo_umask]) @@ -131,7 +136,8 @@ AC_SUBST([PLUGINDIR]) # Begin initial values for man page substitution # iolog_dir=/var/log/sudo-io -timedir=/var/adm/sudo +rundir=/var/run/sudo +vardir=/var/adm/sudo timeout=5 password_timeout=5 sudo_umask=0022 @@ -206,6 +212,9 @@ LT_LDEXPORTS="-export-symbols \$(shlib_exp)" LT_LDDEP="\$(shlib_exp)" NO_VIZ="-DNO_VIZ" OS_INIT=os_init_common +INIT_SCRIPT= +INIT_DIR= +RC_LINK= dnl dnl Other vaiables @@ -778,11 +787,25 @@ else AC_MSG_RESULT(no) fi -AC_ARG_WITH(timedir, [AS_HELP_STRING([--with-timedir], [path to the sudo timestamp dir])], +AC_ARG_WITH(timedir, [AS_HELP_STRING([--with-timedir=DIR], [deprecated])], [case $with_timedir in - yes) AC_MSG_ERROR(["must give --with-timedir an argument."]) + *) AC_MSG_ERROR(["--without-timedir no longer supported, see --with-rundir."]) ;; - no) AC_MSG_ERROR(["--without-timedir not supported."]) +esac]) + +AC_ARG_WITH(rundir, [AS_HELP_STRING([--with-rundir=DIR], [path to the sudo time stamp parent dir])], +[case $with_rundir in + yes) AC_MSG_ERROR(["must give --with-rundir an argument."]) + ;; + no) AC_MSG_ERROR(["--without-rundir not supported."]) + ;; +esac]) + +AC_ARG_WITH(vardir, [AS_HELP_STRING([--with-vardir=DIR], [path to the sudo var dir])], +[case $with_vardir in + yes) AC_MSG_ERROR(["must give --with-vardirdir an argument."]) + ;; + no) AC_MSG_ERROR(["--without-vardirdir not supported."]) ;; esac]) @@ -1153,7 +1176,7 @@ else SUDO_DEFINE_UNQUOTED(_PATH_SUDO_ASKPASS, NULL) fi -AC_ARG_WITH(plugindir, [AS_HELP_STRING([--with-plugindir], [set directory to load plugins from])], +AC_ARG_WITH(plugindir, [AS_HELP_STRING([--with-plugindir=DIR], [set directory to load plugins from])], [case $with_plugindir in no) AC_MSG_ERROR(["illegal argument: --without-plugindir."]) ;; @@ -1655,6 +1678,11 @@ case "$host" in RTLD_PRELOAD_VAR="LDR_PRELOAD" fi + # Remove timedir on boot, AIX does not have /var/run + INIT_SCRIPT=aix.sh + INIT_DIR=/etc/rc.d/init.d + RC_LINK=/etc/rc.d/rc2.d/S90sudo + # AIX-specific functions AC_CHECK_FUNCS(getuserattr setauthdb setrlimit64) COMMON_OBJS="${COMMON_OBJS} aix.lo" @@ -1663,8 +1691,15 @@ case "$host" in : ${mansectsu='1m'} : ${mansectform='4'} + # HP-UX does not clear /var/run so we need to do it + INIT_SCRIPT=hpux.sh + INIT_DIR=/sbin/init.d + RC_LINK=/sbin/rc2.d/S900sudo + # HP-UX shared libs must be executable SHLIB_MODE=0755 + + AC_CHECK_FUNCS(pstat_getproc) ;; *-*-hpux*) # AFS support needs -lBSD @@ -1674,6 +1709,11 @@ case "$host" in : ${mansectsu='1m'} : ${mansectform='4'} + # HP-UX does not clear /var/run so we need to do it + INIT_SCRIPT=hpux.sh + INIT_DIR=/sbin/init.d + RC_LINK=/sbin/rc2.d/S900sudo + # HP-UX shared libs must be executable SHLIB_MODE=0755 @@ -2182,6 +2222,8 @@ dnl SUDO_APPEND_CPPFLAGS(-D__STDC_WANT_LIB_EXT1__=1) AC_TYPE_MODE_T AC_TYPE_UID_T +AC_CHECK_TYPE([clockid_t], [], [AC_DEFINE(clockid_t, int)], [#include <sys/types.h> +#include <time.h>]) AC_CHECK_TYPE([sig_atomic_t], [], [AC_DEFINE(sig_atomic_t, int)], [#include <sys/types.h> #include <signal.h>]) AC_CHECK_TYPES([sigaction_t], [], [], [#include <sys/types.h> @@ -2388,6 +2430,13 @@ SUDO_FUNC_FNMATCH([AC_DEFINE(HAVE_FNMATCH)], [AC_LIBOBJ(fnmatch) ]) SUDO_FUNC_ISBLANK AC_REPLACE_FUNCS(memrchr memset_s pw_dup strlcpy strlcat strtonum) +AC_CHECK_FUNCS(clock_gettime, [], [ + # On Solaris, clock_gettime is in librt + AC_CHECK_LIB(rt, clock_gettime, [ + AC_DEFINE(HAVE_CLOCK_GETTIME) + SUDOERS_LIBS="${SUDOERS_LIBS} -lrt" + ], [AC_LIBOBJ(clock_gettime)]) +]) AC_CHECK_FUNCS(getopt_long, [], [AC_LIBOBJ(getopt_long) AC_MSG_CHECKING([for optreset]) AC_CACHE_VAL(sudo_cv_optreset, [ @@ -2501,27 +2550,34 @@ AC_CHECK_FUNC(socket, [], [ done ]) dnl -dnl If inet_addr(3) not in libc, check -lnsl and -linet +dnl If inet_pton(3) not in libc, check -lnsl and -linet dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols +dnl Some systems may have inet_pton() in libresolv. dnl -AC_CHECK_FUNC(inet_addr, [], [ - AC_CHECK_FUNC(__inet_addr, [], [ - for libs in "-lsocket" "-linet" "-lsocket -lnsl"; do - _libs= - for lib in $libs; do - case "$NET_LIBS" in - *"$lib"*) ;; - *) _libs="$_libs $lib";; - esac - done - libs="${_libs# }" - test -z "$libs" && continue - lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`" - extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`" - SUDO_CHECK_LIB($lib, inet_addr, [NET_LIBS="${NET_LIBS} $libs"; LIBS="${LIBS} $libs"; break], [], [$extralibs]) +AC_CHECK_FUNC(inet_pton, [], [ + for libs in "-lsocket" "-linet" "-lsocket -lnsl" "-lresolv"; do + _libs= + for lib in $libs; do + case "$NET_LIBS" in + *"$lib"*) ;; + *) _libs="$_libs $lib";; + esac done - ]) + libs="${_libs# }" + test -z "$libs" && continue + lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`" + extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`" + SUDO_CHECK_LIB($lib, inet_pton, [ + AC_DEFINE(HAVE_INET_PTON) + NET_LIBS="${NET_LIBS} $libs" + LIBS="${LIBS} $libs" + break + ], [], [$extralibs]) + done ]) +if test X"$ac_cv_func_inet_pton" != X"yes"; then + AC_LIBOBJ(inet_pton) +fi dnl dnl If syslog(3) not in libc, check -lsocket, -lnsl and -linet dnl @@ -3257,7 +3313,7 @@ if test ${with_ldap-'no'} != "no"; then case "$host_os" in hpux*) AC_CHECK_LIB(Csup, main, [IBMLDAP_EXTRA=" -lCsup"]);; esac - AC_SEARCH_LIBS(ldap_init, "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}", [ + AC_SEARCH_LIBS(ldap_init, "ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}" "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}", [ test "$ac_res" != "none required" && LDAP_LIBS="$ac_res" found=yes ]) @@ -3268,10 +3324,17 @@ if test ${with_ldap-'no'} != "no"; then LIBS="${_LIBS} ${LDAP_LIBS}" dnl check if we need to link with -llber for ber_set_option OLIBS="$LIBS" - AC_SEARCH_LIBS([ber_set_option], [lber], [found=yes], [found=no]) - if test X"$found" = X"yes" -a X"$LIBS" != X"$OLIBS"; then - LDAP_LIBS="$LDAP_LIBS -llber" - fi + AC_MSG_CHECKING([whether lber.h defines LBER_OPT_DEBUG_LEVEL]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> +# include <lber.h>]], [[int opt=LBER_OPT_DEBUG_LEVEL;]])], [ + AC_MSG_RESULT([yes]) + AC_SEARCH_LIBS([ber_set_option], [lber], [found=yes], [found=no]) + if test X"$found" = X"yes" -a X"$LIBS" != X"$OLIBS"; then + LDAP_LIBS="$LDAP_LIBS -llber" + fi + ], [ + AC_MSG_RESULT([no]) + ]) dnl check if ldap.h includes lber.h for us AC_MSG_CHECKING([whether lber.h is needed]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> @@ -3329,7 +3392,7 @@ case "$lt_cv_dlopen" in if test "$enable_static_sudoers" = "yes"; then AC_DEFINE(STATIC_SUDOERS_PLUGIN) SUDO_OBJS="${SUDO_OBJS} preload.o" - SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la" + STATIC_SUDOERS="\$(top_builddir)/plugins/sudoers/sudoers.la" SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else @@ -3342,7 +3405,7 @@ case "$lt_cv_dlopen" in if test "$enable_static_sudoers" = "yes"; then AC_DEFINE(STATIC_SUDOERS_PLUGIN) SUDO_OBJS="${SUDO_OBJS} preload.o" - SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la" + STATIC_SUDOERS="\$(top_builddir)/plugins/sudoers/sudoers.la" SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else @@ -3356,7 +3419,7 @@ case "$lt_cv_dlopen" in fi # Preload sudoers module symbols SUDO_OBJS="${SUDO_OBJS} preload.o" - SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la" + STATIC_SUDOERS="\$(top_builddir)/plugins/sudoers/sudoers.la" LT_STATIC="" ;; esac @@ -3380,7 +3443,8 @@ if test "$utmp_style" = "LEGACY"; then SUDO_PATH_UTMP fi SUDO_LOGFILE -SUDO_TIMEDIR +SUDO_RUNDIR +SUDO_VARDIR SUDO_IO_LOGDIR dnl @@ -3744,7 +3808,7 @@ test "$sysconfdir" = '${prefix}/etc' -a X"$with_stow" != X"yes" && sysconfdir='/ dnl dnl Substitute into the Makefile and man pages dnl -AC_CONFIG_FILES([Makefile common/Makefile compat/Makefile doc/Makefile include/Makefile src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers]) +AC_CONFIG_FILES([Makefile common/Makefile compat/Makefile doc/Makefile include/Makefile init.d/aix.sh init.d/hpux.sh src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers]) AC_OUTPUT dnl @@ -3763,6 +3827,21 @@ if test "$with_pam" = "yes"; then ;; esac fi +dnl +dnl Warn user if they may need to clear rundir manually. +dnl +case "$rundir" in + /var/run*) + clear_rundir=0 + ;; + *) + clear_rundir=1 + ;; +esac +if test $clear_rundir -eq 1; then + AC_MSG_NOTICE([Warning: the $rundir/ts directory must be cleared at boot time.]) + AC_MSG_NOTICE([ You may need to create a startup item to do this.]) +fi dnl dnl Autoheader templates @@ -3796,6 +3875,7 @@ AH_TEMPLATE(HAVE_GETSPNAM, [Define to 1 if you have the `getspnam' function (SVR AH_TEMPLATE(HAVE_GETSPWUID, [Define to 1 if you have the `getspwuid' function. (HP-UX <= 9.X shadow passwords).]) AH_TEMPLATE(HAVE_GSS_KRB5_CCACHE_NAME, [Define to 1 if you have the `gss_krb5_ccache_name' function.]) AH_TEMPLATE(HAVE_HEIMDAL, [Define to 1 if your Kerberos is Heimdal.]) +AH_TEMPLATE(HAVE_INET_PTON, [Define to 1 if you have the `inet_pton' function.]) AH_TEMPLATE(HAVE_ISCOMSEC, [Define to 1 if you have the `iscomsec' function. (HP-UX >= 10.x check for shadow enabled).]) AH_TEMPLATE(HAVE_ISSECURE, [Define to 1 if you have the `issecure' function. (SunOS 4.x check for shadow enabled).]) AH_TEMPLATE(HAVE_KERB5, [Define to 1 if you use Kerberos V.]) @@ -3848,6 +3928,7 @@ AH_TEMPLATE(USE_ADMIN_FLAG, [Define to 1 if you want to create ~/.sudo_as_admin_ AH_TEMPLATE(USE_INSULTS, [Define to 1 if you want to insult the user for entering an incorrect password.]) AH_TEMPLATE(USE_STOW, [Define to 1 if you use GNU stow packaging.]) AH_TEMPLATE(WITHOUT_PASSWD, [Define to avoid using the passwd/shadow file for authentication.]) +AH_TEMPLATE(clockid_t, [Define to `int' if <time.h> does not define.]) AH_TEMPLATE(sig_atomic_t, [Define to `int' if <signal.h> does not define.]) AH_TEMPLATE(socklen_t, [Define to `unsigned int' if <sys/socket.h> doesn't define.]) AH_TEMPLATE(HAVE_STRUCT_UTMP_UT_EXIT, [Define to 1 if `ut_exit' is a member of `struct utmp'.]) @@ -3873,42 +3954,7 @@ dnl AH_TOP([#ifndef _SUDO_CONFIG_H #define _SUDO_CONFIG_H]) -AH_BOTTOM([/* - * Macros to convert ctime and mtime into timevals. - */ -#define timespec2timeval(_ts, _tv) do { \ - (_tv)->tv_sec = (_ts)->tv_sec; \ - (_tv)->tv_usec = (_ts)->tv_nsec / 1000; \ -} while (0) - -#ifdef HAVE_ST_MTIM -# ifdef HAVE_ST__TIM -# define ctim_get(_x, _y) timespec2timeval(&(_x)->st_ctim.st__tim, (_y)) -# define mtim_get(_x, _y) timespec2timeval(&(_x)->st_mtim.st__tim, (_y)) -# else -# define ctim_get(_x, _y) timespec2timeval(&(_x)->st_ctim, (_y)) -# define mtim_get(_x, _y) timespec2timeval(&(_x)->st_mtim, (_y)) -# endif -#else -# ifdef HAVE_ST_MTIMESPEC -# define ctim_get(_x, _y) timespec2timeval(&(_x)->st_ctimespec, (_y)) -# define mtim_get(_x, _y) timespec2timeval(&(_x)->st_mtimespec, (_y)) -# else -# define ctim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0) -# define mtim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0) -# endif /* HAVE_ST_MTIMESPEC */ -#endif /* HAVE_ST_MTIM */ - -#ifdef __GNUC__ -# define ignore_result(x) do { \ - __typeof__(x) y = (x); \ - (void)y; \ -} while(0) -#else -# define ignore_result(x) (void)(x) -#endif - -/* BSD compatibility on some SVR4 systems. */ +AH_BOTTOM([/* BSD compatibility on some SVR4 systems. */ #ifdef __svr4__ # define BSD_COMP #endif /* __svr4__ */ diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS index eb6212e31..3701a7040 100644 --- a/doc/CONTRIBUTORS +++ b/doc/CONTRIBUTORS @@ -44,6 +44,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws. Frysinger, Mike G., Daniel Richard Gailly, Jean-loup + García-Fontes, Walter Gelman, Stephen Gerraty, Simon J. Graber, Stephane @@ -123,6 +124,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws. Saucier, Jean-Francois Schoenfeld, Patrick Schuring, Arno + Schwarze, Ingo Scott, Dougal Sieger, Nick Simon, Thor Lancelot diff --git a/doc/LICENSE b/doc/LICENSE index eadb62c59..ef02290d1 100644 --- a/doc/LICENSE +++ b/doc/LICENSE @@ -129,6 +129,24 @@ The file getopt_long.c bears the following license: * POSSIBILITY OF SUCH DAMAGE. */ +The file inet_pton.c bears the following license: + +/* Copyright (c) 1996 by Internet Software Consortium. + * + * 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 INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM 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. + */ + The embedded copy of zlib bears the following license: Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler diff --git a/doc/Makefile.in b/doc/Makefile.in index 5ed4f0144..1372a3439 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -343,6 +343,8 @@ uninstall: $(DESTDIR)$(mandirform)/sudoers.$(mansectform) \ $(DESTDIR)$(mandirform)/sudoers.ldap.$(mansectform) +cppcheck: + check: clean: diff --git a/doc/UPGRADE b/doc/UPGRADE index 2dad6453d..026faaeac 100644 --- a/doc/UPGRADE +++ b/doc/UPGRADE @@ -1,6 +1,36 @@ Notes on upgrading from an older release ======================================== +o Upgrading from a version prior to 1.8.10: + + The time stamp file format has changed in sudo 1.8.10. There + is now a single time stamp file for each user, even when tty-based + time stamps are used. Each time stamp file may contain multiple + records to support tty-based time stamps as well as multiple + authentication users. On systems that support it, monotonic + time is stored instead of wall clock time. As a result, it is + important that the time stamp files not persist when the system + reboots. For this reason, ther default location for the time + stamp files has changed back to a directory located in /var/run. + Systems that do not have /var/run (e.g. AIX) or that do not clear + it on boot (e.g. HP-UX) will need to clear the time stamp + directory via a startup script. Such a script is installed by + default on AIX and HP-UX systems. + + Because there is now a single time stamp file per user, the -K + option will remove all of the user's time stamps, not just the + time stamp for the current terminal. + + Lecture status is now stored separatedly from the time stamps + in a separate directory: /var/db/sudo/lectured, /var/lib/sudo/lectured + or /var/adm/sudo/lectured depending on what is present on the + system. + + LDAP-based sudoers now uses a default search filter of + (objectClass=sudoRole) for more efficient queries. It is + possible to disable the default search filter by specifying + SUDOERS_SEARCH_FILTER in ldap.conf but omitting a value. + o Upgrading from a version prior to 1.8.7: Sudo now stores its libexec files in a "sudo" sub-directory diff --git a/doc/sudo.cat b/doc/sudo.cat index 334de093f..4af4179ba 100644 --- a/doc/sudo.cat +++ b/doc/sudo.cat @@ -9,10 +9,10 @@ SSYYNNOOPPSSIISS 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] [VVAARR=_v_a_l_u_e] [--ii | --ss] + [--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] 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] file ... + [--pp _p_r_o_m_p_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 @@ -90,7 +90,7 @@ DDEESSCCRRIIPPTTIIOONN Run the command with resource limits and scheduling priority of the specified login _c_l_a_s_s. The _c_l_a_s_s argument can be either a class name as defined in _/_e_t_c_/_l_o_g_i_n_._c_o_n_f, or a - single `-' character. If _c_l_a_s_s is -, the default login class + single `-' character. If _c_l_a_s_s is --, the default login class of the target user will be used. Otherwise, the command must be run as the superuser (user ID 0), or ssuuddoo must be run from a shell that is already running as the superuser. If the @@ -302,8 +302,8 @@ DDEESSCCRRIIPPTTIIOONN command line arguments. Environment variables to be set for the command may also be passed on the - command line in the form of VVAARR=_v_a_l_u_e, e.g. - LLDD__LLIIBBRRAARRYY__PPAATTHH=_/_u_s_r_/_l_o_c_a_l_/_p_k_g_/_l_i_b. Variables passed on the command line + command line in the form of _V_A_R=_v_a_l_u_e, e.g. + LD_LIBRARY_PATH=_/_u_s_r_/_l_o_c_a_l_/_p_k_g_/_l_i_b. Variables passed on the command line are subject to restrictions imposed by the security policy plugin. The _s_u_d_o_e_r_s policy subjects variables passed on the command line to the same restrictions as normal environment variables with one important @@ -582,4 +582,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 December 8, 2013 Sudo 1.8.9 +Sudo 1.8.10 February 15, 2014 Sudo 1.8.10 diff --git a/doc/sudo.conf.cat b/doc/sudo.conf.cat index 525b09f05..e02629f11 100644 --- a/doc/sudo.conf.cat +++ b/doc/sudo.conf.cat @@ -204,6 +204,21 @@ DDEESSCCRRIIPPTTIIOONN This setting is only available in ssuuddoo version 1.8.7 and higher. + probe_interfaces + By default, ssuuddoo will probe the system's network interfaces and + pass the IP address of each enabled interface to the policy + plugin. This makes it possible for the plugin to match rules + based on the IP address without having to query DNS. On Linux + systems with a large number of virtual interfaces, this may + take a non-negligible amount of time. If IP-based matching is + not required, network interface probing can be disabled as + follows: + + Set probe_interfaces false + + This setting is only available in ssuuddoo version 1.8.10 and + higher. + DDeebbuugg ffllaaggss ssuuddoo versions 1.8.4 and higher support a flexible debugging framework that can help track down what ssuuddoo is doing internally if there is a @@ -376,4 +391,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 December 4, 2013 Sudo 1.8.9 +Sudo 1.8.10 January 22, 2014 Sudo 1.8.10 diff --git a/doc/sudo.conf.man.in b/doc/sudo.conf.man.in index 5721df48c..59bb5ddba 100644 --- a/doc/sudo.conf.man.in +++ b/doc/sudo.conf.man.in @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudo.conf.mdoc.in .\" -.\" Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> +.\" Copyright (c) 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -16,7 +16,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDO" "5" "December 4, 2013" "Sudo @PACKAGE_VERSION@" "OpenBSD Programmer's Manual" +.TH "SUDO" "5" "January 22, 2014" "Sudo @PACKAGE_VERSION@" "OpenBSD Programmer's Manual" .nh .if n .ad l .SH "NAME" @@ -57,13 +57,13 @@ and the plugin. .PP The pound sign -(`#') +(\(oq#\(cq) is used to indicate a comment. Both the comment character and any text after it, up to the end of the line, are ignored. .PP Long lines can be continued with a backslash -(`\e') +(\(oq\e\(cq) as the last character on the line. Note that leading white space is removed from the beginning of lines even when the continuation character is used. @@ -79,7 +79,7 @@ are silently ignored. The \fBsudo.conf\fR file is always parsed in the -``\fRC\fR'' +\(lq\fRC\fR\(rq locale. .SS "Plugin configuration" \fBsudo\fR @@ -269,17 +269,17 @@ itself are disabled by default. To aid in debugging \fBsudo\fR crashes, you may wish to re-enable core dumps by setting -``disable_coredump'' +\(lqdisable_coredump\(rq to false in \fBsudo.conf\fR as follows: -.RS .nf .sp -.RS 6n +.RS 16n Set disable_coredump false .RE .fi +.RS 10n .sp Note that most operating systems disable core dumps from setuid programs, including @@ -297,9 +297,7 @@ command is used to configure core dump behavior. This setting is only available in \fBsudo\fR version 1.8.4 and higher. -.PP .RE -.PD 0 .TP 10n group_source \fBsudo\fR @@ -310,9 +308,10 @@ with NFS). On systems with the getconf(1) utility, running: -.RS 6n +.RS 16n getconf NGROUPS_MAX .RE +.RS 10n will return the maximum number of groups. .sp However, it is still possible to be a member of a larger number of @@ -333,15 +332,13 @@ setting allows the administrator to change this default behavior. Supported values for \fIgroup_source\fR are: -.RS -.PD .TP 10n 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'' +\(lqstatic\(rq in that it does not reflect changes to the group database made after the user logs in. This was the default behavior prior to @@ -351,7 +348,7 @@ This was the default behavior prior to dynamic Always query the group database directly. It is -``dynamic'' +\(lqdynamic\(rq 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 @@ -376,7 +373,7 @@ For example, to cause to only use the kernel's static list of groups for the user: .nf .sp -.RS 6n +.RS 16n Set group_source static .RE .fi @@ -384,9 +381,7 @@ Set group_source static This setting is only available in \fBsudo\fR version 1.8.7 and higher. -.PP .RE -.PD 0 .TP 10n max_groups The maximum number of user groups to retrieve from the group database. @@ -404,7 +399,29 @@ do not indicate an error when there is a lack of space. This setting is only available in \fBsudo\fR version 1.8.7 and higher. -.PD +.TP 10n +probe_interfaces +By default, +\fBsudo\fR +will probe the system's network interfaces and pass the IP address +of each enabled interface to the policy plugin. This makes it +possible for the plugin to match rules based on the IP address +without having to query DNS. On Linux systems with a large number +of virtual interfaces, this may take a non-negligible amount of time. +If IP-based matching is not required, network interface probing +can be disabled as follows: +.nf +.sp +.RS 16n +Set probe_interfaces false +.RE +.fi +.RS 10n +.sp +This setting is only available in +\fBsudo\fR +version 1.8.10 and higher. +.RE .SS "Debug flags" \fBsudo\fR versions 1.8.4 and higher support a flexible debugging framework @@ -427,7 +444,7 @@ plugin is \fIsubsystem\fR@\fIpriority\fR but a plugin is free to use a different format so long as it does not include a comma -(`\&,'). +(\(oq\&,\(cq). .PP For example: .nf @@ -636,7 +653,7 @@ search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/sudo.conf.mdoc.in b/doc/sudo.conf.mdoc.in index b4eeab6df..8615bf3a5 100644 --- a/doc/sudo.conf.mdoc.in +++ b/doc/sudo.conf.mdoc.in @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> +.\" Copyright (c) 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd December 4, 2013 +.Dd January 22, 2014 .Dt SUDO @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -360,6 +360,23 @@ do not indicate an error when there is a lack of space. This setting is only available in .Nm sudo version 1.8.7 and higher. +.It probe_interfaces +By default, +.Nm sudo +will probe the system's network interfaces and pass the IP address +of each enabled interface to the policy plugin. This makes it +possible for the plugin to match rules based on the IP address +without having to query DNS. On Linux systems with a large number +of virtual interfaces, this may take a non-negligible amount of time. +If IP-based matching is not required, network interface probing +can be disabled as follows: +.Bd -literal -offset indent +Set probe_interfaces false +.Ed +.Pp +This setting is only available in +.Nm sudo +version 1.8.10 and higher. .El .Ss Debug flags .Nm sudo @@ -380,7 +397,7 @@ debug flag syntax used by and the .Nm sudoers plugin is -.Em subsystem Ns No @ Ns Em priority +.Em subsystem Ns @ Ns Em priority but a plugin is free to use a different format so long as it does not include a comma .Pq Ql \&, . diff --git a/doc/sudo.man.in b/doc/sudo.man.in index 5ada7102f..fbd4136fe 100644 --- a/doc/sudo.man.in +++ b/doc/sudo.man.in @@ -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-2013 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2014 .\" Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" 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" "@mansectsu@" "December 8, 2013" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "February 15, 2014" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -31,7 +31,7 @@ .SH "SYNOPSIS" .HP 5n \fBsudo\fR -\fB\-h\fR | \fB\-K\fR | \fB\-k\fR | \fB\-V\fR +\fB\-h\fR\ |\ \fB\-K\fR\ |\ \fB\-k\fR\ |\ \fB\-V\fR .PD 0 .HP 5n \fBsudo\fR @@ -67,7 +67,7 @@ [\fB\-r\fR\ \fIrole\fR] [\fB\-t\fR\ \fItype\fR] [\fB\-u\fR\ \fIuser\fR] -[\fBVAR\fR=\fIvalue\fR] +[\fIVAR\fR=\fIvalue\fR] [\fB\-i\fR\ |\ \fB\-s\fR] [\fIcommand\fR] .br @@ -81,7 +81,7 @@ [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] [\fB\-u\fR\ \fIuser\fR] -file ... +\fIfile\ ...\fR .PD .SH "DESCRIPTION" \fBsudo\fR @@ -170,21 +170,19 @@ sudo.conf(@mansectform@) contains a line specifying the askpass program, that value will be used. For example: -.RS .nf .sp -.RS 4n +.RS 16n # Path to askpass helper program Path askpass /usr/X11R6/bin/ssh-askpass .RE .fi +.RS 12n .sp If no askpass program is available, \fBsudo\fR will exit with an error. -.PP .RE -.PD 0 .TP 12n \fB\-a\fR \fItype\fR, \fB\--auth-type\fR=\fItype\fR Use the specified BSD authentication @@ -193,11 +191,10 @@ when validating the user, if allowed by \fI/etc/login.conf\fR. The system administrator may specify a list of sudo-specific authentication methods by adding an -``auth-sudo'' +\(lqauth-sudo\(rq entry in \fI/etc/login.conf\fR. This option is only available on systems that support BSD authentication. -.PD .TP 12n \fB\-b\fR, \fB\--background\fR Run the given command in the background. @@ -234,12 +231,12 @@ The argument can be either a class name as defined in \fI/etc/login.conf\fR, or a single -`\-' +\(oq\-\(cq character. If \fIclass\fR is -\fR-\fR, +\fB-\fR, the default login class of the target user will be used. Otherwise, the command must be run as the superuser (user ID 0), or \fBsudo\fR @@ -262,7 +259,7 @@ In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the following steps are taken: -.RS +.RS 13n .TP 5n 1. Temporary copies are made of the files to be edited with the owner @@ -292,7 +289,9 @@ option is used. 3. If they have been modified, the temporary files are copied back to their original location and the temporary versions are removed. -.PP +.RE +.RS 12n +.sp If the specified file does not exist, it will be created. Note that unlike most commands run by \fIsudo\fR, @@ -302,9 +301,7 @@ If, for some reason, is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file. -.PP .RE -.PD 0 .TP 12n \fB\-g\fR \fIgroup\fR, \fB\--group\fR=\fIgroup\fR Run the command with the primary group set to @@ -316,20 +313,19 @@ The may be either a group name or a numeric group ID (GID) prefixed with the -`#' +\(oq#\(cq character (e.g. \fR#0\fR for GID 0). When running a command as a GID, many shells require that the -`#' +\(oq#\(cq be escaped with a backslash -(`\e'). +(\(oq\e\(cq). If no \fB\-u\fR option is specified, the command will be run as the invoking user. In either case, the primary group will be set to \fIgroup\fR. -.PD .TP 12n \fB\-H\fR, \fB\--set-home\fR Request that the security policy set the @@ -451,11 +447,13 @@ the target user. \fB\-p\fR \fIprompt\fR, \fB\--prompt\fR=\fIprompt\fR Use a custom password prompt with optional escape sequences. The following percent -(`%') +(\(oq%\(cq) escape sequences are supported by the \fIsudoers\fR policy: -.RS +.PP +.RS 12n +.PD 0 .TP 4n \fR%H\fR expanded to the host name including the domain name (on if the @@ -463,6 +461,7 @@ machine's host name is fully qualified or the \fIfqdn\fR option is set in sudoers(@mansectform@)) +.PD .TP 4n \fR%h\fR expanded to the local host name without the domain name @@ -488,9 +487,9 @@ expanded to the invoking user's login name .TP 4n \fR%%\fR two consecutive -`%' +\(oq%\(cq characters are collapsed into a single -`%' +\(oq%\(cq character .PP The custom prompt will override the system password prompt on systems that @@ -498,15 +497,12 @@ support PAM unless the \fIpassprompt_override\fR flag is disabled in \fIsudoers\fR. -.PP .RE -.PD 0 .TP 12n \fB\-r\fR \fIrole\fR, \fB\--role\fR=\fIrole\fR Run the command with an SELinux security context that includes the specified \fIrole\fR. -.PD .TP 12n \fB\-S\fR, \fB\--stdin\fR Write the prompt to the standard error and read the password from the @@ -554,14 +550,14 @@ The may be either a user name or a numeric user ID (UID) prefixed with the -`#' +\(oq#\(cq character (e.g. \fR#0\fR for UID 0). When running commands as a UID, many shells require that the -`#' +\(oq#\(cq be escaped with a backslash -(`\e'). +(\(oq\e\(cq). Some security policies may restrict UIDs to those listed in the password database. The @@ -604,9 +600,9 @@ should stop processing command line arguments. .PP Environment variables to be set for the command may also be passed on the command line in the form of -\fBVAR\fR=\fIvalue\fR, +\fIVAR\fR=\fIvalue\fR, e.g.\& -\fBLD_LIBRARY_PATH\fR=\fI/usr/local/pkg/lib\fR. +\fRLD_LIBRARY_PATH\fR=\fI/usr/local/pkg/lib\fR. Variables passed on the command line are subject to restrictions imposed by the security policy plugin. The @@ -686,7 +682,7 @@ process waits until the command has 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'') +(\(lqpty\(rq) is created and a second \fBsudo\fR process is used to relay job control signals between the user's @@ -694,7 +690,7 @@ 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'' +\(lqorphaned process group\(rq 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, @@ -840,7 +836,7 @@ This should not happen under normal circumstances. The most common reason for stat(2) to return -``permission denied'' +\(lqpermission denied\(rq is if you are running an automounter and one of the directories in your \fRPATH\fR @@ -894,7 +890,7 @@ re-enabled for the command that is run). To aid in debugging \fBsudo\fR crashes, you may wish to re-enable core dumps by setting -``disable_coredump'' +\(lqdisable_coredump\(rq to false in the sudo.conf(@mansectform@) file as follows: @@ -1146,7 +1142,7 @@ search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/sudo.mdoc.in b/doc/sudo.mdoc.in index 0309d00ef..28ba8e0da 100644 --- a/doc/sudo.mdoc.in +++ b/doc/sudo.mdoc.in @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2013 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2014 .\" Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" 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 December 8, 2013 +.Dd February 15, 2014 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -28,109 +28,49 @@ .Nd execute a command as another user .Sh SYNOPSIS .Nm sudo -.Fl h No | Fl K No | Fl k No | Fl V +.Fl h | K | k | V .Nm sudo .Fl v .Op Fl AknS -.Bk -words .Op Fl a Ar type -.Ek -.Bk -words .Op Fl g Ar group -.Ek -.Bk -words .Op Fl h Ar host -.Ek -.Bk -words .Op Fl p Ar prompt -.Ek -.Bk -words .Op Fl u Ar user -.Ek .Nm sudo .Fl l .Op Fl AknS -.Bk -words .Op Fl a Ar type -.Ek -.Bk -words .Op Fl g Ar group -.Ek -.Bk -words .Op Fl h Ar host -.Ek -.Bk -words .Op Fl p Ar prompt -.Ek -.Bk -words .Op Fl U Ar user -.Ek -.Bk -words .Op Fl u Ar user -.Ek .Op Ar command .Nm sudo .Op Fl AbEHnPS -.Bk -words .Op Fl a Ar type -.Ek -.Bk -words .Op Fl C Ar num -.Ek -.Bk -words .Op Fl c Ar class -.Ek -.Bk -words .Op Fl g Ar group -.Ek -.Bk -words .Op Fl h Ar host -.Ek -.Bk -words .Op Fl p Ar prompt -.Ek -.Bk -words .Op Fl r Ar role -.Ek -.Bk -words .Op Fl t Ar type -.Ek -.Bk -words .Op Fl u Ar user -.Ek -.Bk -words -.Op Sy VAR Ns = Ns Ar value -.Ek -.Bk -words -.Op Fl i No | Fl s -.Ek +.Op Ar VAR Ns = Ns Ar value +.Op Fl i | s .Op Ar command .Nm sudoedit .Op Fl AknS -.Bk -words .Op Fl a Ar type -.Ek -.Bk -words .Op Fl C Ar num -.Ek -.Bk -words .Op Fl c Ar class -.Ek -.Bk -words .Op Fl g Ar group -.Ek -.Bk -words .Op Fl h Ar host -.Ek -.Bk -words .Op Fl p Ar prompt -.Ek -.Bk -words .Op Fl u Ar user -.Ek -.Bk -words -file ... -.Ek +.Ar .Sh DESCRIPTION .Nm sudo allows a permitted user to execute a @@ -205,7 +145,7 @@ Normally, if .Nm sudo requires a password, it will read it from the user's terminal. If the -.Fl A No ( Em askpass Ns No ) +.Fl A Pq Em askpass option is specified, a (possibly graphical) helper program is executed to read the user's password and output the password to the standard output. @@ -226,7 +166,7 @@ Path askpass /usr/X11R6/bin/ssh-askpass If no askpass program is available, .Nm sudo will exit with an error. -.It Fl a Ar type , Fl -auth-type Ns No = Ns Ar type +.It Fl a Ar type , Fl -auth-type Ns = Ns Ar type Use the specified BSD authentication .Ar type when validating the user, if allowed by @@ -244,7 +184,7 @@ background processes started by .Nm sudo . Most interactive commands will fail to work properly in background mode. -.It Fl C Ar num , Fl -close-from Ns No = Ns Ar num +.It Fl C Ar num , Fl -close-from Ns = Ns Ar num Close all file descriptors greater than or equal to .Ar num before executing a command. @@ -261,7 +201,7 @@ policy only permits use of the option when the administrator has enabled the .Em closefrom_override option. -.It Fl c Ar class , Fl -login-class Ns No = Ns Ar class +.It Fl c Ar class , Fl -login-class Ns = Ns Ar class Run the command with resource limits and scheduling priority of the specified login .Ar class . @@ -275,7 +215,7 @@ character. If .Ar class is -.Li - , +.Cm - , the default login class of the target user will be used. Otherwise, the command must be run as the superuser (user ID 0), or .Nm sudo @@ -334,7 +274,7 @@ If, for some reason, is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file. -.It Fl g Ar group , Fl -group Ns No = Ns Ar group +.It Fl g Ar group , Fl -group Ns = Ns Ar group Run the command with the primary group set to .Ar group instead of the primary group specified by the target @@ -365,7 +305,7 @@ user's password database entry. Depending on the policy, this may be the default behavior. .It Fl h , -help Display a short help message to the standard output and exit. -.It Fl h Ar host , Fl -host Ns No = Ns Ar host +.It Fl h Ar host , Fl -host Ns = Ns Ar host Run the command on the specified .Ar host if the security policy plugin supports remote commands. @@ -465,7 +405,7 @@ policy will initialize the group vector to the list of groups the target user is a member of. The real and effective group IDs, however, are still set to match the target user. -.It Fl p Ar prompt , Fl -prompt Ns No = Ns Ar prompt +.It Fl p Ar prompt , Fl -prompt Ns = Ns Ar prompt Use a custom password prompt with optional escape sequences. The following percent .Pq Ql % @@ -510,7 +450,7 @@ support PAM unless the .Em passprompt_override flag is disabled in .Em sudoers . -.It Fl r Ar role , Fl -role Ns No = Ns Ar role +.It Fl r Ar role , Fl -role Ns = Ns Ar role Run the command with an SELinux security context that includes the specified .Ar role . @@ -528,14 +468,14 @@ via the shell's .Fl c option. If no command is specified, an interactive shell is executed. -.It Fl t Ar type , Fl -type Ns No = Ns Ar type +.It Fl t Ar type , Fl -type Ns = Ns Ar type Run the command with an SELinux security context that includes the specified .Ar type . If no .Ar type is specified, the default type is derived from the role. -.It Fl U Ar user , Fl -other-user Ns No = Ns Ar user +.It Fl U Ar user , Fl -other-user Ns = Ns Ar user Used in conjunction with the .Fl l option to list the privileges for @@ -547,7 +487,7 @@ The policy only allows root or a user with the .Li ALL privilege on the current host to use this option. -.It Fl u Ar user , Fl -user Ns No = Ns Ar user +.It Fl u Ar user , Fl -user Ns = Ns Ar user Run the command as a user other than the default target user (usually .Em root ). @@ -604,9 +544,9 @@ should stop processing command line arguments. .Pp Environment variables to be set for the command may also be passed on the command line in the form of -.Sy VAR Ns No = Ns Em value , +.Ar VAR Ns = Ns Ar value , e.g.\& -.Sy LD_LIBRARY_PATH Ns No = Ns Em /usr/local/pkg/lib . +.Ev LD_LIBRARY_PATH Ns = Ns Pa /usr/local/pkg/lib . Variables passed on the command line are subject to restrictions imposed by the security policy plugin. The @@ -863,7 +803,7 @@ If a user runs a command such as or .Li sudo sh , subsequent commands run from that shell are not subject to -.Nm sudo Ns No 's +.Nm sudo Ns 's security policy. The same is true for commands that offer shell escapes (including most editors). @@ -1060,7 +1000,7 @@ if that user is allowed to run arbitrary commands via .Nm sudo . Also, many programs (such as editors) allow the user to run commands via shell escapes, thus avoiding -.Nm sudo Ns No 's +.Nm sudo Ns 's checks. However, on most systems it is possible to prevent shell escapes with the .Xr sudoers @mansectform@ diff --git a/doc/sudo_plugin.cat b/doc/sudo_plugin.cat index 258045228..7aa1d59ff 100644 --- a/doc/sudo_plugin.cat +++ b/doc/sudo_plugin.cat @@ -1464,4 +1464,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 December 20, 2013 Sudo 1.8.9 +Sudo 1.8.10 December 20, 2013 Sudo 1.8.10 diff --git a/doc/sudo_plugin.man.in b/doc/sudo_plugin.man.in index 1bc17ce5b..6a698b10a 100644 --- a/doc/sudo_plugin.man.in +++ b/doc/sudo_plugin.man.in @@ -111,15 +111,15 @@ to determine the API version the plugin was built against. .TP 6n open -.RS .nf -.RS 0n +.RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t plugin_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[]); .RE .fi +.RS 6n .sp Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error. @@ -160,7 +160,7 @@ settings A vector of user-supplied \fBsudo\fR settings in the form of -``name=value'' +\(lqname=value\(rq strings. The vector is terminated by a \fRNULL\fR @@ -175,20 +175,23 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one itself but the \fIvalue\fR might. -.RS +.PP +.RS 6n +.PD 0 .TP 6n bsdauth_type=string Authentication type, if specified by the \fB\-a\fR flag, to use on systems where BSD authentication is supported. +.PD .TP 6n closefrom=number If specified, the user has requested via the @@ -219,7 +222,7 @@ plugin is \fIsubsystem\fR@\fIpriority\fR but the plugin is free to use a different format so long as it does not include a comma -(`,\&'). +(\(oq,\&\(cq). There is not currently a way to specify a set of debug flags specific to the plugin--the flags are shared by \fBsudo\fR @@ -275,13 +278,13 @@ sudo.conf(@mansectform@). network_addrs=list A space-separated list of IP network addresses and netmasks in the form -``addr/netmask'', +\(lqaddr/netmask\(rq, e.g.\& -``192.168.1.2/255.255.255.0''. +\(lq192.168.1.2/255.255.255.0\(rq. The address and netmask pairs may be either IPv4 or IPv6, depending on what the operating system supports. If the address contains a colon -(`:\&'), +(\(oq:\&\(cq), it is an IPv6 address, else it is IPv4. .TP 6n noninteractive=bool @@ -316,9 +319,9 @@ based on the runas user. .TP 6n progname=string The command name that sudo was run as, typically -``sudo'' +\(lqsudo\(rq or -``sudoedit''. +\(lqsudoedit\(rq. .TP 6n prompt=string The prompt to use when requesting a password, if specified via @@ -392,13 +395,11 @@ section. .PP Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. -.PP .RE -.PD 0 .TP 6n user_info A vector of information about the user running the command in the form of -``name=value'' +\(lqname=value\(rq strings. The vector is terminated by a \fRNULL\fR @@ -409,19 +410,21 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one itself but the \fIvalue\fR might. -.RS -.PD +.PP +.RS 6n +.PD 0 .TP 6n cols=int The number of columns the user's terminal supports. If there is no terminal device available, a default value of 80 is used. +.PD .TP 6n cwd=string The user's current working directory. @@ -517,7 +520,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 -``\fRtty=\fR''. +\(lq\fRtty=\fR\(rq. .TP 6n uid=uid_t The real user ID of the user invoking @@ -526,14 +529,15 @@ The real user ID of the user invoking user=string The name of the user invoking \fBsudo\fR. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n user_env The user's environment in the form of a \fRNULL\fR-terminated vector of -``name=value'' +\(lqname=value\(rq strings. .sp When parsing @@ -541,26 +545,26 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one itself but the \fIvalue\fR might. -.PD +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n close .br -.RS .nf -.RS 0n +.RS 6n void (*close)(int exit_status, int error); .RE .fi +.RS 6n .sp The \fBclose\fR() @@ -569,7 +573,6 @@ function is called when the command being run by finishes. .sp The function arguments are as follows: -.PD .TP 6n exit_status The command's exit status, as returned by the @@ -610,17 +613,15 @@ list, the \fBsudo\fR front end may execute the command directly instead of running it as a child process. -.PP .RE -.PD 0 .TP 6n show_version -.RS .nf -.RS 0n +.RS 6n int (*show_version)(int verbose); .RE .fi +.RS 6n .sp The \fBshow_version\fR() @@ -637,20 +638,17 @@ or function using \fRSUDO_CONV_INFO_MSG\fR. If the user requests detailed version information, the verbose flag will be set. -.PD -.PP .RE -.PD 0 .TP 6n check_policy -.RS .nf -.RS 0n +.RS 6n int (*check_policy)(int argc, char * const argv[] char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[]); .RE .fi +.RS 6n .sp The \fBcheck_policy\fR() @@ -692,10 +690,10 @@ into \fIargv_out\fR, separated from the editor and its arguments by a -``\fR--\fR'' +\(lq\fR--\fR\(rq element. The -``\fR--\fR'' +\(lq\fR--\fR\(rq will be removed by \fBsudo\fR @@ -726,7 +724,6 @@ function with to present additional error information to the user. .sp The function arguments are as follows: -.PD .TP 6n argc The number of elements in @@ -749,7 +746,7 @@ Additional environment variables specified by the user on the command line in the form of a \fRNULL\fR-terminated vector of -``name=value'' +\(lqname=value\(rq 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. @@ -759,7 +756,7 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one @@ -769,7 +766,7 @@ might. .TP 6n command_info Information about the command being run in the form of -``name=value'' +\(lqname=value\(rq strings. These values are used by \fBsudo\fR @@ -781,10 +778,13 @@ which must be terminated with a pointer. The following values are recognized by \fBsudo\fR: -.RS +.PP +.RS 6n +.PD 0 .TP 6n chroot=string The root directory to use when running the command. +.PD .TP 6n closefrom=number If specified, @@ -1006,9 +1006,7 @@ will base the new entry on the invoking user's existing entry. .PP Unsupported values will be ignored. -.PP .RE -.PD 0 .TP 6n argv_out The @@ -1017,25 +1015,25 @@ argument vector to pass to the execve(2) system call when executing the command. The plugin is responsible for allocating and populating the vector. -.PD .TP 6n user_env_out The \fRNULL\fR-terminated environment vector to use when executing the command. The plugin is responsible for allocating and populating the vector. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n list -.RS .nf -.RS 0n +.RS 6n int (*list)(int verbose, const char *list_user, int argc, char * const argv[]); .RE .fi +.RS 6n .sp List available privileges for the invoking user. Returns 1 on success, 0 on failure and \-1 on error. @@ -1054,7 +1052,6 @@ or \fBplugin_printf\fR() function using \fRSUDO_CONV_INFO_MSG\fR, -.PD .TP 6n verbose Flag indicating whether to list in verbose mode or not. @@ -1083,17 +1080,18 @@ execve(2) system call. If the command is permitted by the policy, the fully-qualified path to the command should be displayed along with any command line arguments. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n validate -.RS .nf -.RS 0n +.RS 6n int (*validate)(void); .RE .fi +.RS 6n .sp The \fBvalidate\fR() @@ -1123,18 +1121,15 @@ function with \fRSUDO_CONF_ERROR_MSG\fR to present additional error information to the user. -.PD -.PP .RE -.PD 0 .TP 6n invalidate -.RS .nf -.RS 0n +.RS 6n void (*invalidate)(int remove); .RE .fi +.RS 6n .sp The \fBinvalidate\fR() @@ -1161,18 +1156,15 @@ The function should be \fRNULL\fR if the plugin does not support credential caching. -.PD -.PP .RE -.PD 0 .TP 6n init_session -.RS .nf -.RS 0n +.RS 6n int (*init_session)(struct passwd *pwd, char **user_envp[); .RE .fi +.RS 6n .sp The \fBinit_session\fR() @@ -1205,7 +1197,7 @@ argument points to the environment the command will run in, in the form of a \fRNULL\fR-terminated vector of -``name=value'' +\(lqname=value\(rq strings. This is the same string passed back to the front end via the Policy Plugin's @@ -1241,19 +1233,16 @@ function with \fRSUDO_CONF_ERROR_MSG\fR to present additional error information to the user. -.PD -.PP .RE -.PD 0 .TP 6n register_hooks -.RS .nf -.RS 0n +.RS 6n void (*register_hooks)(int version, int (*register_hook)(struct sudo_hook *hook)); .RE .fi +.RS 6n .sp The \fBregister_hooks\fR() @@ -1296,19 +1285,16 @@ front end doesn't support API version 1.2 or higher, \fRregister_hooks\fR will not be called. -.PD -.PP .RE -.PD 0 .TP 6n deregister_hooks -.RS .nf -.RS 0n +.RS 6n void (*deregister_hooks)(int version, int (*deregister_hook)(struct sudo_hook *hook)); .RE .fi +.RS 6n .sp The \fBderegister_hooks\fR() @@ -1353,7 +1339,6 @@ version 1.2 or higher, \fRderegister_hooks\fR will not be called. .RE -.PD .PP \fIPolicy Plugin Version Macros\fR .nf @@ -1454,15 +1439,15 @@ to determine the API version the plugin was built against. .TP 6n open -.RS .nf -.RS 0n +.RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t plugin_printf, char * const settings[], char * const user_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[]); .RE .fi +.RS 6n .sp The \fBopen\fR() @@ -1532,7 +1517,7 @@ settings A vector of user-supplied \fBsudo\fR settings in the form of -``name=value'' +\(lqname=value\(rq strings. The vector is terminated by a \fRNULL\fR @@ -1547,7 +1532,7 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one @@ -1561,7 +1546,7 @@ section for a list of all possible settings. .TP 6n user_info A vector of information about the user running the command in the form of -``name=value'' +\(lqname=value\(rq strings. The vector is terminated by a \fRNULL\fR @@ -1572,7 +1557,7 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one @@ -1603,7 +1588,7 @@ user_env The user's environment in the form of a \fRNULL\fR-terminated vector of -``name=value'' +\(lqname=value\(rq strings. .sp When parsing @@ -1611,7 +1596,7 @@ When parsing the plugin should split on the \fBfirst\fR equal sign -(`=') +(\(oq=\(cq) since the \fIname\fR field will never include one @@ -1644,18 +1629,19 @@ by the front end before using \fIplugin_options\fR. Failure to do so may result in a crash. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n close .br -.RS .nf -.RS 0n +.RS 6n void (*close)(int exit_status, int error); .RE .fi +.RS 6n .sp The \fBclose\fR() @@ -1664,7 +1650,6 @@ function is called when the command being run by finishes. .sp The function arguments are as follows: -.PD .TP 6n exit_status The command's exit status, as returned by the @@ -1686,17 +1671,18 @@ system call. If the command was successfully executed, the value of \fRerror\fR is 0. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n show_version -.RS .nf -.RS 0n +.RS 6n int (*show_version)(int verbose); .RE .fi +.RS 6n .sp The \fBshow_version\fR() @@ -1713,18 +1699,15 @@ or function using \fRSUDO_CONV_INFO_MSG\fR. If the user requests detailed version information, the verbose flag will be set. -.PD -.PP .RE -.PD 0 .TP 6n log_ttyin -.RS .nf -.RS 0n +.RS 6n int (*log_ttyin)(const char *buf, unsigned int len); .RE .fi +.RS 6n .sp The \fBlog_ttyin\fR() @@ -1736,7 +1719,6 @@ Returns 1 if the data should be passed to the command, 0 if the data is rejected (which will terminate the command) or \-1 if an error occurred. .sp The function arguments are as follows: -.PD .TP 6n buf The buffer containing user input. @@ -1745,17 +1727,18 @@ len The length of \fIbuf\fR in bytes. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n log_ttyout -.RS .nf -.RS 0n +.RS 6n int (*log_ttyout)(const char *buf, unsigned int len); .RE .fi +.RS 6n .sp The \fBlog_ttyout\fR() @@ -1767,7 +1750,6 @@ Returns 1 if the data should be passed to the user, 0 if the data is rejected (which will terminate the command) or \-1 if an error occurred. .sp The function arguments are as follows: -.PD .TP 6n buf The buffer containing command output. @@ -1776,17 +1758,18 @@ len The length of \fIbuf\fR in bytes. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n log_stdin -.RS .nf -.RS 0n +.RS 6n int (*log_stdin)(const char *buf, unsigned int len); .RE .fi +.RS 6n .sp The \fBlog_stdin\fR() @@ -1800,7 +1783,6 @@ Returns 1 if the data should be passed to the command, 0 if the data is rejected (which will terminate the command) or \-1 if an error occurred. .sp The function arguments are as follows: -.PD .TP 6n buf The buffer containing user input. @@ -1809,17 +1791,18 @@ len The length of \fIbuf\fR in bytes. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n log_stdout -.RS .nf -.RS 0n +.RS 6n int (*log_stdout)(const char *buf, unsigned int len); .RE .fi +.RS 6n .sp The \fBlog_stdout\fR() @@ -1833,7 +1816,6 @@ Returns 1 if the data should be passed to the user, 0 if the data is rejected (which will terminate the command) or \-1 if an error occurred. .sp The function arguments are as follows: -.PD .TP 6n buf The buffer containing command output. @@ -1842,17 +1824,18 @@ len The length of \fIbuf\fR in bytes. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n log_stderr -.RS .nf -.RS 0n +.RS 6n int (*log_stderr)(const char *buf, unsigned int len); .RE .fi +.RS 6n .sp The \fBlog_stderr\fR() @@ -1866,7 +1849,6 @@ Returns 1 if the data should be passed to the user, 0 if the data is rejected (which will terminate the command) or \-1 if an error occurred. .sp The function arguments are as follows: -.PD .TP 6n buf The buffer containing command output. @@ -1875,16 +1857,16 @@ len The length of \fIbuf\fR in bytes. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n register_hooks See the \fIPolicy plugin API\fR section for a description of \fRregister_hooks\fR. -.PD .TP 6n deregister_hooks See the @@ -1991,7 +1973,9 @@ hook_type The \fRhook_type\fR field may be one of the following supported hook types: -.RS +.PP +.RS 6n +.PD 0 .TP 6n \fRSUDO_HOOK_SETENV\fR The C library @@ -2002,20 +1986,19 @@ The \fRhook_fn\fR field should be a function that matches the following typedef: -.RS .nf .sp -.RS 0n +.RS 6n typedef int (*sudo_hook_fn_setenv_t)(const char *name, const char *value, int overwrite, void *closure); .RE .fi +.RS 6n .sp If the registered hook does not match the typedef the results are unspecified. -.PP .RE -.PD 0 +.PD .TP 6n \fRSUDO_HOOK_UNSETENV\fR The C library @@ -2026,18 +2009,13 @@ The \fRhook_fn\fR field should be a function that matches the following typedef: -.RS .nf .sp -.RS 0n +.RS 6n typedef int (*sudo_hook_fn_unsetenv_t)(const char *name, void *closure); .RE .fi -.PD -.PP -.RE -.PD 0 .TP 6n \fRSUDO_HOOK_GETENV\fR The C library @@ -2048,21 +2026,18 @@ The \fRhook_fn\fR field should be a function that matches the following typedef: -.RS .nf .sp -.RS 0n +.RS 6n typedef int (*sudo_hook_fn_getenv_t)(const char *name, char **value, void *closure); .RE .fi +.RS 6n .sp If the registered hook does not match the typedef the results are unspecified. -.PD -.PP .RE -.PD 0 .TP 6n \fRSUDO_HOOK_PUTENV\fR The C library @@ -2073,22 +2048,22 @@ The \fRhook_fn\fR field should be a function that matches the following typedef: -.RS .nf .sp -.RS 0n +.RS 6n typedef int (*sudo_hook_fn_putenv_t)(char *string, void *closure); .RE .fi +.RS 6n .sp If the registered hook does not match the typedef the results are unspecified. .RE -.PD +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n hook_fn sudo_hook_fn_t hook_fn; @@ -2109,11 +2084,13 @@ is passed as the last function parameter. This can be used to pass arbitrary data to the plugin's hook implementation. .sp The function return value may be one of the following: -.RS -.PD +.PP +.RS 6n +.PD 0 .TP 6n \fRSUDO_HOOK_RET_ERROR\fR The hook function encountered an error. +.PD .TP 6n \fRSUDO_HOOK_RET_NEXT\fR The hook completed without error, go on to the next hook (including @@ -2133,7 +2110,10 @@ hook that operates on a private copy of the environment but leaves \fRenviron\fR unchanged. +.PD 0 +.PP .RE +.PD .PP Note that it is very easy to create an infinite loop when hooking C library functions. @@ -2197,11 +2177,11 @@ to the policy plugin. A plugin may also accept a \fIrunas_user\fR in the form of -``user@hostname'' +\(lquser@hostname\(rq which will work with older versions of \fBsudo\fR. It is anticipated that remote commands will be supported by executing a -``helper'' +\(lqhelper\(rq program. The policy plugin should setup the execution environment such that the \fBsudo\fR @@ -2397,13 +2377,13 @@ to determine the API version the group plugin was built against. .TP 6n init -.RS .nf -.RS 0n +.RS 6n int (*init)(int version, sudo_printf_t plugin_printf, char *const argv[]); .RE .fi +.RS 6n .sp The \fBinit\fR() @@ -2446,17 +2426,18 @@ If no arguments were given, \fIargv\fR will be \fRNULL\fR. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n cleanup -.RS .nf -.RS 0n +.RS 6n void (*cleanup)(); .RE .fi +.RS 6n .sp The \fBcleanup\fR() @@ -2465,20 +2446,17 @@ function is called when has finished its group checks. The plugin should free any memory it has allocated and close open file handles. -.PD -.PP .RE -.PD 0 .TP 6n query .br -.RS .nf -.RS 0n +.RS 6n int (*query)(const char *user, const char *group, const struct passwd *pwd); .RE .fi +.RS 6n .sp The \fBquery\fR() @@ -2488,7 +2466,6 @@ is a member of \fIgroup\fR. .sp The function arguments are as follows: -.PD .TP 6n user The name of the user being looked up in the external group database. @@ -2508,7 +2485,10 @@ present in the password database, \fIpwd\fR will be \fRNULL\fR. +.PD 0 +.PP .RE +.PD .PP \fIGroup API Version Macros\fR .nf @@ -2627,7 +2607,7 @@ search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/sudo_plugin.mdoc.in b/doc/sudo_plugin.mdoc.in index 7e3dea29c..f63eb6e87 100644 --- a/doc/sudo_plugin.mdoc.in +++ b/doc/sudo_plugin.mdoc.in @@ -139,7 +139,7 @@ function that can be used by the plugin to interact with the user (see below). Returns 0 on success and \-1 on failure. .It plugin_printf A pointer to a -.Fn printf Ns No -style +.Fn printf Ns -style function that may be used to display informational or error messages (see below). Returns the number of characters printed on success and \-1 on failure. @@ -188,7 +188,7 @@ The plugin may optionally pass this, or another value, back in the list. .It debug_flags=string A comma-separated list of debug flags that correspond to -.Nm sudo Ns No 's +.Nm sudo Ns 's .Li Debug entry in .Xr sudo.conf @mansectform@ , @@ -200,7 +200,7 @@ The syntax used by and the .Nm sudoers plugin is -.Em subsystem Ns No @ Ns Em priority +.Em subsystem Ns @ Ns Em priority but the plugin is free to use a different format so long as it does not include a comma .Pq Ql ,\& . @@ -417,7 +417,7 @@ Any (non-comment) strings immediately after the plugin path are passed as arguments to the plugin. These arguments are split on a white space boundary and are passed to the plugin in the form of a -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated array of strings. If no arguments were specified, @@ -471,7 +471,7 @@ The name of the user invoking .El .It user_env The user's environment in the form of a -.Dv NULL Ns No -terminated vector of +.Dv NULL Ns -terminated vector of .Dq name=value strings. .Pp @@ -658,7 +658,7 @@ pointer. .It env_add Additional environment variables specified by the user on the command line in the form of a -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated vector of .Dq name=value strings. @@ -889,14 +889,14 @@ the invoking user's existing entry. Unsupported values will be ignored. .It argv_out The -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated argument vector to pass to the .Xr execve 2 system call when executing the command. The plugin is responsible for allocating and populating the vector. .It user_env_out The -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated environment vector to use when executing the command. The plugin is responsible for allocating and populating the vector. .El @@ -1046,7 +1046,7 @@ The .Em user_env argument points to the environment the command will run in, in the form of a -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated vector of .Dq name=value strings. @@ -1330,7 +1330,7 @@ The function returns 0 on success and \-1 on failure. .It plugin_printf A pointer to a -.Fn printf Ns No -style +.Fn printf Ns -style function that may be used by the .Fn show_version function to display version information (see @@ -1410,7 +1410,7 @@ wishes to run in the same form as what would be passed to the system call. .It user_env The user's environment in the form of a -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated vector of .Dq name=value strings. @@ -1432,7 +1432,7 @@ Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to the plugin in the form of a -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated array of strings. If no arguments were specified, .Em plugin_options @@ -1926,7 +1926,7 @@ The caller must include a trailing newline in if one is to be printed. .Pp A -.Fn printf Ns No -style +.Fn printf Ns -style function is also available that can be used to display informational or error messages to the user, which is usually more convenient for simple messages where no use input is required. @@ -1960,7 +1960,7 @@ typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); Pointers to the .Fn conversation and -.Fn printf Ns No -style +.Fn printf Ns -style functions are passed in to the plugin's .Fn open @@ -1994,7 +1994,7 @@ It is also useful as a maximum value for the function when clearing passwords filled in by the conversation function. .Pp The -.Fn printf Ns No -style +.Fn printf Ns -style function uses the same underlying mechanism as the .Fn conversation function but only supports @@ -2110,12 +2110,12 @@ major and minor version number of the group plugin API supported by .Nm sudoers . .It plugin_printf A pointer to a -.Fn printf Ns No -style +.Fn printf Ns -style function that may be used to display informational or error message to the user. Returns the number of characters printed on success and \-1 on failure. .It argv A -.Dv NULL Ns No -terminated +.Dv NULL Ns -terminated array of arguments generated from the .Em group_plugin option in diff --git a/doc/sudoers.cat b/doc/sudoers.cat index 0ca49e333..b297c5ef0 100644 --- a/doc/sudoers.cat +++ b/doc/sudoers.cat @@ -87,13 +87,15 @@ DDEESSCCRRIIPPTTIIOONN the _s_u_d_o_e_r_s lookup is still done for root, not the user specified by SUDO_USER. - _s_u_d_o_e_r_s uses time stamp files for credential caching. Once a user has - been authenticated, the time stamp is updated and the user may then use - sudo 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, _s_u_d_o_e_r_s uses a tty-based - time stamp which means that there is a separate time stamp for each of a - user's login sessions. 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. + _s_u_d_o_e_r_s uses per-user time stamp files for credential caching. Once a + user has been authenticated, a record is written containing the uid that + 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, _s_u_d_o_e_r_s 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. _s_u_d_o_e_r_s can log both successful and unsuccessful attempts (as well as errors) to syslog(3), a log file, or both. By default, _s_u_d_o_e_r_s will log @@ -815,6 +817,13 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS This flag is _o_n by default when ssuuddoo is compiled with zzlliibb support. + use_netgroups If set, netgroups (prefixed with `+'), may be used in + place of a user or host. For LDAP-based sudoers, + netgroup support requires an expensive substring match + on the server. If netgroups are not needed, this + option can be disabled to reduce the load on the LDAP + server. This flag is _o_n by default. + exec_background By default, ssuuddoo runs a command as the foreground process as long as ssuuddoo itself is running in the foreground. When the _e_x_e_c___b_a_c_k_g_r_o_u_n_d flag is enabled @@ -1120,13 +1129,15 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS This flag is _o_n by default. rootpw If set, ssuuddoo will prompt for the root password instead - of the password of the invoking user. This flag is _o_f_f - by default. + of the password of the invoking user when running a + command or editing a file. This flag is _o_f_f by + default. runaspw If set, ssuuddoo will prompt for the password of the user defined by the _r_u_n_a_s___d_e_f_a_u_l_t option (defaults to root) - instead of the password of the invoking user. This - flag is _o_f_f by default. + instead of the password of the invoking user when + running a command or editing a file. This flag is _o_f_f + by default. set_home If enabled and ssuuddoo is invoked with the --ss option the HOME environment variable will be set to the home @@ -1185,17 +1196,17 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS targetpw If set, ssuuddoo will prompt for the password of the user specified by the --uu option (defaults to root) instead - of the password of the invoking user. In addition, the - time stamp file name will include the target user's - name. Note that this flag precludes the use of a uid - not listed in the passwd database as an argument to the - --uu option. This flag is _o_f_f by default. + of the password of the invoking user when running a + command or editing a file. Note that this flag + precludes the use of a uid not listed in the passwd + database as an argument to the --uu option. This flag is + _o_f_f by default. tty_tickets If set, users must authenticate on a per-tty basis. - With this flag enabled, ssuuddoo will use a file named for - the tty the user is logged in on in the user's time - stamp directory. If disabled, the time stamp of the - directory is used instead. This flag is _o_n by default. + With this flag enabled, ssuuddoo will use a separate record + in the time stamp file for each tty. If disabled, a + single record is used for all login sessions. This + flag is _o_n by default. umask_override If set, ssuuddoo will set the umask as specified by _s_u_d_o_e_r_s without modification. This makes it possible to @@ -1357,6 +1368,14 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS will be truncated and overwritten unless _i_o_l_o_g___f_i_l_e ends in six or more Xs. + lecture_status_dir + The directory in which ssuuddoo stores per-user lecture + status files. Once a user has received the lecture, a + zero-length file is created in this directory so that + ssuuddoo will not lecture the user again. This directory + should _n_o_t be cleared when the system reboots. The + default is _/_v_a_r_/_a_d_m_/_s_u_d_o_/_l_e_c_t_u_r_e_d. + limitprivs The default Solaris limit privileges to use when constructing a new privilege set for a command. This bounds all privileges of the executing process. The @@ -1472,10 +1491,12 @@ SSUUDDOOEERRSS OOPPTTIIOONNSS to ``C''. timestampdir The directory in which ssuuddoo stores its time stamp - files. The default is _/_v_a_r_/_a_d_m_/_s_u_d_o. + files. This directory should be cleared when the + system reboots. The default is _/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s. - timestampowner The owner of the time stamp directory and the time - stamps stored therein. The default is root. + timestampowner The owner of the lecture status directory, time stamp + directory and all files stored therein. The default is + root. type The default SELinux type to use when constructing a new security context to run the command. The default type @@ -1810,14 +1831,26 @@ LLOOGG FFOORRMMAATT `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. - unable to open /var/adm/sudo/username/ttyname - _s_u_d_o_e_r_s was unable to read or create the user's time stamp file. + unable to open /var/run/sudo/ts/username + _s_u_d_o_e_r_s was unable to read or create the user's time stamp file. This + can happen when _t_i_m_e_s_t_a_m_p_o_w_n_e_r is set to a user other than root and + the mode on _/_v_a_r_/_r_u_n_/_s_u_d_o is not searchable by group or other. The + default mode for _/_v_a_r_/_r_u_n_/_s_u_d_o is 0711. - unable to write to /var/adm/sudo/username/ttyname + unable to write to /var/run/sudo/ts/username _s_u_d_o_e_r_s was unable to write to the user's time stamp file. - unable to mkdir to /var/adm/sudo/username - _s_u_d_o_e_r_s was unable to create the user's time stamp directory. + /var/run/sudo/ts is owned by uid X, should be Y + The time stamp directory is owned by a user other than _t_i_m_e_s_t_a_m_p_o_w_n_e_r. + This can occur when the value of _t_i_m_e_s_t_a_m_p_o_w_n_e_r has been changed. + _s_u_d_o_e_r_s will ignore the time stamp directory until the owner is + corrected. + + /var/run/sudo/ts is group writable + The time stamp directory is group-writable; it should be writable only + by _t_i_m_e_s_t_a_m_p_o_w_n_e_r. The default mode for the time stamp directory is + 0700. _s_u_d_o_e_r_s will ignore the time stamp directory until the mode is + corrected. NNootteess oonn llooggggiinngg vviiaa ssyysslloogg By default, _s_u_d_o_e_r_s logs messages via syslog(3). The _d_a_t_e, _h_o_s_t_n_a_m_e, and @@ -1859,9 +1892,12 @@ FFIILLEESS _/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o I/O log files - _/_v_a_r_/_a_d_m_/_s_u_d_o Directory containing time stamps for the + _/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s Directory containing time stamps for the _s_u_d_o_e_r_s security policy + _/_v_a_r_/_a_d_m_/_s_u_d_o_/_l_e_c_t_u_r_e_d Directory containing lecture status files for + the _s_u_d_o_e_r_s security policy + _/_e_t_c_/_e_n_v_i_r_o_n_m_e_n_t Initial environment for --ii mode on AIX and Linux systems @@ -2167,41 +2203,42 @@ SSEECCUURRIITTYY NNOOTTEESS TTiimmee ssttaammpp ffiillee cchheecckkss _s_u_d_o_e_r_s will check the ownership of its time stamp directory - (_/_v_a_r_/_a_d_m_/_s_u_d_o by default) and ignore the directory's contents if it is - not owned by root or if it is writable by a user other than root. On - systems that allow non-root users to give away files via chown(2), if the - time stamp directory is located in a world-writable directory (e.g., - _/_t_m_p), it is possible for a user to create the time stamp directory - before ssuuddoo is run. However, because _s_u_d_o_e_r_s checks the ownership and - mode of the directory and its contents, the only damage that can be done - is to ``hide'' files by putting them in the time stamp dir. This is - unlikely to happen since once the time stamp dir is owned by root and - inaccessible by any other user, the user placing files there would be - unable to get them back out. + (_/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s by default) and ignore the directory's contents if it + is not owned by root or if it is writable by a user other than root. + Older versions of ssuuddoo stored time stamp files in _/_t_m_p; this is no longer + recommended as it may be possible for a user to create the time stamp + themselves on systems that allow unprivileged users to change the + ownership of files they create. + + While the time stamp directory _s_h_o_u_l_d be cleared at reboot time, not all + systems contain a _/_v_a_r_/_r_u_n directory. To avoid potential problems, + _s_u_d_o_e_r_s will ignore time stamp files that date from before the machine + booted on systems where the boot time is available. + + Some systems with graphical desktop environments allow unprivileged users + to change the system clock. Since _s_u_d_o_e_r_s relies on the system clock for + time stamp validation, it may be possible on such systems for a user to + run ssuuddoo for longer than _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t by setting the clock back. To + combat this, _s_u_d_o_e_r_s uses a monotonic clock (which never moves backwards) + for its time stamps if the system supports it. _s_u_d_o_e_r_s will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * TIMEOUT will be ignored and - sudo will log and complain. This is done to keep a user from creating - his/her own time stamp with a bogus date on systems that allow users to - give away files if the time stamp directory is located in a world- - writable directory. - - On systems where the boot time is available, _s_u_d_o_e_r_s will ignore time - stamps that date from before the machine booted. + _s_u_d_o_e_r_s will log and complain. Since time stamp files live in the file system, they can outlive a user's login session. As a result, a user may be able to login, run a command with ssuuddoo after authenticating, logout, login again, and run ssuuddoo without - authenticating so long as the time stamp file's modification time is - within 5 minutes (or whatever the timeout is set to in _s_u_d_o_e_r_s). When - the _t_t_y___t_i_c_k_e_t_s option is enabled, the time stamp has per-tty granularity - but still may outlive the user's session. On Linux systems where the - devpts filesystem is used, Solaris systems with the devices filesystem, - as well as other systems that utilize a devfs filesystem that - monotonically increase the inode number of devices as they are created - (such as Mac OS X), _s_u_d_o_e_r_s is able to determine when a tty-based time - stamp file is stale and will ignore it. Administrators should not rely - on this feature as it is not universally available. + authenticating so long as the record's time stamp is within 5 minutes (or + whatever value the timeout is set to in _s_u_d_o_e_r_s). When the _t_t_y___t_i_c_k_e_t_s + option is enabled, the time stamp record includes the device number of + the terminal the user authenticated with. This provides per-tty + granularity but time stamp records still may outlive the user's session. + The time stamp record also includes the session ID of the process that + last authenticated. This prevents processes in different terminal + sessions from using the same time stamp record. It also helps reduce the + chance that a user will be able to run ssuuddoo without entering a password + when logging out and back in again on the same terminal. DDEEBBUUGGGGIINNGG Versions 1.8.4 and higher of the ssuuddooeerrss plugin support a flexible @@ -2292,4 +2329,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 January 1, 2014 Sudo 1.8.9 +Sudo 1.8.10 February 15, 2014 Sudo 1.8.10 diff --git a/doc/sudoers.ldap.cat b/doc/sudoers.ldap.cat index 3a1b4dfc7..eb67c83ab 100644 --- a/doc/sudoers.ldap.cat +++ b/doc/sudoers.ldap.cat @@ -346,7 +346,9 @@ DDEESSCCRRIIPPTTIIOONN An LDAP filter which is used to restrict the set of records returned when performing a ssuuddoo LDAP query. Typically, this is of the form attribute=value or - (&(attribute=value)(attribute2=value2)). + (&(attribute=value)(attribute2=value2)). The default search filter + is: objectClass=sudoRole. If _l_d_a_p___f_i_l_t_e_r is omitted, no search + filter will be used. SSUUDDOOEERRSS__TTIIMMEEDD _o_n_/_t_r_u_e_/_y_e_s_/_o_f_f_/_f_a_l_s_e_/_n_o Whether or not to evaluate the sudoNotBefore and sudoNotAfter @@ -810,4 +812,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 August 30, 2013 Sudo 1.8.9 +Sudo 1.8.10 February 7, 2014 Sudo 1.8.10 diff --git a/doc/sudoers.ldap.man.in b/doc/sudoers.ldap.man.in index ec27f1359..6cbd5939e 100644 --- a/doc/sudoers.ldap.man.in +++ b/doc/sudoers.ldap.man.in @@ -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-2013 Todd C. Miller <Todd.Miller@courtesan.com> +.\" Copyright (c) 2003-2014 Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -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" "8" "August 30, 2013" "Sudo @PACKAGE_VERSION@" "OpenBSD System Manager's Manual" +.TH "SUDOERS.LDAP" "8" "February 7, 2014" "Sudo @PACKAGE_VERSION@" "OpenBSD System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -138,17 +138,17 @@ It consists of the following attributes: .TP 6n \fBsudoUser\fR A user name, user ID (prefixed with -`#'), +\(oq#\(cq), Unix group name or ID (prefixed with -`%' +\(oq%\(cq or -`%#' +\(oq%#\(cq respectively), user netgroup (prefixed with -`+'), +\(oq+\(cq), or non-Unix group name or ID (prefixed with -`%:' +\(oq%:\(cq or -`%:#' +\(oq%:#\(cq respectively). Non-Unix group support is only available when an appropriate \fIgroup_plugin\fR @@ -159,7 +159,7 @@ object. .TP 6n \fBsudoHost\fR A host name, IP address, IP network, or host netgroup (prefixed with a -`+'). +\(oq+\(cq). The special value \fRALL\fR will match any host. @@ -168,11 +168,11 @@ will match any host. A fully-qualified Unix command name with optional command line arguments, potentially including globbing characters (aka wild cards). If a command name is preceded by an exclamation point, -`\&!', +\(oq\&!\(cq, the user will be prohibited from running that command. .sp The built-in command -``\fRsudoedit\fR'' +\(lq\fRsudoedit\fR\(rq is used to permit a user to run \fBsudo\fR with the @@ -181,7 +181,7 @@ option (or as \fBsudoedit\fR). It may take command line arguments just as a normal command does. Note that -``\fRsudoedit\fR'' +\(lq\fRsudoedit\fR\(rq is a command built into \fBsudo\fR itself and must be specified in without a leading path. @@ -197,39 +197,36 @@ This may be useful in situations where the user invoking has write access to the command or its parent directory. The following digest formats are supported: sha224, sha256, sha384 and sha512. The digest name must be followed by a colon -(`:\&') +(\(oq:\&\(cq) and then the actual digest, in either hex or base64 format. For example, given the following value for sudoCommand: -.RS .nf .sp -.RS 4n +.RS 10n sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ /bin/ls .RE .fi +.RS 6n .sp The user may only run \fI/bin/ls\fR if its sha224 digest matches the specified value. Command digests are only supported by version 1.8.7 or higher. -.PP .RE -.PD 0 .TP 6n \fBsudoOption\fR Identical in function to the global options described above, but specific to the \fRsudoRole\fR in which it resides. -.PD .TP 6n \fBsudoRunAsUser\fR A user name or uid (prefixed with -`#') +\(oq#\(cq) that commands may be run as or a Unix group (prefixed with a -`%') +\(oq%\(cq) or user netgroup (prefixed with a -`+') +\(oq+\(cq) that contains a list of users that commands may be run as. The special value \fRALL\fR @@ -249,7 +246,7 @@ attribute instead. .TP 6n \fBsudoRunAsGroup\fR A Unix group or gid (prefixed with -`#') +\(oq#\(cq) that commands may be run as. The special value \fRALL\fR @@ -323,7 +320,7 @@ If multiple entries match, the entry with the highest \fRsudoOrder\fR attribute is chosen. This corresponds to the -``last match'' +\(lqlast match\(rq behavior of the sudoers file. If the \fRsudoOrder\fR @@ -514,12 +511,12 @@ Configuration options are listed below in upper case but are parsed in a case-independent manner. .PP The pound sign -(`#') +(\(oq#\(cq) is used to indicate a comment. Both the comment character and any text after it, up to the end of the line, are ignored. Long lines can be continued with a backslash -(`\e') +(\(oq\e\(cq) as the last character on the line. Note that leading white space is removed from the beginning of lines even when the continuation character is used. @@ -567,7 +564,7 @@ parameter specifies a white space-delimited list of LDAP servers to connect to. Each host may include an optional \fIport\fR separated by a colon -(`:\&'). +(\(oq:\&\(cq). The \fBHOST\fR parameter is deprecated in favor of the @@ -643,6 +640,11 @@ form \fRattribute=value\fR or \fR(&(attribute=value)(attribute2=value2))\fR. +The default search filter is: +\fRobjectClass=sudoRole\fR. +If +\fIldap_filter\fR +is omitted, no search filter will be used. .TP 6n \fBSUDOERS_TIMED\fR \fIon/true/yes/off/false/no\fR Whether or not to evaluate the @@ -667,7 +669,7 @@ parameter is deprecated and will be removed in a future release. The same information is now logged via the \fBsudo\fR debugging framework using the -``ldap'' +\(lqldap\(rq subsystem at priorities \fIdiag\fR and @@ -792,10 +794,13 @@ This option is only supported by the OpenLDAP libraries. The path to a file containing the client certificate which can be used to authenticate the client to the LDAP server. The certificate type depends on the LDAP libraries used. -.RS +.PP +.RS 6n +.PD 0 .TP 6n OpenLDAP: \fRtls_cert /etc/ssl/client_cert.pem\fR +.PD .TP 6n Netscape-derived: \fRtls_cert /var/ldap/cert7.db\fR @@ -807,9 +812,10 @@ contains both keys and certificates. .sp When using Netscape-derived libraries, this file may also contain Certificate Authority certificates. +.PD 0 .PP .RE -.PD 0 +.PD .TP 6n \fBTLS_KEY\fR \fIfile name\fR The path to a file containing the private key which matches the @@ -817,11 +823,13 @@ certificate specified by \fBTLS_CERT\fR. The private key must not be password-protected. The key type depends on the LDAP libraries used. -.RS -.PD +.PP +.RS 6n +.PD 0 .TP 6n OpenLDAP: \fRtls_key /etc/ssl/client_key.pem\fR +.PD .TP 6n Netscape-derived: \fRtls_key /var/ldap/key3.db\fR @@ -830,12 +838,10 @@ Tivoli Directory Server: \fRtls_key /usr/ldap/ldapkey.kdb\fR .PD 0 .PP -.PD When using Tivoli LDAP libraries, this file may also contain Certificate Authority and client certificates and may be encrypted. -.PP .RE -.PD 0 +.PD .TP 6n \fBTLS_KEYPW\fR \fIsecret\fR The @@ -844,9 +850,9 @@ contains the password used to decrypt the key database on clients using the Tivoli Directory Server LDAP library. This should be a simple string without quotes. The password may not include the comment character -(`#') +(\(oq#\(cq) and escaping of special characters with a backslash -(`\e') +(\(oq\e\(cq) is not supported. If this option is used, \fI@ldap_conf@\fR @@ -879,7 +885,6 @@ The utility can be used to manage the key database and create a \fIstash file\fR. This option is only supported by the Tivoli LDAP libraries. -.PD .TP 6n \fBTLS_RANDFILE\fR \fIfile name\fR The @@ -962,14 +967,17 @@ does not stop searching after the first match and later matches take precedence over earlier ones. The following sources are recognized: +.PP +.RS 4n +.PD 0 .TP 10n files read sudoers from \fI@sysconfdir@/sudoers\fR -.PD 0 .TP 10n ldap read sudoers from LDAP +.RE .PD .PP In addition, the entry @@ -1306,7 +1314,7 @@ search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/sudoers.ldap.mdoc.in b/doc/sudoers.ldap.mdoc.in index 70f70a19d..891e3e1f9 100644 --- a/doc/sudoers.ldap.mdoc.in +++ b/doc/sudoers.ldap.mdoc.in @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2003-2013 Todd C. Miller <Todd.Miller@courtesan.com> +.\" Copyright (c) 2003-2014 Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd August 30, 2013 +.Dd February 7, 2014 .Dt SUDOERS.LDAP @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -76,18 +76,18 @@ is no need for a specialized tool to check syntax. Another major difference between LDAP and file-based .Em sudoers is that in LDAP, -.Nm sudo Ns No -specific +.Nm sudo Ns -specific Aliases are not supported. .Pp For the most part, there is really no need for -.Nm sudo Ns No -specific +.Nm sudo Ns -specific Aliases. Unix groups, non-Unix groups (via the .Em group_plugin ) or user netgroups can be used in place of User_Aliases and Runas_Aliases. Host netgroups can be used in place of Host_Aliases. Since groups and netgroups can also be stored in LDAP there is no real need for -.Nm sudo Ns No -specific +.Nm sudo Ns -specific aliases. .Pp Cmnd_Aliases are not really required either since it is possible @@ -421,7 +421,7 @@ sudoHost: !web01 .Ed .Ss Sudoers schema In order to use -.Nm sudo Ns No 's +.Nm sudo Ns 's LDAP support, the .Nm sudo schema must be @@ -451,7 +451,7 @@ Sudo reads the file for LDAP-specific configuration. Typically, this file is shared between different LDAP-aware clients. As such, most of the settings are not -.Nm sudo Ns No -specific. +.Nm sudo Ns -specific. Note that .Nm sudo parses @@ -564,9 +564,9 @@ The parameter specifies the amount of time, in seconds, to wait while trying to connect to an LDAP server. If multiple -.Sy URI Ns No s +.Sy URI Ns s or -.Sy HOST Ns No s +.Sy HOST Ns s are specified, this is the amount of time to wait before trying the next one in the list. .It Sy NETWORK_TIMEOUT Ar seconds @@ -604,6 +604,11 @@ form .Li attribute=value or .Li (&(attribute=value)(attribute2=value2)) . +The default search filter is: +.Li objectClass=sudoRole . +If +.Ar ldap_filter +is omitted, no search filter will be used. .It Sy SUDOERS_TIMED Ar on/true/yes/off/false/no Whether or not to evaluate the .Li sudoNotBefore diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index 5a50a5d1d..7fc8cc898 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -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" "@mansectsu@" "January 1, 2014" "Sudo @PACKAGE_VERSION@" "Programmer's Manual" +.TH "SUDOERS" "@mansectsu@" "February 15, 2014" "Sudo @PACKAGE_VERSION@" "Programmer's Manual" .nh .if n .ad l .SH "NAME" @@ -206,10 +206,14 @@ lookup is still done for root, not the user specified by \fRSUDO_USER\fR. .PP \fIsudoers\fR -uses time stamp files for credential caching. -Once a -user has been authenticated, the time stamp is updated and the user -may then use sudo without a password for a short period of time +uses per-user time stamp files for credential caching. +Once a user has been authenticated, a record is written +containing the uid that 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 +\fBsudo\fR +without a password for a short period of time (\fR@timeout@\fR minutes unless overridden by the \fItimeout\fR @@ -217,8 +221,8 @@ option) \&. By default, \fIsudoers\fR -uses a tty-based time stamp which means that -there is a separate time stamp for each of a user's login sessions. +uses a separate record for each tty, which means that +a user's login sessions are authenticated separately. The \fItty_tickets\fR option can be disabled to force the use of a @@ -330,7 +334,7 @@ The list of environment variables that \fBsudo\fR allows or denies is contained in the output of -``\fRsudo -V\fR'' +\(lq\fRsudo -V\fR\(rq when run as root. .PP Note that the dynamic linker on most operating systems will remove @@ -431,7 +435,7 @@ EBNF also contains the following operators, which many readers will recognize from regular expressions. Do not, however, confuse them with -``wildcard'' +\(lqwildcard\(rq characters, which have different meanings. .TP 6n \fR\&?\fR @@ -500,7 +504,7 @@ A \fRNAME\fR is a string of uppercase letters, numbers, and underscore characters -(`_'). +(\(oq_\(cq). A \fRNAME\fR \fBmust\fR @@ -508,7 +512,7 @@ start with an uppercase letter. It is possible to put several alias definitions of the same type on a single line, joined by a colon -(`:\&'). +(\(oq:\&\(cq). E.g., .nf .sp @@ -541,24 +545,24 @@ A \fRUser_List\fR is made up of one or more user names, user IDs (prefixed with -`#'), +\(oq#\(cq), system group names and IDs (prefixed with -`%' +\(oq%\(cq and -`%#' +\(oq%#\(cq respectively), netgroups (prefixed with -`+'), +\(oq+\(cq), non-Unix group names and IDs (prefixed with -`%:' +\(oq%:\(cq and -`%:#' +\(oq%:#\(cq respectively) and \fRUser_Alias\fRes. Each list item may be prefixed with zero or more -`\&!' +\(oq\&!\(cq operators. An odd number of -`\&!' +\(oq\&!\(cq operators negate the value of the item; an even number just cancel each other out. .PP @@ -602,7 +606,7 @@ for more information. .PP Note that quotes around group names are optional. Unquoted strings must use a backslash -(`\e') +(\(oq\e\(cq) to escape spaces and special characters. See \fIOther special characters and reserved words\fR @@ -658,10 +662,10 @@ A \fRHost_List\fR is made up of one or more host names, IP addresses, network numbers, netgroups (prefixed with -`+') +\(oq+\(cq) and other aliases. Again, the value of an item may be negated with the -`\&!' +\(oq\&!\(cq operator. If you do not specify a netmask along with the network number, \fBsudo\fR @@ -686,7 +690,7 @@ Note that only inspects actual network interfaces; this means that IP address 127.0.0.1 (localhost) will never match. Also, the host name -``localhost'' +\(lqlocalhost\(rq will only match if that is the actual host name, which is usually only the case for non-networked systems. .nf @@ -733,7 +737,7 @@ may only be run command line arguments. A directory is a fully qualified path name ending in a -`/'. +\(oq/\(cq. When you specify a directory in a \fRCmnd_List\fR, the user will be able to run any file within that directory @@ -747,14 +751,14 @@ in the 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 -`\e' +\(oq\e\(cq if they are used in command arguments: -`,\&', -`:\&', -`=\&', -`\e'. +\(oq,\&\(cq, +\(oq:\&\(cq, +\(oq=\&\(cq, +\(oq\e\(cq. The built-in command -``\fRsudoedit\fR'' +\(lq\fRsudoedit\fR\(rq is used to permit a user to run \fBsudo\fR with the @@ -763,7 +767,7 @@ option (or as \fBsudoedit\fR). It may take command line arguments just as a normal command does. Note that -``\fRsudoedit\fR'' +\(lq\fRsudoedit\fR\(rq is a command built into \fBsudo\fR itself and must be specified in @@ -845,7 +849,7 @@ values, or \fBlists\fR. Flags are implicitly boolean and can be turned off via the -`\&!' +\(oq\&!\(cq operator. Some integer, string and list parameters may also be used in a boolean context to disable them. @@ -854,7 +858,7 @@ in double quotes (\&"") when they contain multiple words. Special characters may be escaped with a backslash -(`\e'). +(\(oq\e\(cq). .PP Lists have two additional assignment operators, \fR+=\fR @@ -906,7 +910,7 @@ run as but this can be changed on a per-command basis. .PP The basic structure of a user specification is -``who where = (as_whom) what''. +\(lqwho where = (as_whom) what\(rq. Let's break that down into its constituent parts: .SS "Runas_Spec" A @@ -918,7 +922,7 @@ A fully-specified consists of two \fRRunas_List\fRs (as defined above) separated by a colon -(`:\&') +(\(oq:\&\(cq) and enclosed in a set of parentheses. The first \fRRunas_List\fR @@ -1118,7 +1122,7 @@ $ ppriv -l .fi .PP In addition, there are several -``special'' +\(lqspecial\(rq privilege strings: .TP 10n none @@ -1135,9 +1139,9 @@ the default set of privileges normal users are granted at login time .PP Privileges can be excluded from a set by prefixing the privilege name with either an -`\&!' +\(oq\&!\(cq or -`\-' +\(oq\-\(cq character. .SS "Tag_Spec" A command may have zero or more tags associated with it. @@ -1189,13 +1193,13 @@ Conversely, the \fRPASSWD\fR tag can be used to reverse things. For example: -.RS .nf .sp -.RS 0n +.RS 2n ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm .RE .fi +.RS 2n .sp would allow the user \fBray\fR @@ -1215,7 +1219,7 @@ run without a password the entry would be: .nf .sp -.RS 0n +.RS 2n ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm .RE .fi @@ -1230,10 +1234,10 @@ By default, if the \fRNOPASSWD\fR tag is applied to any of the entries for a user on the current host, he or she will be able to run -``\fRsudo -l\fR'' +\(lq\fRsudo -l\fR\(rq without a password. Additionally, a user may only run -``\fRsudo -v\fR'' +\(lq\fRsudo -v\fR\(rq without a password if the \fRNOPASSWD\fR tag is present for all a user's entries that pertain to the current host. @@ -1242,9 +1246,7 @@ This behavior may be overridden via the and \fIlistpw\fR options. -.PP .RE -.PD 0 .TP 2n \fINOEXEC\fR and \fIEXEC\fR .sp @@ -1264,23 +1266,20 @@ may run and \fI/usr/bin/vi\fR but shell escapes will be disabled. -.RS .nf .sp -.RS 0n +.RS 2n aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi .RE .fi +.RS 2n .sp See the \fIPreventing shell escapes\fR section below for more details on how \fRNOEXEC\fR works and whether or not it will work on your system. -.PD -.PP .RE -.PD 0 .TP 2n \fISETENV\fR and \fINOSETENV\fR .sp @@ -1308,7 +1307,6 @@ the tag is implied for that command; this default may be overridden by use of the \fRNOSETENV\fR tag. -.PD .TP 2n \fILOG_INPUT\fR and \fINOLOG_INPUT\fR .sp @@ -1365,15 +1363,15 @@ in the specified range. .TP 10n \fR\ex\fR For any character -`x', +\(oqx\(cq, evaluates to -`x'. +\(oqx\(cq. This is used to escape special characters such as: -`*', -`\&?', -`[\&', +\(oq*\(cq, +\(oq\&?\(cq, +\(oq[\&\(cq, and -`]\&'. +\(oq]\&\(cq. .PP Character classes may also be used if your system's glob(3) @@ -1381,7 +1379,7 @@ and fnmatch(3) functions support them. However, because the -`:\&' +\(oq:\&\(cq character has special meaning in \fIsudoers\fR, it must be @@ -1390,14 +1388,14 @@ For example: .nf .sp .RS 4n -/bin/ls [[\:alpha\:]]* +/bin/ls [[:\&alpha:\&]]* .RE .fi .PP Would match any file name beginning with a letter. .PP Note that a forward slash -(`/') +(\(oq/\(cq) will \fBnot\fR be matched by @@ -1423,9 +1421,9 @@ arbitrary strings and not just path names. Wildcards in command line arguments should be used with care. Because command line arguments are matched as a single, concatenated string, a wildcard such as -`\&?' +\(oq\&?\(cq or -`*' +\(oq*\(cq can match multiple words. For example, while a sudoers entry like: .nf @@ -1468,7 +1466,7 @@ sudoedit Command line arguments to the \fIsudoedit\fR built-in command should always be path names, so a forward slash -(`/') +(\(oq/\(cq) will not be matched by a wildcard. .SS "Including other files from within sudoers" It is possible to include other @@ -1521,7 +1519,7 @@ file loops. .PP If the path to the include file is not fully-qualified (does not begin with a -`/', +\(oq/\(cq, it must be located in the same directory as the sudoers file it was included from. For example, if @@ -1541,7 +1539,7 @@ The file name may also include the \fR%h\fR escape, signifying the short form of the host name. In other words, if the machine's host name is -``xerxes'', +\(lqxerxes\(rq, then .nf .sp @@ -1575,9 +1573,9 @@ For example, given: will read each file in \fI/etc/sudoers.d\fR, skipping file names that end in -`~' +\(oq~\(cq or contain a -`.\&' +\(oq.\&\(cq character to avoid causing problems with package manager or editor temporary/backup files. Files are parsed in sorted lexical order. @@ -1606,7 +1604,7 @@ with the flag to edit the files directly. .SS "Other special characters and reserved words" The pound sign -(`#') +(\(oq#\(cq) is used to indicate a comment (unless it is part of a #include directive or unless it occurs in the context of a user name and is followed by one or more digits, in which case it is treated as a @@ -1637,7 +1635,7 @@ can be dangerous since in a command context, it allows the user to run command on the system. .PP An exclamation point -(`\&!') +(\(oq\&!\(cq) can be used as a logical \fInot\fR operator in a list or @@ -1646,7 +1644,7 @@ as well as in front of a \fRCmnd\fR. This allows one to exclude certain values. For the -`\&!' +\(oq\&!\(cq operator to be effective, there must be something for it to exclude. For example, to match all users except for root one would use: .nf @@ -1668,42 +1666,42 @@ is omitted, as in: .PP it would explicitly deny root but not match any other users. This is different from a true -``negation'' +\(lqnegation\(rq operator. .PP Note, however, that using a -`\&!' +\(oq\&!\(cq in conjunction with the built-in \fBALL\fR alias to allow a user to run -``all but a few'' +\(lqall but a few\(rq commands rarely works as intended (see \fISECURITY NOTES\fR below). .PP Long lines can be continued with a backslash -(`\e') +(\(oq\e\(cq) as the last character on the line. .PP White space between elements in a list as well as special syntactic characters in a \fIUser Specification\fR -(`=\&', -`:\&', -`(\&', -`)\&') +(\(oq=\&\(cq, +\(oq:\&\(cq, +\(oq(\&\(cq, +\(oq)\&\(cq) is optional. .PP The following characters must be escaped with a backslash -(`\e') +(\(oq\e\(cq) when used as part of a word (e.g.\& a user name or host name): -`\&!', -`=\&', -`:\&', -`,\&', -`(\&', -`)\&', -`\e'. +\(oq\&!\(cq, +\(oq=\&\(cq, +\(oq:\&\(cq, +\(oq,\&\(cq, +\(oq(\&\(cq, +\(oq)\&\(cq, +\(oq\e\(cq. .SH "SUDOERS OPTIONS" \fBsudo\fR's behavior can be modified by @@ -1779,6 +1777,18 @@ is compiled with \fBzlib\fR support. .TP 18n +use_netgroups +If set, netgroups (prefixed with +\(oq+\(cq), +may be used in place of a user or host. +For LDAP-based sudoers, netgroup support requires an expensive +substring match on the server. +If netgroups are not needed, this option can be disabled to reduce the +load on the LDAP server. +This flag is +\fIon\fR +by default. +.TP 18n exec_background By default, \fBsudo\fR @@ -1860,8 +1870,7 @@ if they match a value specified in \fReditor\fR. This flag is \fI@env_editor@\fR -by -default. +by default. .TP 18n env_reset If set, @@ -1931,7 +1940,7 @@ or \fI../bin/ls\fR. This has security implications when path names that include globbing characters are used with the negation operator, -`!\&', +\(oq!\&\(cq, as such rules can be trivially bypassed. As such, this option should not be used when \fIsudoers\fR @@ -1950,7 +1959,7 @@ command) does not contain the 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'' +\(lqcanonical\(rq host name, as returned by the \fBgetaddrinfo\fR() or @@ -1962,7 +1971,7 @@ for host name resolution. If the system is configured to use the \fI/etc/hosts\fR file in preference to DNS, the -``canonical'' +\(lqcanonical\(rq host name may not be fully-qualified. The order that sources are queried for host name resolution is usually specified in the @@ -1975,18 +1984,19 @@ file. In the \fI/etc/hosts\fR file, the first host name of the entry is considered to be the -``canonical'' +\(lqcanonical\(rq name; subsequent names are aliases that are not used by \fBsudoers\fR. For example, the following hosts file line for the machine -``xyzzy'' +\(lqxyzzy\(rq has the fully-qualified domain name as the -``canonical'' +\(lqcanonical\(rq host name, and the short version as an alias. .sp -.RS 6n +.RS 24n 192.168.1.1 xyzzy.sudo.ws xyzzy .RE +.RS 18n .sp If the machine's hosts file entry is not formatted properly, the \fIfqdn\fR @@ -2001,7 +2011,7 @@ to make DNS lookups which renders 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'' +\(lqcanonical\(rq name as DNS knows it. That is, you may not use a host alias (\fRCNAME\fR @@ -2012,6 +2022,7 @@ aliases from DNS. This flag is \fI@fqdn@\fR by default. +.RE .TP 18n ignore_dot If set, @@ -2080,7 +2091,7 @@ by default) using a unique session ID that is included in the normal \fBsudo\fR log line, prefixed with -``\fRTSID=\fR''. +\(lq\fRTSID=\fR\(rq. The \fIiolog_file\fR option may be used to control the format of the session ID. @@ -2113,7 +2124,7 @@ by default) using a unique session ID that is included in the normal \fBsudo\fR log line, prefixed with -``\fRTSID=\fR''. +\(lq\fRTSID=\fR\(rq. The \fIiolog_file\fR option may be used to control the format of the session ID. @@ -2270,7 +2281,7 @@ The password prompt specified by \fIpassprompt\fR will normally only be used if the password prompt provided by systems such as PAM matches the string -``Password:''. +\(lqPassword:\(rq. If \fIpassprompt_override\fR is set, @@ -2348,10 +2359,10 @@ If set, root is allowed to run \fBsudo\fR too. Disabling this prevents users from -``chaining'' +\(lqchaining\(rq \fBsudo\fR commands to get a root shell by doing something like -``\fRsudo sudo /bin/sh\fR''. +\(lq\fRsudo sudo /bin/sh\fR\(rq. Note, however, that turning off \fIroot_sudo\fR will also prevent root from running @@ -2366,7 +2377,8 @@ by default. rootpw If set, \fBsudo\fR -will prompt for the root password instead of the password of the invoking user. +will prompt for the root password instead of the password of the invoking user +when running a command or editing a file. This flag is \fIoff\fR by default. @@ -2378,7 +2390,8 @@ will prompt for the password of the user defined by the \fIrunas_default\fR option (defaults to \fR@runas_default@\fR) -instead of the password of the invoking user. +instead of the password of the invoking user +when running a command or editing a file. This flag is \fIoff\fR by default. @@ -2521,8 +2534,8 @@ by the \fB\-u\fR option (defaults to \fRroot\fR) -instead of the password of the invoking user. -In addition, the time stamp file name will include the target user's name. +instead of the password of the invoking user +when running a command or editing a file. Note that this flag precludes the use of a uid not listed in the passwd database as an argument to the \fB\-u\fR @@ -2535,9 +2548,8 @@ tty_tickets If set, users must authenticate on a per-tty basis. With this flag enabled, \fBsudo\fR -will use a file named for the tty the user is -logged in on in the user's time stamp directory. -If disabled, the time stamp of the directory is used instead. +will use a separate record in the time stamp file for each tty. +If disabled, a single record is used for all login sessions. This flag is \fI@tty_tickets@\fR by default. @@ -2610,7 +2622,7 @@ flag is set, \fBsudo\fR will prompt for a password even when it would be visible on the screen. This makes it possible to run things like -``\fRssh somehost sudo ls\fR'' +\(lq\fRssh somehost sudo ls\fR\(rq since by default, ssh(1) does @@ -2680,9 +2692,9 @@ If set to a value less than \fR0\fR the user's time stamp will never expire. This can be used to allow users to create or delete their own time stamps via -``\fRsudo -v\fR'' +\(lq\fRsudo -v\fR\(rq and -``\fRsudo -k\fR'' +\(lq\fRsudo -k\fR\(rq respectively. .TP 18n umask @@ -2711,7 +2723,7 @@ unless insults are enabled. .TP 18n editor A colon -(`:\&') +(\(oq:\&\(cq) separated list of editors allowed to be used with \fBvisudo\fR. \fBvisudo\fR @@ -2739,14 +2751,17 @@ The default is \fI@iolog_dir@\fR. .sp The following percent -(`%') +(\(oq%\(cq) escape sequences are supported: -.RS +.PP +.RS 18n +.PD 0 .TP 6n \fR%{seq}\fR expanded to a monotonically increasing base-36 sequence number, such as 0100A5, where every two digits are used to form a new directory, e.g.\& \fI01/00/A5\fR +.PD .TP 6n \fR%{user}\fR expanded to the invoking user's login name @@ -2773,13 +2788,11 @@ strftime(3) function will be expanded. .sp To include a literal -`%' +\(oq%\(cq character, the string -`%%' +\(oq%%\(cq should be used. -.PP .RE -.PD 0 .TP 18n iolog_file The path name, relative to @@ -2797,12 +2810,12 @@ Note that \fIiolog_file\fR may contain directory components. The default is -``\fR%{seq}\fR''. +\(lq\fR%{seq}\fR\(rq. .sp See the \fIiolog_dir\fR option above for a list of supported percent -(`%') +(\(oq%\(cq) escape sequences. .sp In addition to the escape sequences, path names that end in six or @@ -2824,7 +2837,20 @@ overwritten unless ends in six or more \fRX\fRs. -.PD +.TP 18n +lecture_status_dir +The directory in which +\fBsudo\fR +stores per-user lecture status files. +Once a user has received the lecture, a zero-length file is +created in this directory so that +\fBsudo\fR +will not lecture the user again. +This directory should +\fInot\fR +be cleared when the system reboots. +The default is +\fI@vardir@/lectured\fR. .TP 18n limitprivs The default Solaris limit privileges to use when constructing a new @@ -2844,29 +2870,29 @@ The escape \fR%h\fR will expand to the host name of the machine. Default is -``\fR@mailsub@\fR''. +\(lq\fR@mailsub@\fR\(rq. .TP 18n maxseq The maximum sequence number that will be substituted for the -``\fR%{seq}\fR'' +\(lq\fR%{seq}\fR\(rq escape in the I/O log file (see the \fIiolog_dir\fR description above for more information). While the value substituted for -``\fR%{seq}\fR'' +\(lq\fR%{seq}\fR\(rq is in base 36, \fImaxseq\fR itself should be expressed in decimal. Values larger than 2176782336 (which corresponds to the base 36 sequence number -``ZZZZZZ'') +\(lqZZZZZZ\(rq) will be silently truncated to 2176782336. The default value is 2176782336. .sp Once the local sequence number reaches the value of \fImaxseq\fR, it will -``roll over'' +\(lqroll over\(rq to zero, after which \fBsudoers\fR will truncate and re-use any existing I/O log path names. @@ -2888,7 +2914,7 @@ name used when the \fB\-i\fR option is specified. The default value is -``\fR@pam_login_service@\fR''. +\(lq\fR@pam_login_service@\fR\(rq. See the description of \fIpam_service\fR for more information. @@ -2904,7 +2930,7 @@ file or a file in the \fI/etc/pam.d\fR directory. The default value is -``\fRsudo\fR''. +\(lq\fRsudo\fR\(rq. .sp This setting is only supported by version 1.8.8 or higher. .TP 18n @@ -2915,15 +2941,18 @@ option or the \fRSUDO_PROMPT\fR environment variable. The following percent -(`%') +(\(oq%\(cq) escape sequences are supported: -.RS +.PP +.RS 18n +.PD 0 .TP 6n \fR%H\fR expanded to the local host name including the domain name (only if the machine's host name is fully qualified or the \fIfqdn\fR option is set) +.PD .TP 6n \fR%h\fR expanded to the local host name without the domain name @@ -2952,10 +2981,8 @@ characters are collapsed into a single character .PP The default value is -``\fR@passprompt@\fR''. -.PP +\(lq\fR@passprompt@\fR\(rq. .RE -.PD 0 .TP 18n privs The default Solaris privileges to use when constructing a new @@ -2973,7 +3000,6 @@ The default privileges may be overridden on a per-command basis in This option is only available if \fBsudoers\fR is built on Solaris 10 or higher. -.PD .TP 18n role The default SELinux role to use when constructing a new security @@ -3022,17 +3048,19 @@ 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 -``\fRC\fR''. +\(lq\fRC\fR\(rq. .TP 18n timestampdir The directory in which \fBsudo\fR stores its time stamp files. +This directory should be cleared when the system reboots. The default is -\fI@timedir@\fR. +\fI@rundir@/ts\fR. .TP 18n timestampowner -The owner of the time stamp directory and the time stamps stored therein. +The owner of the lecture status directory, time stamp directory and all +files stored therein. The default is \fRroot\fR. .TP 18n @@ -3054,9 +3082,9 @@ The 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 -``\fRVARIABLE=value\fR'' +\(lq\fRVARIABLE=value\fR\(rq or -``\fRexport VARIABLE=value\fR''. +\(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 \fBsudo\fR @@ -3091,10 +3119,13 @@ lecture This option controls when a short lecture will be printed along with the password prompt. It has the following possible values: -.RS +.PP +.RS 14n +.PD 0 .TP 8n always Always lecture the user. +.PD .TP 8n never Never lecture the user. @@ -3111,9 +3142,7 @@ Negating the option results in a value of being used. The default value is \fI@lecture@\fR. -.PP .RE -.PD 0 .TP 14n lecture_file Path to a file containing an alternate @@ -3123,7 +3152,6 @@ file exists. By default, \fBsudo\fR uses a built-in lecture. -.PD .TP 14n listpw This option controls when a password will be required when a user runs @@ -3132,7 +3160,9 @@ with the \fB\-l\fR option. It has the following possible values: -.RS +.PP +.RS 14n +.PD 0 .TP 10n all All the user's @@ -3141,6 +3171,7 @@ entries for the current host must have the \fRNOPASSWD\fR flag set to avoid entering a password. +.PD .TP 10n always The user must always enter a password to use the @@ -3168,9 +3199,7 @@ Negating the option results in a value of being used. The default value is \fIany\fR. -.PP .RE -.PD 0 .TP 14n logfile Path to the @@ -3181,7 +3210,6 @@ negating this option turns it off. By default, \fBsudo\fR logs via syslog. -.PD .TP 14n mailerflags Flags to use when invoking mailer. Defaults to @@ -3193,7 +3221,7 @@ Defaults to the path to sendmail found at configure time. .TP 14n mailfrom Address to use for the -``from'' +\(lqfrom\(rq address when sending warning and error mail. The address should be enclosed in double quotes (\&"") @@ -3227,9 +3255,9 @@ to have a sane \fRPATH\fR environment variable you may want to use this. Another use is if you want to have the -``root path'' +\(lqroot path\(rq be separate from the -``user path''. +\(lquser path\(rq. Users in the group specified by the \fIexempt_group\fR option are not affected by @@ -3266,7 +3294,9 @@ with the \fB\-v\fR option. It has the following possible values: -.RS +.PP +.RS 14n +.PD 0 .TP 8n all All the user's @@ -3274,6 +3304,7 @@ All the user's entries for the current host must have the \fRNOPASSWD\fR flag set to avoid entering a password. +.PD .TP 8n always The user must always enter a password to use the @@ -3307,9 +3338,9 @@ The default value is env_check Environment variables to be removed from the user's environment if the variable's value contains -`%' +\(oq%\(cq or -`/' +\(oq/\(cq characters. This can be used to guard against printf-style format vulnerabilities in poorly-written programs. @@ -3414,16 +3445,12 @@ The path to the group file should be specified as an option to the plugin. For example, if the group file to be used is \fI/etc/sudo-group\fR: -.RS .nf .sp -.RS 0n +.RS 10n Defaults group_plugin="group_file.so /etc/sudo-group" .RE .fi -.PP -.RE -.PD 0 .TP 10n system_group The @@ -3435,15 +3462,12 @@ and This plugin can be used in instances where the user belongs to groups not present in the user's supplemental group vector. This plugin takes no options: -.RS .nf .sp -.RS 0n +.RS 10n Defaults group_plugin=system_group.so .RE .fi -.RE -.PD .PP The group provider plugin API is described in detail in sudo_plugin(@mansectsu@). @@ -3470,7 +3494,7 @@ Where the fields are as follows: date The date the command was run. Typically, this is in the format -``MMM, DD, HH:MM:SS''. +\(lqMMM, DD, HH:MM:SS\(rq. If logging via syslog(3), the actual date format is controlled by the syslog daemon. @@ -3500,13 +3524,13 @@ The login name of the user who ran .TP 14n ttyname The short name of the terminal (e.g.\& -``console'', -``tty01'', +\(lqconsole\(rq, +\(lqtty01\(rq, or -``pts/0'') +\(lqpts/0\(rq) \fBsudo\fR was run on, or -``unknown'' +\(lqunknown\(rq if there was no terminal present. .TP 14n cwd @@ -3538,7 +3562,7 @@ The actual command that was executed. Messages are logged using the locale specified by \fIsudoers_locale\fR, which defaults to the -``\fRC\fR'' +\(lq\fRC\fR\(rq locale. .SS "Denied command log entries" If the user is not allowed to run the command, the reason for the denial @@ -3621,9 +3645,9 @@ using group permissions to avoid this problem. Consider either changing the ownership of \fI@sysconfdir@/sudoers\fR or adding an argument like -``sudoers_uid=N'' +\(lqsudoers_uid=N\(rq (where -`N' +\(oqN\(cq is the user ID that owns the \fIsudoers\fR file) to the end of the @@ -3650,9 +3674,9 @@ file has the wrong owner. If you wish to change the \fIsudoers\fR file owner, please add -``sudoers_uid=N'' +\(lqsudoers_uid=N\(rq (where -`N' +\(oqN\(cq is the user ID that owns the \fIsudoers\fR file) to the @@ -3671,7 +3695,7 @@ The 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'' +\(lqsudoers_mode\(rq option to the \fBsudoers\fR \fRPlugin\fR @@ -3686,9 +3710,9 @@ file has the wrong group ownership. If you wish to change the \fIsudoers\fR file group ownership, please add -``sudoers_gid=N'' +\(lqsudoers_gid=N\(rq (where -`N' +\(oqN\(cq is the group ID that owns the \fIsudoers\fR file) to the @@ -3698,17 +3722,37 @@ line in the sudo.conf(@mansectform@) file. .TP 3n -unable to open @timedir@/username/ttyname +unable to open @rundir@/ts/username \fIsudoers\fR was unable to read or create the user's time stamp file. +This can happen when +\fItimestampowner\fR +is set to a user other than root and the mode on +\fI@rundir@\fR +is not searchable by group or other. +The default mode for +\fI@rundir@\fR +is 0711. .TP 3n -unable to write to @timedir@/username/ttyname +unable to write to @rundir@/ts/username \fIsudoers\fR was unable to write to the user's time stamp file. .TP 3n -unable to mkdir to @timedir@/username +@rundir@/ts is owned by uid X, should be Y +The time stamp directory is owned by a user other than +\fItimestampowner\fR. +This can occur when the value of +\fItimestampowner\fR +has been changed. \fIsudoers\fR -was unable to create the user's time stamp directory. +will ignore the time stamp directory until the owner is corrected. +.TP 3n +@rundir@/ts is group writable +The time stamp directory is group-writable; it should be writable only by +\fItimestampowner\fR. +The default mode for the time stamp directory is 0700. +\fIsudoers\fR +will ignore the time stamp directory until the mode is corrected. .SS "Notes on logging via syslog" By default, \fIsudoers\fR @@ -3731,9 +3775,9 @@ To prevent the command line arguments from being truncated, \fBsudoers\fR will split up log messages that are larger than 960 characters (not including the date, hostname, and the string -``sudo''). +\(lqsudo\(rq). When a message is split, additional parts will include the string -``(command continued)'' +\(lq(command continued)\(rq after the user name and before the continued command line arguments. .SS "Notes on logging to a file" If the @@ -3773,7 +3817,7 @@ on the log files. If the \fIloglinelen\fR option is set to 0 (or negated with a -`\&!'), +\(oq\&!\(cq), word wrap will be disabled. .SH "FILES" .TP 26n @@ -3792,11 +3836,16 @@ List of network groups \fI@iolog_dir@\fR I/O log files .TP 26n -\fI@timedir@\fR +\fI@rundir@/ts\fR Directory containing time stamps for the \fIsudoers\fR security policy .TP 26n +\fI@vardir@/lectured\fR +Directory containing lecture status files for the +\fIsudoers\fR +security policy +.TP 26n \fI/etc/environment\fR Initial environment for \fB\-i\fR @@ -4082,9 +4131,9 @@ may run any command on machines in the netgroup. \fBsudo\fR knows that -``biglab'' +\(lqbiglab\(rq is a netgroup due to the -`+' +\(oq+\(cq prefix. .nf .sp @@ -4218,13 +4267,13 @@ Any user may mount or unmount a CD-ROM on the machines in the CDROM This is a bit tedious for users to type, so it is a prime candidate for encapsulating in a shell script. .SH "SECURITY NOTES" -.SS "Limitations of the `!\&' operator" +.SS "Limitations of the \(oq!\&\(cq operator" It is generally not effective to -``subtract'' +\(lqsubtract\(rq commands from \fBALL\fR using the -`!\&' +\(oq!\&\(cq operator. A user can trivially circumvent this by copying the desired command to a different name and then executing that. @@ -4251,7 +4300,7 @@ In general, if a user has sudo \fBALL\fR there is nothing to prevent them from creating their own program that gives them a root shell (or making their own copy of a shell) regardless of any -`!\&' +\(oq!\&\(cq elements in the user specification. .SS "Security implications of \fIfast_glob\fR" If the @@ -4355,13 +4404,13 @@ for a command, use the tag as documented in the User Specification section above. Here is that example again: -.RS .nf .sp -.RS 0n +.RS 10n aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi .RE .fi +.RS 10n .sp This allows user \fBaaron\fR @@ -4403,7 +4452,7 @@ is a built-in command, it must be specified in without a leading path. However, it may take command line arguments just as a normal command does. For example, to allow user operator to edit the -``message of the day'' +\(lqmessage of the day\(rq file: .nf .sp @@ -4430,40 +4479,50 @@ will be updated with the contents of the temporary copy. .SS "Time stamp file checks" \fIsudoers\fR will check the ownership of its time stamp directory -(\fI@timedir@\fR +(\fI@rundir@/ts\fR by default) and ignore the directory's contents if it is not owned by root or if it is writable by a user other than root. -On systems that allow non-root users to give away files via -chown(2), -if the time stamp directory is located in a world-writable -directory (e.g.\&, -\fI/tmp\fR), -it is possible for a user to create the time stamp directory before +Older versions of +\fBsudo\fR +stored time stamp files in +\fI/tmp\fR; +this is no longer recommended as it may be possible for a user +to create the time stamp themselves on systems that allow +unprivileged users to change the ownership of files they create. +.PP +While the time stamp directory +\fIshould\fR +be cleared at reboot time, not all systems contain a +\fI/var/run\fR +directory. +To avoid potential problems, +\fIsudoers\fR +will ignore time stamp files that date from before the machine booted +on systems where the boot time is available. +.PP +Some systems with graphical desktop environments allow unprivileged +users to change the system clock. +Since +\fIsudoers\fR +relies on the system clock for time stamp validation, it may be +possible on such systems for a user to run \fBsudo\fR -is run. -However, because +for longer than +\fItimestamp_timeout\fR +by setting the clock back. +To combat this, \fIsudoers\fR -checks the ownership and mode of the directory and its -contents, the only damage that can be done is to -``hide'' -files by putting them in the time stamp dir. -This is unlikely to happen since once the time stamp dir is owned by root -and inaccessible by any other user, the user placing files there would be -unable to get them back out. +uses a monotonic clock (which never moves backwards) for its time stamps +if the system supports it. .PP \fIsudoers\fR will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * \fRTIMEOUT\fR -will be ignored and sudo will log and complain. -This is done to keep a user from creating his/her own time stamp with a -bogus date on systems that allow users to give away files if the time -stamp directory is located in a world-writable directory. -.PP -On systems where the boot time is available, +will be ignored and \fIsudoers\fR -will ignore time stamps that date from before the machine booted. +will log and complain. .PP Since time stamp files live in the file system, they can outlive a user's login session. @@ -4471,24 +4530,24 @@ As a result, a user may be able to login, run a command with \fBsudo\fR after authenticating, logout, login again, and run \fBsudo\fR -without authenticating so long as the time stamp file's modification -time is within +without authenticating so long as the record's time stamp is within \fR@timeout@\fR -minutes (or whatever the timeout is set to in +minutes (or whatever value the timeout is set to in \fIsudoers\fR). When the \fItty_tickets\fR -option is enabled, the time stamp has per-tty granularity but still +option is enabled, the time stamp record includes the device +number of the terminal the user authenticated with. +This provides per-tty granularity but time stamp records still may outlive the user's session. -On Linux systems where the devpts filesystem is used, Solaris systems -with the devices filesystem, as well as other systems that utilize a -devfs filesystem that monotonically increase the inode number of devices -as they are created (such as Mac OS X), -\fIsudoers\fR -is able to determine when a tty-based time stamp file is stale and will -ignore it. -Administrators should not rely on this feature as it is not universally -available. +The time stamp record also includes the session ID of the process +that last authenticated. +This prevents processes in different terminal sessions from using +the same time stamp record. +It also helps reduce the chance that a user will be able to run +\fBsudo\fR +without entering a password when logging out and back in again +on the same terminal. .SH "DEBUGGING" Versions 1.8.4 and higher of the \fBsudoers\fR @@ -4591,7 +4650,6 @@ SSSD-based sudoers utility functions .PD 0 .PP -.PD For example: .nf .sp @@ -4599,6 +4657,7 @@ For example: Debug sudo /var/log/sudo_debug match@info,nss@info .RE .fi +.PD .PP For more information, see the sudo.conf(@mansectform@) @@ -4652,7 +4711,7 @@ search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index dbe703613..2f00d4ac6 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -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 1, 2014 +.Dd February 15, 2014 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -194,10 +194,14 @@ lookup is still done for root, not the user specified by .Ev SUDO_USER . .Pp .Em sudoers -uses time stamp files for credential caching. -Once a -user has been authenticated, the time stamp is updated and the user -may then use sudo without a password for a short period of time +uses per-user time stamp files for credential caching. +Once a user has been authenticated, a record is written +containing the uid that 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 +.Nm sudo +without a password for a short period of time .Po .Li @timeout@ minutes unless overridden by the @@ -206,8 +210,8 @@ option .Pc . By default, .Em sudoers -uses a tty-based time stamp which means that -there is a separate time stamp for each of a user's login sessions. +uses a separate record for each tty, which means that +a user's login sessions are authenticated separately. The .Em tty_tickets option can be disabled to force the use of a @@ -344,7 +348,7 @@ and, as such, it is not possible for to preserve them. .Pp As a special case, if -.Nm sudo Ns No 's +.Nm sudo Ns 's .Fl i option (initial login) is specified, @@ -529,7 +533,7 @@ non-Unix group names and IDs (prefixed with and .Ql %:# respectively) and -.Li User_Alias Ns No es. +.Li User_Alias Ns es. Each list item may be prefixed with zero or more .Ql \&! operators. @@ -603,9 +607,9 @@ is similar to a .Li User_List except that instead of -.Li User_Alias Ns No es +.Li User_Alias Ns es it can contain -.Li Runas_Alias Ns No es . +.Li Runas_Alias Ns es . Note that user names and groups are matched as strings. In other words, two @@ -871,7 +875,7 @@ may be run as. A fully-specified .Li Runas_Spec consists of two -.Li Runas_List Ns No s +.Li Runas_List Ns s (as defined above) separated by a colon .Pq Ql :\& and enclosed in a set of parentheses. @@ -879,18 +883,18 @@ The first .Li Runas_List indicates which users the command may be run as via -.Nm sudo Ns No 's +.Nm sudo Ns 's .Fl u option. The second defines a list of groups that can be specified via -.Nm sudo Ns No 's +.Nm sudo Ns 's .Fl g option. If both -.Li Runas_List Ns No s +.Li Runas_List Ns s are specified, the command may be run with any combination of users and groups listed in their respective -.Li Runas_List Ns No s. +.Li Runas_List Ns s. If only the first is specified, the command may be run as any user in the list but no .Fl g @@ -903,7 +907,7 @@ second is specified, the command may be run as the invoking user with the group set to any listed in the .Li Runas_List . If both -.Li Runas_List Ns No s +.Li Runas_List Ns s are empty, the command may only be run as the invoking user. If no .Li Runas_Spec @@ -926,7 +930,7 @@ may run .Pa /bin/ls , .Pa /bin/kill , and -.Pa /usr/bin/lprm Ns No \(em Ns but +.Pa /usr/bin/lprm Ns \(em Ns but only as .Sy operator . E.g., @@ -1083,7 +1087,7 @@ and Once a tag is set on a .Li Cmnd , subsequent -.Li Cmnd Ns No s +.Li Cmnd Ns s in the .Li Cmnd_Spec_List , inherit the tag unless it is overridden by the opposite tag (in other words, @@ -1289,7 +1293,7 @@ it must be escaped. For example: .Bd -literal -offset 4n -/bin/ls [[\:alpha\:]]* +/bin/ls [[:\&alpha:\&]]* .Ed .Pp Would match any file name beginning with a letter. @@ -1575,7 +1579,7 @@ when used as part of a word (e.g.\& a user name or host name): .Ql )\& , .Ql \e . .Sh SUDOERS OPTIONS -.Nm sudo Ns No 's +.Nm sudo Ns 's behavior can be modified by .Li Default_Entry lines, as explained earlier. @@ -1624,7 +1628,7 @@ This flag is by default. .It closefrom_override If set, the user may use -.Nm sudo Ns No 's +.Nm sudo Ns 's .Fl C option which overrides the default starting point at which .Nm sudo @@ -1645,6 +1649,17 @@ by default when is compiled with .Sy zlib support. +.It use_netgroups +If set, netgroups (prefixed with +.Ql + ) , +may be used in place of a user or host. +For LDAP-based sudoers, netgroup support requires an expensive +substring match on the server. +If netgroups are not needed, this option can be disabled to reduce the +load on the LDAP server. +This flag is +.Em on +by default. .It exec_background By default, .Nm sudo @@ -1725,8 +1740,7 @@ if they match a value specified in .Li editor . This flag is .Em @env_editor@ -by -default. +by default. .It env_reset If set, .Nm sudo @@ -2209,7 +2223,8 @@ by default. .It rootpw If set, .Nm sudo -will prompt for the root password instead of the password of the invoking user. +will prompt for the root password instead of the password of the invoking user +when running a command or editing a file. This flag is .Em off by default. @@ -2220,7 +2235,8 @@ will prompt for the password of the user defined by the .Em runas_default option (defaults to .Li @runas_default@ ) -instead of the password of the invoking user. +instead of the password of the invoking user +when running a command or editing a file. This flag is .Em off by default. @@ -2356,8 +2372,8 @@ by the .Fl u option (defaults to .Li root ) -instead of the password of the invoking user. -In addition, the time stamp file name will include the target user's name. +instead of the password of the invoking user +when running a command or editing a file. Note that this flag precludes the use of a uid not listed in the passwd database as an argument to the .Fl u @@ -2369,9 +2385,8 @@ by default. If set, users must authenticate on a per-tty basis. With this flag enabled, .Nm sudo -will use a file named for the tty the user is -logged in on in the user's time stamp directory. -If disabled, the time stamp of the directory is used instead. +will use a separate record in the time stamp file for each tty. +If disabled, a single record is used for all login sessions. This flag is .Em @tty_tickets@ by default. @@ -2622,9 +2637,9 @@ escape sequences. .Pp In addition to the escape sequences, path names that end in six or more -.Li X Ns No s +.Li X Ns s will have the -.Li X Ns No s +.Li X Ns s replaced with a unique combination of digits and letters, similar to the .Xr mktemp 3 function. @@ -2638,7 +2653,20 @@ overwritten unless .Em iolog_file ends in six or more -.Li X Ns No s . +.Li X Ns s . +.It lecture_status_dir +The directory in which +.Nm sudo +stores per-user lecture status files. +Once a user has received the lecture, a zero-length file is +created in this directory so that +.Nm sudo +will not lecture the user again. +This directory should +.Em not +be cleared when the system reboots. +The default is +.Pa @vardir@/lectured . .It limitprivs The default Solaris limit privileges to use when constructing a new privilege set for a command. @@ -2818,10 +2846,12 @@ Defaults to The directory in which .Nm sudo stores its time stamp files. +This directory should be cleared when the system reboots. The default is -.Pa @timedir@ . +.Pa @rundir@/ts . .It timestampowner -The owner of the time stamp directory and the time stamps stored therein. +The owner of the lecture status directory, time stamp directory and all +files stored therein. The default is .Li root . .It type @@ -3120,7 +3150,7 @@ Environment variables to be preserved in the user's environment when the .Em env_reset option is in effect. This allows fine-grained control over the environment -.Nm sudo Ns No -spawned +.Nm sudo Ns -spawned processes will receive. The argument may be a double-quoted, space-separated list or a single value without double-quotes. @@ -3298,7 +3328,7 @@ failed attempts and the value of the .Em passwd_tries option. .It a password is required -.Nm sudo Ns No 's +.Nm sudo Ns 's .Fl n option was specified but a password was required. .It sorry, you are not allowed to set the following environment variables @@ -3419,15 +3449,34 @@ file) to the line in the .Xr sudo.conf @mansectform@ file. -.It unable to open @timedir@/username/ttyname +.It unable to open @rundir@/ts/username .Em sudoers was unable to read or create the user's time stamp file. -.It unable to write to @timedir@/username/ttyname +This can happen when +.Em timestampowner +is set to a user other than root and the mode on +.Pa @rundir@ +is not searchable by group or other. +The default mode for +.Pa @rundir@ +is 0711. +.It unable to write to @rundir@/ts/username .Em sudoers was unable to write to the user's time stamp file. -.It unable to mkdir to @timedir@/username +.It @rundir@/ts is owned by uid X, should be Y +The time stamp directory is owned by a user other than +.Em timestampowner . +This can occur when the value of +.Em timestampowner +has been changed. +.Em sudoers +will ignore the time stamp directory until the owner is corrected. +.It @rundir@/ts is group writable +The time stamp directory is group-writable; it should be writable only by +.Em timestampowner . +The default mode for the time stamp directory is 0700. .Em sudoers -was unable to create the user's time stamp directory. +will ignore the time stamp directory until the mode is corrected. .El .Ss Notes on logging via syslog By default, @@ -3506,10 +3555,14 @@ Local groups file List of network groups .It Pa @iolog_dir@ I/O log files -.It Pa @timedir@ +.It Pa @rundir@/ts Directory containing time stamps for the .Em sudoers security policy +.It Pa @vardir@/lectured +Directory containing lecture status files for the +.Em sudoers +security policy .It Pa /etc/environment Initial environment for .Fl i @@ -3945,7 +3998,7 @@ executes a program, that program is free to do whatever it pleases, including run other programs. This can be a security issue since it is not uncommon for a program to allow shell escapes, which lets a user bypass -.Nm sudo Ns No 's +.Nm sudo Ns 's access control and logging. Common programs that permit shell escapes include shells (obviously), editors, paginators, mail and terminal programs. @@ -3971,7 +4024,7 @@ variable (usually .Ev LD_PRELOAD ) to an alternate shared library. On such systems, -.Nm sudo Ns No 's +.Nm sudo Ns 's .Em noexec functionality can be used to prevent a program run by .Nm sudo @@ -4072,41 +4125,51 @@ will be updated with the contents of the temporary copy. .Em sudoers will check the ownership of its time stamp directory .Po -.Pa @timedir@ +.Pa @rundir@/ts by default .Pc and ignore the directory's contents if it is not owned by root or if it is writable by a user other than root. -On systems that allow non-root users to give away files via -.Xr chown 2 , -if the time stamp directory is located in a world-writable -directory (e.g.\&, -.Pa /tmp ) , -it is possible for a user to create the time stamp directory before +Older versions of +.Nm sudo +stored time stamp files in +.Pa /tmp ; +this is no longer recommended as it may be possible for a user +to create the time stamp themselves on systems that allow +unprivileged users to change the ownership of files they create. +.Pp +While the time stamp directory +.Em should +be cleared at reboot time, not all systems contain a +.Pa /var/run +directory. +To avoid potential problems, +.Em sudoers +will ignore time stamp files that date from before the machine booted +on systems where the boot time is available. +.Pp +Some systems with graphical desktop environments allow unprivileged +users to change the system clock. +Since +.Em sudoers +relies on the system clock for time stamp validation, it may be +possible on such systems for a user to run .Nm sudo -is run. -However, because +for longer than +.Em timestamp_timeout +by setting the clock back. +To combat this, .Em sudoers -checks the ownership and mode of the directory and its -contents, the only damage that can be done is to -.Dq hide -files by putting them in the time stamp dir. -This is unlikely to happen since once the time stamp dir is owned by root -and inaccessible by any other user, the user placing files there would be -unable to get them back out. +uses a monotonic clock (which never moves backwards) for its time stamps +if the system supports it. .Pp .Em sudoers will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * .Li TIMEOUT -will be ignored and sudo will log and complain. -This is done to keep a user from creating his/her own time stamp with a -bogus date on systems that allow users to give away files if the time -stamp directory is located in a world-writable directory. -.Pp -On systems where the boot time is available, +will be ignored and .Em sudoers -will ignore time stamps that date from before the machine booted. +will log and complain. .Pp Since time stamp files live in the file system, they can outlive a user's login session. @@ -4114,24 +4177,24 @@ As a result, a user may be able to login, run a command with .Nm sudo after authenticating, logout, login again, and run .Nm sudo -without authenticating so long as the time stamp file's modification -time is within +without authenticating so long as the record's time stamp is within .Li @timeout@ -minutes (or whatever the timeout is set to in +minutes (or whatever value the timeout is set to in .Em sudoers ) . When the .Em tty_tickets -option is enabled, the time stamp has per-tty granularity but still +option is enabled, the time stamp record includes the device +number of the terminal the user authenticated with. +This provides per-tty granularity but time stamp records still may outlive the user's session. -On Linux systems where the devpts filesystem is used, Solaris systems -with the devices filesystem, as well as other systems that utilize a -devfs filesystem that monotonically increase the inode number of devices -as they are created (such as Mac OS X), -.Em sudoers -is able to determine when a tty-based time stamp file is stale and will -ignore it. -Administrators should not rely on this feature as it is not universally -available. +The time stamp record also includes the session ID of the process +that last authenticated. +This prevents processes in different terminal sessions from using +the same time stamp record. +It also helps reduce the chance that a user will be able to run +.Nm sudo +without entering a password when logging out and back in again +on the same terminal. .Sh DEBUGGING Versions 1.8.4 and higher of the .Nm sudoers @@ -4146,7 +4209,7 @@ The plugin uses the same debug flag format as the .Nm sudo front-end: -.Em subsystem Ns No @ Ns Em priority . +.Em subsystem Ns @ Ns Em priority . .Pp The priorities used by .Nm sudoers , diff --git a/doc/sudoreplay.cat b/doc/sudoreplay.cat index 61dcc094a..62fcdd38b 100644 --- a/doc/sudoreplay.cat +++ b/doc/sudoreplay.cat @@ -265,4 +265,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 October 28, 2013 Sudo 1.8.9 +Sudo 1.8.10 February 15, 2014 Sudo 1.8.10 diff --git a/doc/sudoreplay.man.in b/doc/sudoreplay.man.in index 55970b841..eb53774c4 100644 --- a/doc/sudoreplay.man.in +++ b/doc/sudoreplay.man.in @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudoreplay.mdoc.in .\" -.\" Copyright (c) 2009-2013 Todd C. Miller <Todd.Miller@courtesan.com> +.\" Copyright (c) 2009-2014 Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -16,7 +16,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDOREPLAY" "@mansectsu@" "October 28, 2013" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDOREPLAY" "@mansectsu@" "February 15, 2014" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -36,7 +36,7 @@ ID [\fB\-h\fR] [\fB\-d\fR\ \fIdir\fR] \fB\-l\fR -[search expression] +[search\ expression] .SH "DESCRIPTION" \fBsudoreplay\fR plays back or lists the output logs created by @@ -82,16 +82,16 @@ In replay mode, if the standard output has not been redirected, \fBsudoreplay\fR will act on the following keys: .TP 14n -`\fR\en\fR' or `\fR\er\fR' +\(oq\fR\en\fR\(cq or \(oq\fR\er\fR\(cq Skip to the next replay event; useful for long pauses. .TP 14n -`\fR\ \fR' (space) +\(oq\fR\ \fR\(cq (space) Pause output; press any key to resume. .TP 14n -`<' +\(oq<\(cq Reduce the playback speed by one half. .TP 14n -`>' +\(oq>\(cq Double the playback speed. .PP The options are as follows: @@ -120,7 +120,7 @@ Display a short help message to the standard output and exit. .TP 12n \fB\-l\fR, \fB\--list\fR [\fIsearch expression\fR] Enable -``list mode''. +\(lqlist mode\(rq. In this mode, \fBsudoreplay\fR will list available sessions in a format similar to the @@ -130,7 +130,9 @@ If a \fIsearch expression\fR is specified, it will be used to restrict the IDs that are displayed. An expression is composed of the following predicates: -.RS +.PP +.RS 12n +.PD 0 .TP 8n command \fIpattern\fR Evaluates to true if the command run matches @@ -139,6 +141,7 @@ On systems with POSIX regular expression support, the pattern may be an extended regular expression. On systems without POSIX regular expression support, a simple sub-string match is performed instead. +.PD .TP 8n cwd \fIdirectory\fR Evaluates to true if the command was run with the specified current @@ -200,9 +203,9 @@ Predicates may be combined using and \fI\&!\fR operators as well as -`\&(' +\(oq\&(\(cq and -`\&)' +\(oq\&)\(cq grouping (note that parentheses must generally be escaped from the shell). The \fIand\fR @@ -210,9 +213,7 @@ operator is optional, adjacent predicates have an implied \fIand\fR unless separated by an \fIor\fR. -.PP .RE -.PD 0 .TP 12n \fB\-m\fR, \fB\--max-wait\fR \fImax_wait\fR Specify an upper bound on how long to wait between key presses or output data. @@ -229,7 +230,6 @@ will limit these pauses to at most seconds. The value may be specified as a floating point number, e.g.\& \fI2.5\fR. -.PD .TP 12n \fB\-s\fR, \fB\--speed\fR \fIspeed_factor\fR This option causes @@ -291,13 +291,13 @@ yesterday next Friday The first second of the Friday in the next (upcoming) week. Not to be confused with -``this friday'' +\(lqthis friday\(rq which would match the friday of the current week. .TP 8n last week The current time but 7 days ago. This is equivalent to -``a week ago''. +\(lqa week ago\(rq. .TP 8n a fortnight ago The current time but 14 days ago. @@ -319,13 +319,13 @@ The current time but 14 days ago. .PP Note that relative time specifications do not always work as expected. For example, the -``next'' +\(lqnext\(rq qualifier is intended to be used in conjunction with a day such as -``next Monday''. +\(lqnext Monday\(rq. When used with units of weeks, months, years, etc the result will be one more than expected. For example, -``next week'' +\(lqnext week\(rq 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 @@ -417,7 +417,7 @@ search the archives. .SH "DISCLAIMER" \fBsudoreplay\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/sudoreplay.mdoc.in b/doc/sudoreplay.mdoc.in index bf20bd367..004a17aff 100644 --- a/doc/sudoreplay.mdoc.in +++ b/doc/sudoreplay.mdoc.in @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2009-2013 Todd C. Miller <Todd.Miller@courtesan.com> +.\" Copyright (c) 2009-2014 Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd October 28, 2013 +.Dd February 15, 2014 .Dt SUDOREPLAY @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -23,25 +23,15 @@ .Sh SYNOPSIS .Nm sudoreplay .Op Fl h -.Bk -words .Op Fl d Ar dir -.Ek -.Bk -words .Op Fl f Ar filter -.Ek -.Bk -words .Op Fl m Ar num -.Ek -.Bk -words .Op Fl s Ar num -.Ek ID .Pp .Nm sudoreplay .Op Fl h -.Bk -words .Op Fl d Ar dir -.Ek .Fl l .Op search expression .Sh DESCRIPTION @@ -77,7 +67,7 @@ log file. The .Em ID may also be determined using -.Nm sudoreplay Ns No 's +.Nm sudoreplay Ns 's list mode. .Pp In list mode, @@ -91,7 +81,7 @@ will act on the following keys: .Bl -tag -width 12n .It So Li \en Sc No or So Li \er Sc Skip to the next replay event; useful for long pauses. -.It So Li \ Sc No (space) +.It So Li \ Sc Pq space Pause output; press any key to resume. .It Ql < Reduce the playback speed by one half. @@ -101,12 +91,12 @@ Double the playback speed. .Pp The options are as follows: .Bl -tag -width Fl -.It Fl d Ar dir , Fl -directory Ns No = Ns Ar dir +.It Fl d Ar dir , Fl -directory Ns = Ns Ar dir Store session logs in .Ar dir instead of the default, .Pa @iolog_dir@ . -.It Fl f Ar filter , Fl -filter Ns No = Ns Ar filter +.It Fl f Ar filter , Fl -filter Ns = Ns Ar filter Select which I/O type(s) to display. By default, .Nm sudoreplay diff --git a/doc/visudo.cat b/doc/visudo.cat index 186d56b23..a7b91ea75 100644 --- a/doc/visudo.cat +++ b/doc/visudo.cat @@ -26,7 +26,7 @@ DDEESSCCRRIIPPTTIIOONN 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 + 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, @@ -156,4 +156,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or http://www.sudo.ws/sudo/license.html for complete details. -Sudo 1.8.9 December 16, 2013 Sudo 1.8.9 +Sudo 1.8.10 February 15, 2014 Sudo 1.8.10 diff --git a/doc/visudo.man.in b/doc/visudo.man.in index 3e1e29f8c..4f622e112 100644 --- a/doc/visudo.man.in +++ b/doc/visudo.man.in @@ -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-2013 +.\" Copyright (c) 1996,1998-2005, 2007-2014 .\" Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" 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" "@mansectsu@" "December 16, 2013" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "VISUDO" "@mansectsu@" "February 15, 2014" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -94,19 +94,19 @@ Upon finding an error, \fBvisudo\fR will print a message stating the line number(s) where the error occurred and the user will receive the -``What now?'' +\(lqWhat now?\(rq prompt. At this point the user may enter -`e' +\(oqe\(cq to re-edit the \fIsudoers\fR file, -`x' +\(oqx\(cq to exit without saving the changes, or -`Q' +\(oqQ\(cq to quit and save changes. The -`Q' +\(oqQ\(cq option should be used with extreme care because if \fBvisudo\fR believes there to be a parse error, so will @@ -116,7 +116,7 @@ will be able to \fBsudo\fR again until the error is fixed. If -`e' +\(oqe\(cq is typed to edit the \fIsudoers\fR file after a parse error has been detected, the cursor will be placed on @@ -158,14 +158,14 @@ instead of the default, The lock file used is the specified \fIsudoers\fR file with -``\.tmp'' +\(lq\.tmp\(rq appended to it. In \fIcheck-only\fR mode only, the argument to \fB\-f\fR may be -`-', +\(oq-\(cq, indicating that \fIsudoers\fR will be read from the standard input. @@ -195,7 +195,7 @@ 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 -(`_') +(\(oq_\(cq) character. .TP 12n \fB\-V\fR, \fB\--version\fR @@ -213,7 +213,7 @@ in JSON format and write it to If \fIfile\fR is -`-', +\(oq-\(cq, the exported \fIsudoers\fR policy will to be written to the standard output. @@ -271,7 +271,7 @@ Your user ID does not appear in the system passwd file. 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 -(`_') +(\(oq_\(cq) character. In the latter case, you can ignore the warnings (\fBsudo\fR @@ -333,7 +333,7 @@ search the archives. .SH "DISCLAIMER" \fBvisudo\fR is provided -``AS IS'' +\(lqAS IS\(rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. diff --git a/doc/visudo.mdoc.in b/doc/visudo.mdoc.in index 090816465..cc89a1241 100644 --- a/doc/visudo.mdoc.in +++ b/doc/visudo.mdoc.in @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1996,1998-2005, 2007-2013 +.\" Copyright (c) 1996,1998-2005, 2007-2014 .\" Todd C. Miller <Todd.Miller@courtesan.com> .\" .\" 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 December 16, 2013 +.Dd February 15, 2014 .Dt VISUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -28,12 +28,8 @@ .Sh SYNOPSIS .Nm visudo .Op Fl chqsV -.Bk -words .Op Fl f Ar sudoers -.Ek -.Bk -words .Op Fl x Ar file -.Ek .Sh DESCRIPTION .Nm visudo edits the @@ -144,7 +140,7 @@ will exit with a value of 0. If an error is encountered, .Nm visudo will exit with a value of 1. -.It Fl f Ar sudoers , Fl -file Ns No = Ns Ar sudoers +.It Fl f Ar sudoers , Fl -file Ns = Ns Ar sudoers Specify an alternate .Em sudoers file location. @@ -200,7 +196,7 @@ Print the and .Em sudoers grammar versions and exit. -.It Fl x Ar file , Fl -export Ns No = Ns Ar file +.It Fl x Ar file , Fl -export Ns = Ns Ar file Export .Em sudoers in JSON format and write it to diff --git a/include/Makefile.in b/include/Makefile.in index 42058ddfa..7644991b0 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2012 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -72,6 +72,8 @@ install-plugin: uninstall: -rm -f $(DESTDIR)$(includedir)/sudo_plugin.h +cppcheck: + check: clean: diff --git a/include/missing.h b/include/missing.h index 014ce8939..f712cc1da 100644 --- a/include/missing.h +++ b/include/missing.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2008, 2009-2013 + * Copyright (c) 1996, 1998-2005, 2008, 2009-2014 * Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any @@ -312,41 +312,6 @@ const char *getprogname(void); extern int errno; #endif /* !HAVE_DECL_ERRNO */ -#ifndef timevalclear -# define timevalclear(tv) ((tv)->tv_sec = (tv)->tv_usec = 0) -#endif -#ifndef timevalisset -# define timevalisset(tv) ((tv)->tv_sec || (tv)->tv_usec) -#endif -#ifndef timevalcmp -# define timevalcmp(tv1, tv2, op) \ - (((tv1)->tv_sec == (tv2)->tv_sec) ? \ - ((tv1)->tv_usec op (tv2)->tv_usec) : \ - ((tv1)->tv_sec op (tv2)->tv_sec)) -#endif -#ifndef timevaladd -# define timevaladd(tv1, tv2) \ - do { \ - (tv1)->tv_sec += (tv2)->tv_sec; \ - (tv1)->tv_usec += (tv2)->tv_usec; \ - if ((tv1)->tv_usec >= 1000000) { \ - (tv1)->tv_sec++; \ - (tv1)->tv_usec -= 1000000; \ - } \ - } while (0) -#endif -#ifndef timevalsub -# define timevalsub(tv1, tv2) \ - do { \ - (tv1)->tv_sec -= (tv2)->tv_sec; \ - (tv1)->tv_usec -= (tv2)->tv_usec; \ - if ((tv1)->tv_usec < 0) { \ - (tv1)->tv_sec--; \ - (tv1)->tv_usec += 1000000; \ - } \ - } while (0) -#endif - /* Not all systems define NSIG in signal.h */ #if !defined(NSIG) # if defined(_NSIG) @@ -471,5 +436,15 @@ long long rpl_strtonum(const char *, long long, long long, const char **); # undef strtonum # define strtonum rpl_strtonum #endif +#ifndef HAVE_CLOCK_GETTIME +# define CLOCK_REALTIME 0 +# ifdef __MACH__ +# define CLOCK_MONOTONIC 1 +# endif +int clock_gettime(clockid_t clock_id, struct timespec *tp); +#endif +#ifndef HAVE_INET_PTON +int inet_pton(int af, const char *src, void *dst); +#endif #endif /* _SUDO_MISSING_H */ diff --git a/include/sudo_conf.h b/include/sudo_conf.h index 27a096d06..6350e9c76 100644 --- a/include/sudo_conf.h +++ b/include/sudo_conf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -43,6 +43,7 @@ const char *sudo_conf_plugin_dir_path(void); const char *sudo_conf_debug_flags(void); struct plugin_info_list *sudo_conf_plugins(void); bool sudo_conf_disable_coredump(void); +bool sudo_conf_probe_interfaces(void); int sudo_conf_group_source(void); int sudo_conf_max_groups(void); diff --git a/include/sudo_util.h b/include/sudo_util.h index 93e38f325..c1ded741f 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2013-2014 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -23,6 +23,119 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +/* + * Macros for operating on struct timeval. + */ +#define sudo_timevalclear(tv) ((tv)->tv_sec = (tv)->tv_usec = 0) + +#define sudo_timevalisset(tv) ((tv)->tv_sec || (tv)->tv_usec) + +#define sudo_timevalcmp(tv1, tv2, op) \ + (((tv1)->tv_sec == (tv2)->tv_sec) ? \ + ((tv1)->tv_usec op (tv2)->tv_usec) : \ + ((tv1)->tv_sec op (tv2)->tv_sec)) + +#define sudo_timevaladd(tv1, tv2, tv3) \ + do { \ + (tv3)->tv_sec = (tv1)->tv_sec + (tv2)->tv_sec; \ + (tv3)->tv_usec = (tv1)->tv_usec + (tv2)->tv_usec; \ + if ((tv3)->tv_usec >= 1000000) { \ + (tv3)->tv_sec++; \ + (tv3)->tv_usec -= 1000000; \ + } \ + } while (0) + +#define sudo_timevalsub(tv1, tv2, tv3) \ + do { \ + (tv3)->tv_sec = (tv1)->tv_sec - (tv2)->tv_sec; \ + (tv3)->tv_usec = (tv1)->tv_usec - (tv2)->tv_usec; \ + if ((tv3)->tv_usec < 0) { \ + (tv3)->tv_sec--; \ + (tv3)->tv_usec += 1000000; \ + } \ + } while (0) + +#ifndef TIMEVAL_TO_TIMESPEC +# define TIMEVAL_TO_TIMESPEC(tv, ts) \ + do { \ + (ts)->tv_sec = (tv)->tv_sec; \ + (ts)->tv_nsec = (tv)->tv_usec * 1000; \ + } while (0) +#endif + +/* + * Macros for operating on struct timespec. + */ +#define sudo_timespecclear(ts) ((ts)->tv_sec = (ts)->tv_nsec = 0) + +#define sudo_timespecisset(ts) ((ts)->tv_sec || (ts)->tv_nsec) + +#define sudo_timespeccmp(ts1, ts2, op) \ + (((ts1)->tv_sec == (ts2)->tv_sec) ? \ + ((ts1)->tv_nsec op (ts2)->tv_nsec) : \ + ((ts1)->tv_sec op (ts2)->tv_sec)) + +#define sudo_timespecadd(ts1, ts2, ts3) \ + do { \ + (ts3)->tv_sec = (ts1)->tv_sec + (ts2)->tv_sec; \ + (ts3)->tv_nsec = (ts1)->tv_nsec + (ts2)->tv_nsec; \ + while ((ts3)->tv_nsec >= 1000000000) { \ + (ts3)->tv_sec++; \ + (ts3)->tv_nsec -= 1000000000; \ + } \ + } while (0) + +#define sudo_timespecsub(ts1, ts2, ts3) \ + do { \ + (ts3)->tv_sec = (ts1)->tv_sec - (ts2)->tv_sec; \ + (ts3)->tv_nsec = (ts1)->tv_nsec - (ts2)->tv_nsec; \ + while ((ts3)->tv_nsec < 0) { \ + (ts3)->tv_sec--; \ + (ts3)->tv_nsec += 1000000000; \ + } \ + } while (0) + +#ifndef TIMESPEC_TO_TIMEVAL +# define TIMESPEC_TO_TIMEVAL(tv, ts) \ + do { \ + (tv)->tv_sec = (ts)->tv_sec; \ + (tv)->tv_usec = (ts)->tv_nsec / 1000; \ + } while (0) +#endif + +/* + * Macros to extract ctime and mtime as timevals. + */ +#ifdef HAVE_ST_MTIM +# ifdef HAVE_ST__TIM +# define ctim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_ctim.st__tim) +# define mtim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_mtim.st__tim) +# else +# define ctim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_ctim) +# define mtim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_mtim) +# endif +#else +# ifdef HAVE_ST_MTIMESPEC +# define ctim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_ctimespec) +# define mtim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_mtimespec) +# else +# define ctim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0) +# define mtim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0) +# endif /* HAVE_ST_MTIMESPEC */ +#endif /* HAVE_ST_MTIM */ + +/* + * Macros to quiet gcc's warn_unused_result attribute. + */ +#ifdef __GNUC__ +# define ignore_result(x) do { \ + __typeof__(x) y = (x); \ + (void)y; \ +} while(0) +#else +# define ignore_result(x) (void)(x) +#endif + /* aix.c */ void aix_prep_user(char *user, const char *tty); void aix_restoreauthdb(void); @@ -50,11 +163,11 @@ void initprogname(const char *); int sudo_setgroups(int ngids, const GETGROUPS_T *gids); /* term.c */ -int term_cbreak(int); -int term_copy(int, int); -int term_noecho(int); -int term_raw(int, int); -int term_restore(int, int); +bool term_cbreak(int); +bool term_copy(int, int); +bool term_noecho(int); +bool term_raw(int, int); +bool term_restore(int, bool); /* ttysize.c */ void get_ttysize(int *rowp, int *colp); diff --git a/init.d/aix.sh.in b/init.d/aix.sh.in new file mode 100644 index 000000000..3d1124175 --- /dev/null +++ b/init.d/aix.sh.in @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Simple AIX rc.d script to remove the sudo timestamp directory on boot. +# This is needed because AIX does not have /var/run. +# Install as /etc/rc.d/init.d/sudo with a link /etc/rc.d/rc2.d/S90sudo +# + +PATH=/usr/sbin:/usr/bin:/sbin +export PATH + +TSDIR="@rundir@/ts" +rval=0 + +case "$1" in +start) + echo "Removing the $TSDIR directory" + rm -rf "$TSDIR" + ;; +*) + echo "usage: $0 start" + rval=1 + ;; +esac + +exit $rval diff --git a/init.d/hpux.sh.in b/init.d/hpux.sh.in new file mode 100644 index 000000000..5a76bd25b --- /dev/null +++ b/init.d/hpux.sh.in @@ -0,0 +1,27 @@ +#!/sbin/sh +# +# Simple HP-UX init.d script to remove the sudo timestamp directory on boot. +# This is needed because HP-UX does not clear /var/run on its own. +# Install as /sbin/init.d/sudo with a link /sbin/rc2.d/S900sudo +# + +PATH=/usr/sbin:/usr/bin:/sbin +export PATH + +TSDIR="@rundir@/ts" +rval=0 + +case "$1" in +start_msg) + echo "Removing the $TSDIR directory" + ;; +start) + rm -rf "$TSDIR" + ;; +*) + echo "usage: $0 {start|start_msg}" + rval=1 + ;; +esac + +exit $rval diff --git a/m4/sudo.m4 b/m4/sudo.m4 index 234b4ec80..2673a1a97 100644 --- a/m4/sudo.m4 +++ b/m4/sudo.m4 @@ -1,6 +1,6 @@ dnl Local m4 macros for autoconf (used by sudo) dnl -dnl Copyright (c) 1994-1996, 1998-2005, 2007-2013 +dnl Copyright (c) 1994-1996, 1998-2005, 2007-2014 dnl Todd C. Miller <Todd.Miller@courtesan.com> dnl dnl XXX - should cache values in all cases!!! @@ -119,20 +119,37 @@ fi ])dnl dnl -dnl Where the timestamp files go. +dnl Parent directory for time stamp dir. dnl -AC_DEFUN([SUDO_TIMEDIR], [AC_MSG_CHECKING(for timestamp file location) -timedir="$with_timedir" -if test -z "$timedir"; then +AC_DEFUN([SUDO_RUNDIR], [AC_MSG_CHECKING(for sudo run dir location) +rundir="$with_rundir" +if test -z "$rundir"; then + for d in /var/run /var/db /var/lib /var/adm /usr/adm; do + if test -d "$d"; then + rundir="$d/sudo" + break + fi + done +fi +AC_MSG_RESULT([$rundir]) +SUDO_DEFINE_UNQUOTED(_PATH_SUDO_TIMEDIR, "$rundir/ts") +])dnl + +dnl +dnl Parent directory for the lecture status dir. +dnl +AC_DEFUN([SUDO_VARDIR], [AC_MSG_CHECKING(for sudo var dir location) +vardir="$with_vardir" +if test -z "$vardir"; then for d in /var/db /var/lib /var/adm /usr/adm; do if test -d "$d"; then - timedir="$d/sudo" + vardir="$d/sudo" break fi done fi -AC_MSG_RESULT([$timedir]) -SUDO_DEFINE_UNQUOTED(_PATH_SUDO_TIMEDIR, "$timedir") +AC_MSG_RESULT([$vardir]) +SUDO_DEFINE_UNQUOTED(_PATH_SUDO_LECTURE_DIR, "$vardir/lectured") ])dnl dnl @@ -1,6 +1,6 @@ #!/usr/bin/env perl # -# Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -70,7 +70,7 @@ sub mkdep { $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.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 isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo strtonum.lo utimes.lo globtest.o fnm_test.o:; + $makefile =~ s:\@LTLIBOBJS\@:clock_gettime.lo closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo strtonum.lo utimes.lo globtest.o fnm_test.o inet_pton:; # Parse OBJS lines my %objs; @@ -212,9 +212,7 @@ case "$osversion" in --with-timeout=15 --with-password-timeout=0 --with-passprompt=[sudo] password for %p: - --with-timedir=/var/lib/sudo --disable-root-mailer - --disable-setresuid --with-sendmail=/usr/sbin/sendmail --mandir=/usr/share/man --libexecdir=/usr/lib diff --git a/pathnames.h.in b/pathnames.h.in index e47bec1ba..c9dd96143 100644 --- a/pathnames.h.in +++ b/pathnames.h.in @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998, 1999, 2001, 2004, 2005, 2007-2012 + * Copyright (c) 1996, 1998, 1999, 2001, 2004, 2005, 2007-2014 * Todd C. Miller <Todd.Miller@courtesan.com>. * * Permission to use, copy, modify, and distribute this software for any @@ -74,14 +74,24 @@ */ /* - * Where to put the timestamp files. Defaults to /var/run/sudo, - * /var/adm/sudo or /usr/adm/sudo depending on what exists. + * Where to store the time stamp files. Defaults to /var/run/sudo/ts, + * /var/db/sudo/ts, /var/lib/sudo/ts, /var/adm/sudo/ts or /usr/adm/sudo/ts + * depending on what exists on the system. */ #ifndef _PATH_SUDO_TIMEDIR #undef _PATH_SUDO_TIMEDIR #endif /* _PATH_SUDO_TIMEDIR */ /* + * Where to store the lecture status files. Defaults to /var/db/sudo/lectured, + * /var/lib/sudo/lectured, /var/adm/sudo/lectured or /usr/adm/sudo/lectured + * depending on what exists on the system. + */ +#ifndef _PATH_SUDO_LECTURE_DIR +#undef _PATH_SUDO_LECTURE_DIR +#endif /* _PATH_SUDO_LECTURE_DIR */ + +/* * Where to put the I/O log files. Defaults to /var/log/sudo-io, * /var/adm/sudo-io or /usr/adm/sudo-io depending on what exists. */ diff --git a/plugins/group_file/Makefile.in b/plugins/group_file/Makefile.in index 8370d48db..7c8102a49 100644 --- a/plugins/group_file/Makefile.in +++ b/plugins/group_file/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -55,6 +55,9 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -126,6 +129,9 @@ install-plugin: install-dirs group_file.la uninstall: -rm -f $(DESTDIR)$(plugindir)/group_file.so +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + check: clean: diff --git a/plugins/group_file/plugin_test.c b/plugins/group_file/plugin_test.c index cd63bffdf..cc8a0865f 100644 --- a/plugins/group_file/plugin_test.c +++ b/plugins/group_file/plugin_test.c @@ -155,7 +155,7 @@ static int group_plugin_query(const char *user, const char *group, const struct passwd *pwd) { - return group_plugin->query)(user, group, pwd; + return (group_plugin->query)(user, group, pwd); } static void diff --git a/plugins/sample/Makefile.in b/plugins/sample/Makefile.in index 37f7e5c08..db8bc4c7a 100644 --- a/plugins/sample/Makefile.in +++ b/plugins/sample/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -54,6 +54,9 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -125,6 +128,9 @@ install-plugin: install-dirs sample_plugin.la uninstall: -rm -f $(DESTDIR)$(plugindir)/sample_plugin.so +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + check: clean: @@ -144,6 +150,7 @@ cleandir: realclean # Autogenerated dependencies, do not modify sample_plugin.lo: $(srcdir)/sample_plugin.c $(incdir)/missing.h \ - $(incdir)/sudo_plugin.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h + $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h \ + $(top_srcdir)/compat/stdbool.h $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sample_plugin.c diff --git a/plugins/sample/sample_plugin.c b/plugins/sample/sample_plugin.c index f1d6392e7..202f9bf2e 100644 --- a/plugins/sample/sample_plugin.c +++ b/plugins/sample/sample_plugin.c @@ -55,6 +55,7 @@ #include <pathnames.h> #include "sudo_plugin.h" +#include "sudo_util.h" #include "missing.h" /* diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 5a7c653e1..073b85e9b 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 1998-2005, 2007-2013 +# Copyright (c) 1996, 1998-2005, 2007-2014 # Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any @@ -31,8 +31,9 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ incdir = $(top_srcdir)/include docdir = @docdir@ -timedir = @timedir@ libdir = @libdir@ +rundir = @rundir@ +vardir = @vardir@ cross_compiling = @CROSS_COMPILING@ # Compiler & tools to use @@ -70,6 +71,9 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -285,8 +289,10 @@ install-dirs: $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(plugindir) \ $(DESTDIR)$(visudodir) $(DESTDIR)$(replaydir) \ $(DESTDIR)$(sudoersdir) $(DESTDIR)$(docdir) \ - `echo $(DESTDIR)$(timedir)|sed 's,/[^/]*$$,,'` - $(INSTALL) -d -O $(install_uid) -G $(install_gid) -m 0700 $(DESTDIR)$(timedir) + `echo $(DESTDIR)$(rundir)|sed 's,/[^/]*$$,,'` \ + `echo $(DESTDIR)$(vardir)|sed 's,/[^/]*$$,,'` + $(INSTALL) -d -O $(install_uid) -G $(install_gid) -m 0711 $(DESTDIR)$(rundir) + $(INSTALL) -d -O $(install_uid) -G $(install_gid) -m 0711 $(DESTDIR)$(vardir) install-binaries: visudo sudoreplay install-dirs $(INSTALL) -b~ -O $(install_uid) -G $(install_gid) -m 0755 sudoreplay $(DESTDIR)$(replaydir)/sudoreplay @@ -318,6 +324,9 @@ uninstall: -cmp $(DESTDIR)$(sudoersdir)/sudoers $(srcdir)/sudoers >/dev/null && \ rm -f $(DESTDIR)$(sudoersdir)/sudoers +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(devdir) -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c $(srcdir)/auth/*.c + check: $(TEST_PROGS) visudo testsudoers @if test X"$(cross_compiling)" != X"yes"; then \ rval=0; \ @@ -702,8 +711,9 @@ match_addr.lo: $(srcdir)/match_addr.c $(devdir)/def_data.h $(incdir)/alloc.h \ $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/match_addr.c match_addr.o: match_addr.lo net_ifs.o: $(top_srcdir)/src/net_ifs.c $(incdir)/alloc.h $(incdir)/fatal.h \ - $(incdir)/gettext.h $(incdir)/missing.h $(incdir)/sudo_debug.h \ - $(top_builddir)/config.h + $(incdir)/gettext.h $(incdir)/missing.h $(incdir)/queue.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(top_srcdir)/src/net_ifs.c pam.lo: $(authdir)/pam.c $(devdir)/def_data.h $(incdir)/alloc.h \ $(incdir)/fatal.h $(incdir)/fileops.h $(incdir)/gettext.h \ @@ -875,11 +885,12 @@ testsudoers.o: $(srcdir)/testsudoers.c $(devdir)/def_data.h $(devdir)/gram.h \ $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/testsudoers.c timestamp.lo: $(srcdir)/timestamp.c $(devdir)/def_data.h $(incdir)/alloc.h \ $(incdir)/fatal.h $(incdir)/fileops.h $(incdir)/gettext.h \ - $(incdir)/missing.h $(incdir)/queue.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h $(srcdir)/check.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h $(top_srcdir)/compat/stdbool.h + $(incdir)/missing.h $(incdir)/queue.h $(incdir)/secure_path.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_util.h $(srcdir)/check.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h \ + $(top_srcdir)/compat/stdbool.h $(top_srcdir)/compat/timespec.h $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/timestamp.c timestr.lo: $(srcdir)/timestr.c $(incdir)/missing.h $(top_builddir)/config.h $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/timestr.c diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index 68a98d79c..b0dbcb321 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -33,6 +33,9 @@ #endif /* HAVE_STDBOOL_H */ #include <stdarg.h> +#define DEFAULT_TEXT_DOMAIN "sudoers" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "logging.h" #include "sudo_debug.h" @@ -44,9 +47,6 @@ # include "linux_audit.h" #endif -#define DEFAULT_TEXT_DOMAIN "sudoers" -#include "gettext.h" - void audit_success(char *exec_args[]) { diff --git a/plugins/sudoers/auth/secureware.c b/plugins/sudoers/auth/secureware.c index f487f2f7a..c89ed6398 100644 --- a/plugins/sudoers/auth/secureware.c +++ b/plugins/sudoers/auth/secureware.c @@ -86,8 +86,8 @@ sudo_secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth) epass = bigcrypt(pass, pw_epasswd); else if (crypt_type == AUTH_CRYPT_CRYPT16) epass = crypt(pass, pw_epasswd); - } # endif /* HAVE_DISPCRYPT */ + } #elif defined(HAVE_BIGCRYPT) epass = bigcrypt(pass, pw_epasswd); #endif /* __alpha */ diff --git a/plugins/sudoers/bsm_audit.c b/plugins/sudoers/bsm_audit.c index 816d07a66..1426986a9 100644 --- a/plugins/sudoers/bsm_audit.c +++ b/plugins/sudoers/bsm_audit.c @@ -30,9 +30,11 @@ #include <errno.h> #include <unistd.h> +#define DEFAULT_TEXT_DOMAIN "sudoers" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "fatal.h" -#include "gettext.h" #include "sudo_debug.h" #include "bsm_audit.h" diff --git a/plugins/sudoers/check.c b/plugins/sudoers/check.c index a25077633..2e7799227 100644 --- a/plugins/sudoers/check.c +++ b/plugins/sudoers/check.c @@ -53,7 +53,7 @@ #include "check.h" static bool display_lecture(int); -static struct passwd *get_authpw(void); +static struct passwd *get_authpw(int); /* * Returns true if the user successfully authenticates, false if not @@ -123,7 +123,7 @@ check_user(int validated, int mode) * Init authentication system regardless of whether we need a password. * Required for proper PAM session support. */ - auth_pw = get_authpw(); + auth_pw = get_authpw(mode); if (sudo_auth_init(auth_pw) == -1) { rval = -1; goto done; @@ -217,26 +217,32 @@ user_is_exempt(void) * case, this matches sudo_user.pw or runas_pw. */ static struct passwd * -get_authpw(void) +get_authpw(int mode) { struct passwd *pw; debug_decl(get_authpw, SUDO_DEBUG_AUTH) - if (def_rootpw) { - if ((pw = sudo_getpwuid(ROOT_UID)) == NULL) - log_fatal(0, N_("unknown uid: %u"), ROOT_UID); - } else if (def_runaspw) { - if ((pw = sudo_getpwnam(def_runas_default)) == NULL) - log_fatal(0, N_("unknown user: %s"), def_runas_default); - } else if (def_targetpw) { - if (runas_pw->pw_name == NULL) - log_fatal(NO_MAIL|MSG_ONLY, N_("unknown uid: %u"), - (unsigned int) runas_pw->pw_uid); - sudo_pw_addref(runas_pw); - pw = runas_pw; - } else { + if (ISSET(mode, (MODE_CHECK|MODE_LIST))) { + /* In list mode we always prompt for the user's password. */ sudo_pw_addref(sudo_user.pw); pw = sudo_user.pw; + } else { + if (def_rootpw) { + if ((pw = sudo_getpwuid(ROOT_UID)) == NULL) + log_fatal(0, N_("unknown uid: %u"), ROOT_UID); + } else if (def_runaspw) { + if ((pw = sudo_getpwnam(def_runas_default)) == NULL) + log_fatal(0, N_("unknown user: %s"), def_runas_default); + } else if (def_targetpw) { + if (runas_pw->pw_name == NULL) + log_fatal(NO_MAIL|MSG_ONLY, N_("unknown uid: %u"), + (unsigned int) runas_pw->pw_uid); + sudo_pw_addref(runas_pw); + pw = runas_pw; + } else { + sudo_pw_addref(sudo_user.pw); + pw = sudo_user.pw; + } } debug_return_ptr(pw); diff --git a/plugins/sudoers/check.h b/plugins/sudoers/check.h index 5d73756d6..c28d93413 100644 --- a/plugins/sudoers/check.h +++ b/plugins/sudoers/check.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1993-1996,1998-2005, 2007-2013 + * Copyright (c) 1993-1996,1998-2005, 2007-2014 * Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any @@ -29,21 +29,38 @@ #define TS_NOFILE 3 #define TS_ERROR 4 -/* This may be a function in some implementations. */ -#define already_lectured(s) (s != TS_MISSING && s != TS_ERROR) - /* - * Info stored in tty ticket from stat(2) to help with tty matching. + * Time stamps are now stored in a single file which contains multiple + * records. Each record starts with a 16-bit version number and a 16-bit + * record size. Multiple record types can coexist in the same file. */ -struct sudo_tty_info { - dev_t dev; /* ID of device tty resides on */ - dev_t rdev; /* tty device ID */ - ino_t ino; /* tty inode number */ - uid_t uid; /* tty owner */ - gid_t gid; /* tty group */ - pid_t sid; /* ID of session with controlling tty */ +#define TS_VERSION 1 + +/* Time stamp entry types */ +#define TS_GLOBAL 0x01 +#define TS_TTY 0x02 +#define TS_PPID 0x03 + +/* Time stamp flags */ +#define TS_DISABLED 0x01 /* entry disabled */ +#define TS_ANYUID 0x02 /* ignore uid, only valid in the key */ + +/* XXX - may also want to store uid/gid of tty device */ +struct timestamp_entry { + unsigned short version; /* version number */ + unsigned short size; /* entry size */ + unsigned short type; /* TS_GLOBAL, TS_TTY, TS_PPID */ + unsigned short flags; /* TS_DISABLED, TS_ANYUID */ + uid_t auth_uid; /* uid to authenticate as */ + pid_t sid; /* session ID associated with tty/ppid */ + struct timespec ts; /* timestamp (CLOCK_MONOTONIC) */ + union { + dev_t ttydev; /* tty device number */ + pid_t ppid; /* parent pid */ + } u; }; +bool already_lectured(int status); bool update_timestamp(struct passwd *pw); int build_timestamp(struct passwd *pw); int timestamp_status(struct passwd *pw); diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 29f8aeac6..4a7764118 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -199,6 +199,10 @@ struct sudo_defs_types sudo_defs_table[] = { N_("Incorrect password message: %s"), NULL, }, { + "lecture_status_dir", T_STR|T_PATH, + N_("Path to lecture status dir: %s"), + NULL, + }, { "timestampdir", T_STR|T_PATH, N_("Path to authentication timestamp dir: %s"), NULL, @@ -375,6 +379,10 @@ struct sudo_defs_types sudo_defs_table[] = { N_("Maximum I/O log sequence number: %u"), NULL, }, { + "use_netgroups", T_FLAG, + N_("Enable sudoers netgroup support"), + NULL, + }, { NULL, 0, NULL } }; diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index 0dbbc9290..d30f809b1 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -86,94 +86,98 @@ #define I_MAILSUB 42 #define def_badpass_message (sudo_defs_table[43].sd_un.str) #define I_BADPASS_MESSAGE 43 -#define def_timestampdir (sudo_defs_table[44].sd_un.str) -#define I_TIMESTAMPDIR 44 -#define def_timestampowner (sudo_defs_table[45].sd_un.str) -#define I_TIMESTAMPOWNER 45 -#define def_exempt_group (sudo_defs_table[46].sd_un.str) -#define I_EXEMPT_GROUP 46 -#define def_passprompt (sudo_defs_table[47].sd_un.str) -#define I_PASSPROMPT 47 -#define def_passprompt_override (sudo_defs_table[48].sd_un.flag) -#define I_PASSPROMPT_OVERRIDE 48 -#define def_runas_default (sudo_defs_table[49].sd_un.str) -#define I_RUNAS_DEFAULT 49 -#define def_secure_path (sudo_defs_table[50].sd_un.str) -#define I_SECURE_PATH 50 -#define def_editor (sudo_defs_table[51].sd_un.str) -#define I_EDITOR 51 -#define def_listpw (sudo_defs_table[52].sd_un.tuple) -#define I_LISTPW 52 -#define def_verifypw (sudo_defs_table[53].sd_un.tuple) -#define I_VERIFYPW 53 -#define def_noexec (sudo_defs_table[54].sd_un.flag) -#define I_NOEXEC 54 -#define def_ignore_local_sudoers (sudo_defs_table[55].sd_un.flag) -#define I_IGNORE_LOCAL_SUDOERS 55 -#define def_closefrom (sudo_defs_table[56].sd_un.ival) -#define I_CLOSEFROM 56 -#define def_closefrom_override (sudo_defs_table[57].sd_un.flag) -#define I_CLOSEFROM_OVERRIDE 57 -#define def_setenv (sudo_defs_table[58].sd_un.flag) -#define I_SETENV 58 -#define def_env_reset (sudo_defs_table[59].sd_un.flag) -#define I_ENV_RESET 59 -#define def_env_check (sudo_defs_table[60].sd_un.list) -#define I_ENV_CHECK 60 -#define def_env_delete (sudo_defs_table[61].sd_un.list) -#define I_ENV_DELETE 61 -#define def_env_keep (sudo_defs_table[62].sd_un.list) -#define I_ENV_KEEP 62 -#define def_role (sudo_defs_table[63].sd_un.str) -#define I_ROLE 63 -#define def_type (sudo_defs_table[64].sd_un.str) -#define I_TYPE 64 -#define def_env_file (sudo_defs_table[65].sd_un.str) -#define I_ENV_FILE 65 -#define def_sudoers_locale (sudo_defs_table[66].sd_un.str) -#define I_SUDOERS_LOCALE 66 -#define def_visiblepw (sudo_defs_table[67].sd_un.flag) -#define I_VISIBLEPW 67 -#define def_pwfeedback (sudo_defs_table[68].sd_un.flag) -#define I_PWFEEDBACK 68 -#define def_fast_glob (sudo_defs_table[69].sd_un.flag) -#define I_FAST_GLOB 69 -#define def_umask_override (sudo_defs_table[70].sd_un.flag) -#define I_UMASK_OVERRIDE 70 -#define def_log_input (sudo_defs_table[71].sd_un.flag) -#define I_LOG_INPUT 71 -#define def_log_output (sudo_defs_table[72].sd_un.flag) -#define I_LOG_OUTPUT 72 -#define def_compress_io (sudo_defs_table[73].sd_un.flag) -#define I_COMPRESS_IO 73 -#define def_use_pty (sudo_defs_table[74].sd_un.flag) -#define I_USE_PTY 74 -#define def_group_plugin (sudo_defs_table[75].sd_un.str) -#define I_GROUP_PLUGIN 75 -#define def_iolog_dir (sudo_defs_table[76].sd_un.str) -#define I_IOLOG_DIR 76 -#define def_iolog_file (sudo_defs_table[77].sd_un.str) -#define I_IOLOG_FILE 77 -#define def_set_utmp (sudo_defs_table[78].sd_un.flag) -#define I_SET_UTMP 78 -#define def_utmp_runas (sudo_defs_table[79].sd_un.flag) -#define I_UTMP_RUNAS 79 -#define def_privs (sudo_defs_table[80].sd_un.str) -#define I_PRIVS 80 -#define def_limitprivs (sudo_defs_table[81].sd_un.str) -#define I_LIMITPRIVS 81 -#define def_exec_background (sudo_defs_table[82].sd_un.flag) -#define I_EXEC_BACKGROUND 82 -#define def_pam_service (sudo_defs_table[83].sd_un.str) -#define I_PAM_SERVICE 83 -#define def_pam_login_service (sudo_defs_table[84].sd_un.str) -#define I_PAM_LOGIN_SERVICE 84 -#define def_pam_setcred (sudo_defs_table[85].sd_un.flag) -#define I_PAM_SETCRED 85 -#define def_pam_session (sudo_defs_table[86].sd_un.flag) -#define I_PAM_SESSION 86 -#define def_maxseq (sudo_defs_table[87].sd_un.uival) -#define I_MAXSEQ 87 +#define def_lecture_status_dir (sudo_defs_table[44].sd_un.str) +#define I_LECTURE_STATUS_DIR 44 +#define def_timestampdir (sudo_defs_table[45].sd_un.str) +#define I_TIMESTAMPDIR 45 +#define def_timestampowner (sudo_defs_table[46].sd_un.str) +#define I_TIMESTAMPOWNER 46 +#define def_exempt_group (sudo_defs_table[47].sd_un.str) +#define I_EXEMPT_GROUP 47 +#define def_passprompt (sudo_defs_table[48].sd_un.str) +#define I_PASSPROMPT 48 +#define def_passprompt_override (sudo_defs_table[49].sd_un.flag) +#define I_PASSPROMPT_OVERRIDE 49 +#define def_runas_default (sudo_defs_table[50].sd_un.str) +#define I_RUNAS_DEFAULT 50 +#define def_secure_path (sudo_defs_table[51].sd_un.str) +#define I_SECURE_PATH 51 +#define def_editor (sudo_defs_table[52].sd_un.str) +#define I_EDITOR 52 +#define def_listpw (sudo_defs_table[53].sd_un.tuple) +#define I_LISTPW 53 +#define def_verifypw (sudo_defs_table[54].sd_un.tuple) +#define I_VERIFYPW 54 +#define def_noexec (sudo_defs_table[55].sd_un.flag) +#define I_NOEXEC 55 +#define def_ignore_local_sudoers (sudo_defs_table[56].sd_un.flag) +#define I_IGNORE_LOCAL_SUDOERS 56 +#define def_closefrom (sudo_defs_table[57].sd_un.ival) +#define I_CLOSEFROM 57 +#define def_closefrom_override (sudo_defs_table[58].sd_un.flag) +#define I_CLOSEFROM_OVERRIDE 58 +#define def_setenv (sudo_defs_table[59].sd_un.flag) +#define I_SETENV 59 +#define def_env_reset (sudo_defs_table[60].sd_un.flag) +#define I_ENV_RESET 60 +#define def_env_check (sudo_defs_table[61].sd_un.list) +#define I_ENV_CHECK 61 +#define def_env_delete (sudo_defs_table[62].sd_un.list) +#define I_ENV_DELETE 62 +#define def_env_keep (sudo_defs_table[63].sd_un.list) +#define I_ENV_KEEP 63 +#define def_role (sudo_defs_table[64].sd_un.str) +#define I_ROLE 64 +#define def_type (sudo_defs_table[65].sd_un.str) +#define I_TYPE 65 +#define def_env_file (sudo_defs_table[66].sd_un.str) +#define I_ENV_FILE 66 +#define def_sudoers_locale (sudo_defs_table[67].sd_un.str) +#define I_SUDOERS_LOCALE 67 +#define def_visiblepw (sudo_defs_table[68].sd_un.flag) +#define I_VISIBLEPW 68 +#define def_pwfeedback (sudo_defs_table[69].sd_un.flag) +#define I_PWFEEDBACK 69 +#define def_fast_glob (sudo_defs_table[70].sd_un.flag) +#define I_FAST_GLOB 70 +#define def_umask_override (sudo_defs_table[71].sd_un.flag) +#define I_UMASK_OVERRIDE 71 +#define def_log_input (sudo_defs_table[72].sd_un.flag) +#define I_LOG_INPUT 72 +#define def_log_output (sudo_defs_table[73].sd_un.flag) +#define I_LOG_OUTPUT 73 +#define def_compress_io (sudo_defs_table[74].sd_un.flag) +#define I_COMPRESS_IO 74 +#define def_use_pty (sudo_defs_table[75].sd_un.flag) +#define I_USE_PTY 75 +#define def_group_plugin (sudo_defs_table[76].sd_un.str) +#define I_GROUP_PLUGIN 76 +#define def_iolog_dir (sudo_defs_table[77].sd_un.str) +#define I_IOLOG_DIR 77 +#define def_iolog_file (sudo_defs_table[78].sd_un.str) +#define I_IOLOG_FILE 78 +#define def_set_utmp (sudo_defs_table[79].sd_un.flag) +#define I_SET_UTMP 79 +#define def_utmp_runas (sudo_defs_table[80].sd_un.flag) +#define I_UTMP_RUNAS 80 +#define def_privs (sudo_defs_table[81].sd_un.str) +#define I_PRIVS 81 +#define def_limitprivs (sudo_defs_table[82].sd_un.str) +#define I_LIMITPRIVS 82 +#define def_exec_background (sudo_defs_table[83].sd_un.flag) +#define I_EXEC_BACKGROUND 83 +#define def_pam_service (sudo_defs_table[84].sd_un.str) +#define I_PAM_SERVICE 84 +#define def_pam_login_service (sudo_defs_table[85].sd_un.str) +#define I_PAM_LOGIN_SERVICE 85 +#define def_pam_setcred (sudo_defs_table[86].sd_un.flag) +#define I_PAM_SETCRED 86 +#define def_pam_session (sudo_defs_table[87].sd_un.flag) +#define I_PAM_SESSION 87 +#define def_maxseq (sudo_defs_table[88].sd_un.uival) +#define I_MAXSEQ 88 +#define def_use_netgroups (sudo_defs_table[89].sd_un.flag) +#define I_USE_NETGROUPS 89 enum def_tuple { never, diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index dd3680546..836e885d3 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -143,6 +143,9 @@ mailsub badpass_message T_STR "Incorrect password message: %s" +lecture_status_dir + T_STR|T_PATH + "Path to lecture status dir: %s" timestampdir T_STR|T_PATH "Path to authentication timestamp dir: %s" @@ -277,3 +280,6 @@ pam_session maxseq T_UINT "Maximum I/O log sequence number: %u" +use_netgroups + T_FLAG + "Enable sudoers netgroup support" diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index d377dfee1..34f8b51b7 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2005, 2007-2013 + * Copyright (c) 1999-2005, 2007-2014 * Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any @@ -435,6 +435,9 @@ init_defaults(void) #else def_pam_session = true; #endif +#ifdef HAVE_INNETGR + def_use_netgroups = true; +#endif /* Syslog options need special care since they both strings and ints */ #if (LOGGING & SLOG_SYSLOG) @@ -467,6 +470,7 @@ init_defaults(void) def_mailto = estrdup(MAILTO); def_mailsub = estrdup(N_(MAILSUBJECT)); def_badpass_message = estrdup(_(INCORRECT_PASSWORD)); + def_lecture_status_dir = estrdup(_PATH_SUDO_LECTURE_DIR); def_timestampdir = estrdup(_PATH_SUDO_TIMEDIR); def_passprompt = estrdup(_(PASSPROMPT)); def_runas_default = estrdup(RUNAS_DEFAULT); diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 8b66a27a5..cfc0c7767 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -627,6 +627,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, static int DaysInMonth[12] = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + struct tm *tm; time_t tod; time_t Julian; int i; @@ -659,7 +660,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, return -1; Julian += tod; if (DSTmode == DSTon - || (DSTmode == DSTmaybe && localtime(&Julian)->tm_isdst)) + || (DSTmode == DSTmaybe && (tm = localtime(&Julian)) && tm->tm_isdst)) Julian -= 60 * 60; return Julian; } @@ -668,11 +669,18 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, static time_t DSTcorrect(time_t Start, time_t Future) { + struct tm *start_tm; + struct tm *future_tm; time_t StartDay; time_t FutureDay; - StartDay = (localtime(&Start)->tm_hour + 1) % 24; - FutureDay = (localtime(&Future)->tm_hour + 1) % 24; + start_tm = localtime(&Start); + future_tm = localtime(&Future); + if (!start_tm || !future_tm) + return -1; + + StartDay = (start_tm->tm_hour + 1) % 24; + FutureDay = (future_tm->tm_hour + 1) % 24; return (Future - Start) + (StartDay - FutureDay) * 60L * 60L; } @@ -684,7 +692,8 @@ RelativeDate(time_t Start, time_t DayOrdinal, time_t DayNumber) time_t now; now = Start; - tm = localtime(&now); + if (!(tm = localtime(&now))) + return -1; now += SECSPERDAY * ((DayNumber - tm->tm_wday + 7) % 7); now += 7 * SECSPERDAY * (DayOrdinal <= 0 ? DayOrdinal : DayOrdinal - 1); return DSTcorrect(Start, now); @@ -700,7 +709,8 @@ RelativeMonth(time_t Start, time_t RelMonth) if (RelMonth == 0) return 0; - tm = localtime(&Start); + if (!(tm = localtime(&Start))) + return -1; Month = 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth; Year = Month / 12; Month = Month % 12 + 1; @@ -931,7 +941,6 @@ get_date(char *p) if(tm->tm_isdst) timezone += 60; - tm = localtime(&now); yyYear = tm->tm_year + 1900; yyMonth = tm->tm_mon + 1; yyDay = tm->tm_mday; @@ -1003,7 +1012,7 @@ main(int argc, char *argv[]) /* NOTREACHED */ } #endif /* TEST */ -#line 954 "getdate.c" +#line 963 "getdate.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -1501,7 +1510,7 @@ case 41: yyval.Meridian = yyvsp[0].Meridian; } break; -#line 1452 "getdate.c" +#line 1461 "getdate.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 52459856f..e704e6aef 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -559,6 +559,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, static int DaysInMonth[12] = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + struct tm *tm; time_t tod; time_t Julian; int i; @@ -591,7 +592,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, return -1; Julian += tod; if (DSTmode == DSTon - || (DSTmode == DSTmaybe && localtime(&Julian)->tm_isdst)) + || (DSTmode == DSTmaybe && (tm = localtime(&Julian)) && tm->tm_isdst)) Julian -= 60 * 60; return Julian; } @@ -600,11 +601,18 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, static time_t DSTcorrect(time_t Start, time_t Future) { + struct tm *start_tm; + struct tm *future_tm; time_t StartDay; time_t FutureDay; - StartDay = (localtime(&Start)->tm_hour + 1) % 24; - FutureDay = (localtime(&Future)->tm_hour + 1) % 24; + start_tm = localtime(&Start); + future_tm = localtime(&Future); + if (!start_tm || !future_tm) + return -1; + + StartDay = (start_tm->tm_hour + 1) % 24; + FutureDay = (future_tm->tm_hour + 1) % 24; return (Future - Start) + (StartDay - FutureDay) * 60L * 60L; } @@ -616,7 +624,8 @@ RelativeDate(time_t Start, time_t DayOrdinal, time_t DayNumber) time_t now; now = Start; - tm = localtime(&now); + if (!(tm = localtime(&now))) + return -1; now += SECSPERDAY * ((DayNumber - tm->tm_wday + 7) % 7); now += 7 * SECSPERDAY * (DayOrdinal <= 0 ? DayOrdinal : DayOrdinal - 1); return DSTcorrect(Start, now); @@ -632,7 +641,8 @@ RelativeMonth(time_t Start, time_t RelMonth) if (RelMonth == 0) return 0; - tm = localtime(&Start); + if (!(tm = localtime(&Start))) + return -1; Month = 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth; Year = Month / 12; Month = Month % 12 + 1; @@ -863,7 +873,6 @@ get_date(char *p) if(tm->tm_isdst) timezone += 60; - tm = localtime(&now); yyYear = tm->tm_year + 1900; yyMonth = tm->tm_mon + 1; yyDay = tm->tm_mday; diff --git a/plugins/sudoers/interfaces.c b/plugins/sudoers/interfaces.c index baf31d3c8..358d4447e 100644 --- a/plugins/sudoers/interfaces.c +++ b/plugins/sudoers/interfaces.c @@ -87,10 +87,8 @@ set_interfaces(const char *ai) } else { /* IPv4 */ ifp->family = AF_INET; - ifp->addr.ip4.s_addr = inet_addr(addr); - ifp->netmask.ip4.s_addr = inet_addr(mask); - if (ifp->addr.ip4.s_addr == INADDR_NONE || - ifp->netmask.ip4.s_addr == INADDR_NONE) { + if (inet_pton(AF_INET, addr, &ifp->addr.ip4) != 1 || + inet_pton(AF_INET, mask, &ifp->netmask.ip4) != 1) { efree(ifp); continue; } diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index 117cb35b7..488d23484 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -700,16 +700,14 @@ sudoers_io_log(const char *buf, unsigned int len, int idx) else #endif ignore_result(fwrite(buf, 1, len, io_log_files[idx].fd.f)); - delay.tv_sec = now.tv_sec; - delay.tv_usec = now.tv_usec; - timevalsub(&delay, &last_time); + sudo_timevalsub(&now, &last_time, &delay); #ifdef HAVE_ZLIB_H if (iolog_compress) - gzprintf(io_log_files[IOFD_TIMING].fd.g, "%d %f %d\n", idx, + gzprintf(io_log_files[IOFD_TIMING].fd.g, "%d %f %u\n", idx, delay.tv_sec + ((double)delay.tv_usec / 1000000), len); else #endif - fprintf(io_log_files[IOFD_TIMING].fd.f, "%d %f %d\n", idx, + fprintf(io_log_files[IOFD_TIMING].fd.f, "%d %f %u\n", idx, delay.tv_sec + ((double)delay.tv_usec / 1000000), len); last_time.tv_sec = now.tv_sec; last_time.tv_usec = now.tv_usec; diff --git a/plugins/sudoers/iolog_path.c b/plugins/sudoers/iolog_path.c index b533e21bc..e3f187f8a 100644 --- a/plugins/sudoers/iolog_path.c +++ b/plugins/sudoers/iolog_path.c @@ -250,7 +250,8 @@ expand_iolog_path(const char *prefix, const char *dir, const char *file, struct tm *timeptr; time(&now); - timeptr = localtime(&now); + if ((timeptr = localtime(&now)) == NULL) + goto bad; /* Use sudoers locale for strftime() */ sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); diff --git a/plugins/sudoers/ldap.c b/plugins/sudoers/ldap.c index 626c770b1..7eac2fc28 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2013 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2003-2014 Todd C. Miller <Todd.Miller@courtesan.com> * * This code is derived from software contributed by Aaron Spangler. * @@ -145,6 +145,9 @@ extern int ldapssl_set_strength(LDAP *ldap, int strength); #define SUDO_LDAP_SSL 1 #define SUDO_LDAP_STARTTLS 2 +/* Default search filter. */ +#define DEFAULT_SEARCH_FILTER "(objectClass=sudoRole)" + /* The TIMEFILTER_LENGTH is the length of the filter when timed entries are used. The length is computed as follows: 81 for the filter itself @@ -1341,6 +1344,11 @@ sudo_ldap_build_pass2(void) char *filt, timebuffer[TIMEFILTER_LENGTH + 1]; debug_decl(sudo_ldap_build_pass2, SUDO_DEBUG_LDAP) + /* Short circuit if no non-Unix group support. */ + if (!def_use_netgroups && !def_group_plugin) { + debug_return_str(NULL); + } + if (ldap_conf.timed) sudo_ldap_timefilter(timebuffer, sizeof(timebuffer)); @@ -1350,13 +1358,14 @@ sudo_ldap_build_pass2(void) * those get ANDed in to the expression. */ if (def_group_plugin) { - easprintf(&filt, "%s%s(|(sudoUser=+*)(sudoUser=%%:*))%s%s", + easprintf(&filt, "%s%s(|(sudoUser=%s*)(sudoUser=%%:*))%s%s", (ldap_conf.timed || ldap_conf.search_filter) ? "(&" : "", ldap_conf.search_filter ? ldap_conf.search_filter : "", + def_use_netgroups ? "+" : "", ldap_conf.timed ? timebuffer : "", (ldap_conf.timed || ldap_conf.search_filter) ? ")" : ""); } else { - easprintf(&filt, "%s%s(sudoUser=+*)%s%s", + easprintf(&filt, "%s%s(sudoUser=*)(sudoUser=+*)%s%s", (ldap_conf.timed || ldap_conf.search_filter) ? "(&" : "", ldap_conf.search_filter ? ldap_conf.search_filter : "", ldap_conf.timed ? timebuffer : "", @@ -1427,7 +1436,7 @@ sudo_ldap_parse_keyword(const char *keyword, const char *value, break; case CONF_STR: efree(*(char **)(cur->valp)); - *(char **)(cur->valp) = estrdup(value); + *(char **)(cur->valp) = *value ? estrdup(value) : NULL; break; case CONF_LIST_STR: { @@ -1523,6 +1532,7 @@ sudo_ldap_read_config(void) ldap_conf.use_sasl = -1; ldap_conf.rootuse_sasl = -1; ldap_conf.deref = -1; + ldap_conf.search_filter = estrdup(DEFAULT_SEARCH_FILTER); STAILQ_INIT(&ldap_conf.uri); STAILQ_INIT(&ldap_conf.base); @@ -2873,38 +2883,40 @@ sudo_ldap_result_get(struct sudo_nss *nss, struct passwd *pw) lres = sudo_ldap_result_alloc(); for (pass = 0; pass < 2; pass++) { filt = pass ? sudo_ldap_build_pass2() : sudo_ldap_build_pass1(pw); - DPRINTF1("ldap search '%s'", filt); - STAILQ_FOREACH(base, &ldap_conf.base, entries) { - DPRINTF1("searching from base '%s'", - base->val); - if (ldap_conf.timeout > 0) { - tv.tv_sec = ldap_conf.timeout; - tv.tv_usec = 0; - tvp = &tv; - } - result = NULL; - rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt, - NULL, 0, NULL, NULL, tvp, 0, &result); - if (rc != LDAP_SUCCESS) { - DPRINTF1("nothing found for '%s'", filt); - continue; - } - lres->user_matches = true; - - /* Add the seach result to list of search results. */ - DPRINTF1("adding search result"); - sudo_ldap_result_add_search(lres, ld, result); - LDAP_FOREACH(entry, ld, result) { - if ((!pass || - sudo_ldap_check_non_unix_group(ld, entry, pw)) && - sudo_ldap_check_host(ld, entry)) { - lres->host_matches = true; - sudo_ldap_result_add_entry(lres, entry); + if (filt != NULL) { + DPRINTF1("ldap search '%s'", filt); + STAILQ_FOREACH(base, &ldap_conf.base, entries) { + DPRINTF1("searching from base '%s'", + base->val); + if (ldap_conf.timeout > 0) { + tv.tv_sec = ldap_conf.timeout; + tv.tv_usec = 0; + tvp = &tv; + } + result = NULL; + rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt, + NULL, 0, NULL, NULL, tvp, 0, &result); + if (rc != LDAP_SUCCESS) { + DPRINTF1("nothing found for '%s'", filt); + continue; + } + lres->user_matches = true; + + /* Add the seach result to list of search results. */ + DPRINTF1("adding search result"); + sudo_ldap_result_add_search(lres, ld, result); + LDAP_FOREACH(entry, ld, result) { + if ((!pass || + sudo_ldap_check_non_unix_group(ld, entry, pw)) && + sudo_ldap_check_host(ld, entry)) { + lres->host_matches = true; + sudo_ldap_result_add_entry(lres, entry); + } } + DPRINTF1("result now has %d entries", lres->nentries); } - DPRINTF1("result now has %d entries", lres->nentries); + efree(filt); } - efree(filt); } /* Sort the entries by the sudoOrder attribute. */ diff --git a/plugins/sudoers/linux_audit.c b/plugins/sudoers/linux_audit.c index 33dcc7fbe..37012c081 100644 --- a/plugins/sudoers/linux_audit.c +++ b/plugins/sudoers/linux_audit.c @@ -31,10 +31,12 @@ #include <string.h> #include <libaudit.h> +#define DEFAULT_TEXT_DOMAIN "sudoers" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "fatal.h" #include "alloc.h" -#include "gettext.h" #include "sudo_debug.h" #include "linux_audit.h" diff --git a/plugins/sudoers/locale.c b/plugins/sudoers/locale.c index 822aaa4a7..08bd9a797 100644 --- a/plugins/sudoers/locale.c +++ b/plugins/sudoers/locale.c @@ -38,11 +38,13 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#define DEFAULT_TEXT_DOMAIN "sudoers" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "fatal.h" #include "alloc.h" #include "logging.h" -#include "gettext.h" static int current_locale = SUDOERS_LOCALE_USER; static char *user_locale; diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index c6b533ece..d8e838b08 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -176,7 +176,6 @@ do_logfile(char *msg) char *full_line; size_t len; mode_t oldmask; - time_t now; int oldlocale; FILE *fp; debug_decl(do_logfile, SUDO_DEBUG_LOGGING) @@ -193,25 +192,24 @@ do_logfile(char *msg) send_mail(_("unable to lock log file: %s: %s"), def_logfile, strerror(errno)); } else { - time(&now); + const char *timestr = get_timestr(time(NULL), def_log_year); + if (timestr == NULL) + timestr = "invalid date"; if ((size_t)def_loglinelen < sizeof(LOG_INDENT)) { /* Don't pretty-print long log file lines (hard to grep) */ if (def_log_host) { (void) fprintf(fp, "%s : %s : HOST=%s : %s\n", - get_timestr(now, def_log_year), user_name, user_srunhost, - msg); + timestr, user_name, user_srunhost, msg); } else { - (void) fprintf(fp, "%s : %s : %s\n", - get_timestr(now, def_log_year), user_name, msg); + (void) fprintf(fp, "%s : %s : %s\n", timestr, user_name, msg); } } else { if (def_log_host) { len = easprintf(&full_line, "%s : %s : HOST=%s : %s", - get_timestr(now, def_log_year), user_name, user_srunhost, - msg); + timestr, user_name, user_srunhost, msg); } else { len = easprintf(&full_line, "%s : %s : %s", - get_timestr(now, def_log_year), user_name, msg); + timestr, user_name, msg); } /* @@ -550,6 +548,7 @@ send_mail(const char *fmt, ...) { FILE *mail; char *p; + const char *timestr; int fd, pfd[2], status; pid_t pid, rv; sigaction_t sa; @@ -729,8 +728,9 @@ send_mail(const char *fmt, ...) (void) fprintf(mail, "\nContent-Type: text/plain; charset=\"%s\"\nContent-Transfer-Encoding: 8bit", nl_langinfo(CODESET)); #endif /* HAVE_NL_LANGINFO */ - (void) fprintf(mail, "\n\n%s : %s : %s : ", user_host, - get_timestr(time(NULL), def_log_year), user_name); + if ((timestr = get_timestr(time(NULL), def_log_year)) == NULL) + timestr = "invalid date"; + (void) fprintf(mail, "\n\n%s : %s : %s : ", user_host, timestr, user_name); va_start(ap, fmt); (void) vfprintf(mail, fmt, ap); va_end(ap); diff --git a/plugins/sudoers/logwrap.c b/plugins/sudoers/logwrap.c index 4adfc94b9..16cdd9f98 100644 --- a/plugins/sudoers/logwrap.c +++ b/plugins/sudoers/logwrap.c @@ -46,7 +46,6 @@ writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen) /* * Print out line with word wrap around maxlen characters. */ - beg = line; while (len > maxlen) { end = beg + maxlen; while (end != beg && *end != ' ') diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index f5f59bcfe..975663372 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -940,6 +940,11 @@ netgr_matches(const char *netgr, const char *lhost, const char *shost, const cha bool rc = false; debug_decl(netgr_matches, SUDO_DEBUG_MATCH) + if (!def_use_netgroups) { + sudo_debug_printf(SUDO_DEBUG_INFO, "netgroups are disabled"); + debug_return_bool(false); + } + #ifdef HAVE_INNETGR /* make sure we have a valid netgroup, sudo style */ if (*netgr++ != '+') { diff --git a/plugins/sudoers/match_addr.c b/plugins/sudoers/match_addr.c index f3995f390..75c0bbc4c 100644 --- a/plugins/sudoers/match_addr.c +++ b/plugins/sudoers/match_addr.c @@ -61,13 +61,14 @@ addr_matches_if(const char *n) debug_decl(addr_matches_if, SUDO_DEBUG_MATCH) #ifdef HAVE_STRUCT_IN6_ADDR - if (inet_pton(AF_INET6, n, &addr.ip6) > 0) { + if (inet_pton(AF_INET6, n, &addr.ip6) == 1) { family = AF_INET6; } else #endif /* HAVE_STRUCT_IN6_ADDR */ - { + if (inet_pton(AF_INET, n, &addr.ip4) == 1) { family = AF_INET; - addr.ip4.s_addr = inet_addr(n); + } else { + debug_return_bool(false); } SLIST_FOREACH(ifp, get_interfaces(), entries) { @@ -113,18 +114,23 @@ addr_matches_if_netmask(const char *n, const char *m) debug_decl(addr_matches_if, SUDO_DEBUG_MATCH) #ifdef HAVE_STRUCT_IN6_ADDR - if (inet_pton(AF_INET6, n, &addr.ip6) > 0) + if (inet_pton(AF_INET6, n, &addr.ip6) == 1) family = AF_INET6; else #endif /* HAVE_STRUCT_IN6_ADDR */ - { + if (inet_pton(AF_INET, n, &addr.ip4) == 1) { family = AF_INET; - addr.ip4.s_addr = inet_addr(n); + } else { + debug_return_bool(false); } if (family == AF_INET) { if (strchr(m, '.')) { - mask.ip4.s_addr = inet_addr(m); + if (inet_pton(AF_INET, m, &mask.ip4) != 1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "IPv4 netmask %s: %s", m, "invalid value"); + debug_return_bool(false); + } } else { i = strtonum(m, 0, 32, &errstr); if (errstr != NULL) { @@ -144,7 +150,7 @@ addr_matches_if_netmask(const char *n, const char *m) } #ifdef HAVE_STRUCT_IN6_ADDR else { - if (inet_pton(AF_INET6, m, &mask.ip6) <= 0) { + if (inet_pton(AF_INET6, m, &mask.ip6) != 1) { j = strtonum(m, 0, 128, &errstr); if (errstr != NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, diff --git a/plugins/sudoers/po/cs.mo b/plugins/sudoers/po/cs.mo Binary files differnew file mode 100644 index 000000000..8562f55e7 --- /dev/null +++ b/plugins/sudoers/po/cs.mo diff --git a/plugins/sudoers/po/cs.po b/plugins/sudoers/po/cs.po new file mode 100644 index 000000000..cf83deb95 --- /dev/null +++ b/plugins/sudoers/po/cs.po @@ -0,0 +1,1725 @@ +# Portable object template file for the sudoers plugin +# This file is put in the public domain. +# Todd C. Miller <Todd.Miller@courtesan.com>, 2011-2013 +# Petr Pisar <petr.pisar@atlas.cz>, 2013, 2014. +# +# (AIX) registry → (AIXový) registr +# timestamp → časové údaje +# +msgid "" +msgstr "" +"Project-Id-Version: sudoers 1.8.10b3\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-03-01 14:53+0100\n" +"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n" +"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: confstr.sh:2 +msgid "Password:" +msgstr "Heslo:" + +#: confstr.sh:3 +msgid "*** SECURITY information for %h ***" +msgstr "*** BEZPEČNOSTNÍ hlášení o %h ***" + +#: confstr.sh:4 +msgid "Sorry, try again." +msgstr "Je nám líto, zkuste to znovu." + +#: plugins/sudoers/alias.c:136 +#, c-format +msgid "Alias `%s' already defined" +msgstr "Alias „%s“ je již definován" + +#: plugins/sudoers/auth/bsdauth.c:75 +#, c-format +msgid "unable to get login class for user %s" +msgstr "nelze získat přihlašovací třídu uživatele %s" + +#: plugins/sudoers/auth/bsdauth.c:81 +msgid "unable to begin bsd authentication" +msgstr "nelze zahájit BSD autentizaci" + +#: plugins/sudoers/auth/bsdauth.c:89 +msgid "invalid authentication type" +msgstr "neplatný druh autentizace" + +#: plugins/sudoers/auth/bsdauth.c:98 +msgid "unable to initialize BSD authentication" +msgstr "nelze inicializovat BSD autentizaci" + +#: plugins/sudoers/auth/fwtk.c:59 +msgid "unable to read fwtk config" +msgstr "nelze načíst konfiguraci FWTK" + +#: plugins/sudoers/auth/fwtk.c:64 +msgid "unable to connect to authentication server" +msgstr "k autentizačnímu serveru se nelze připojit" + +#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 +#: plugins/sudoers/auth/fwtk.c:127 +msgid "lost connection to authentication server" +msgstr "spojení k autentizačnímu serveru ztraceno" + +#: plugins/sudoers/auth/fwtk.c:74 +#, c-format +msgid "" +"authentication server error:\n" +"%s" +msgstr "" +"chyba autentizačního serveru:\n" +"%s" + +#: plugins/sudoers/auth/kerb5.c:116 +#, c-format +msgid "%s: unable to convert principal to string ('%s'): %s" +msgstr "%s: principála nelze převést na řetězec („%s“): %s" + +#: plugins/sudoers/auth/kerb5.c:159 +#, c-format +msgid "%s: unable to parse '%s': %s" +msgstr "%s: „%s“ nelze rozebrat: %s" + +#: plugins/sudoers/auth/kerb5.c:169 +#, c-format +msgid "%s: unable to resolve credential cache: %s" +msgstr "%s: nelze najít keš s pověřeními: %s" + +#: plugins/sudoers/auth/kerb5.c:217 +#, c-format +msgid "%s: unable to allocate options: %s" +msgstr "%s: nelze alokovat volby: %s" + +#: plugins/sudoers/auth/kerb5.c:233 +#, c-format +msgid "%s: unable to get credentials: %s" +msgstr "%s: nelze získat pověření: %s" + +#: plugins/sudoers/auth/kerb5.c:246 +#, c-format +msgid "%s: unable to initialize credential cache: %s" +msgstr "%s: nelze inicializovat keš s pověřeními: %s" + +#: plugins/sudoers/auth/kerb5.c:250 +#, c-format +msgid "%s: unable to store credential in cache: %s" +msgstr "%s: pověření nelze uložit do keše: %s" + +#: plugins/sudoers/auth/kerb5.c:315 +#, c-format +msgid "%s: unable to get host principal: %s" +msgstr "%s: nelze získat principála stroje: %s" + +#: plugins/sudoers/auth/kerb5.c:330 +#, c-format +msgid "%s: Cannot verify TGT! Possible attack!: %s" +msgstr "%s: TGT nelze ověřit! Podezření na útok!: %s" + +#: plugins/sudoers/auth/pam.c:98 +msgid "unable to initialize PAM" +msgstr "PAM nelze inicializovat" + +#: plugins/sudoers/auth/pam.c:149 +msgid "account validation failure, is your account locked?" +msgstr "ověření účtu selhalo, není váš účet zamknutý?" + +#: plugins/sudoers/auth/pam.c:153 +msgid "Account or password is expired, reset your password and try again" +msgstr "Účtu nebo heslu vypršela platnost, nastavte si nové heslo a zkuste to znovu" + +#: plugins/sudoers/auth/pam.c:161 +#, c-format +msgid "unable to change expired password: %s" +msgstr "prošlé heslo nelze změnit: %s" + +#: plugins/sudoers/auth/pam.c:166 +msgid "Password expired, contact your system administrator" +msgstr "Heslu vypršela platnost, kontaktujte správce svého systému" + +#: plugins/sudoers/auth/pam.c:170 +msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" +msgstr "Účtu vypršela platnost nebo v konfiguraci PAM pro sudo chybí sekce „account“. Kontaktujte správce svého systému" + +#: plugins/sudoers/auth/pam.c:187 +#, c-format +msgid "PAM authentication error: %s" +msgstr "Chyba autentizace PAM: %s" + +#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:222 +#, c-format +msgid "you do not exist in the %s database" +msgstr "v databázi %s neexistujete" + +#: plugins/sudoers/auth/securid5.c:80 +msgid "failed to initialise the ACE API library" +msgstr "inicializace knihovny ACE selhala" + +#: plugins/sudoers/auth/securid5.c:106 +msgid "unable to contact the SecurID server" +msgstr "nelze kontaktovat server SecurID" + +#: plugins/sudoers/auth/securid5.c:115 +msgid "User ID locked for SecurID Authentication" +msgstr "ID uživatele je pro autentizaci SecurID uzamčeno" + +#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +msgid "invalid username length for SecurID" +msgstr "neplatná délka uživatelského jména pro SecurID" + +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +msgid "invalid Authentication Handle for SecurID" +msgstr "neplatný deskriptor autentizace pro SecurID" + +#: plugins/sudoers/auth/securid5.c:127 +msgid "SecurID communication failed" +msgstr "komunikace se SecurID selhala" + +#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +msgid "unknown SecurID error" +msgstr "neznámá chyba SecurID" + +#: plugins/sudoers/auth/securid5.c:165 +msgid "invalid passcode length for SecurID" +msgstr "neplatná délka kódu pro SecurID" + +#: plugins/sudoers/auth/sia.c:108 +msgid "unable to initialize SIA session" +msgstr "nelze inicializovat relaci SIA" + +#: plugins/sudoers/auth/sudo_auth.c:119 +msgid "invalid authentication methods" +msgstr "neplatné autentizační metody" + +#: plugins/sudoers/auth/sudo_auth.c:120 +msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." +msgstr "Sudo bylo sestaveno s neplatnými autentizačními metodami! Nesmíte míchat samostatnou a nesamostatnou autentizaci." + +#: plugins/sudoers/auth/sudo_auth.c:203 +msgid "no authentication methods" +msgstr "žádné autentizační metody" + +#: plugins/sudoers/auth/sudo_auth.c:205 +msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." +msgstr "Sudo bylo sestaveno bez autentizačních metod! Chcete-li vypnout autentizaci, použijte při sestavování přepínač --disable-autentizaci." + +#: plugins/sudoers/auth/sudo_auth.c:389 +msgid "Authentication methods:" +msgstr "Autentizační metody:" + +#: plugins/sudoers/bsm_audit.c:91 plugins/sudoers/bsm_audit.c:158 +msgid "Could not determine audit condition" +msgstr "Nebylo možné určit podmínku pro audit" + +#: plugins/sudoers/bsm_audit.c:134 plugins/sudoers/bsm_audit.c:199 +msgid "unable to commit audit record" +msgstr "auditní zprávu nelze odeslat" + +#: plugins/sudoers/check.c:189 +msgid "" +"\n" +"We trust you have received the usual lecture from the local System\n" +"Administrator. It usually boils down to these three things:\n" +"\n" +" #1) Respect the privacy of others.\n" +" #2) Think before you type.\n" +" #3) With great power comes great responsibility.\n" +"\n" +msgstr "" +"\n" +"Věříme, že jste od správce místního systému obdrželi obvyklé školení.\n" +"Obvykle se jedná o tyto tři věci:\n" +"\n" +" 1. Respektujte soukromí druhých.\n" +" 2. Přemýšlejte, než začnete psát.\n" +" 3. S velkými právy přichází velká zodpovědnost.\n" +"\n" + +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 +#: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 +#, c-format +msgid "unknown uid: %u" +msgstr "neznámé UID: %u" + +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 +#: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 +#: plugins/sudoers/testsudoers.c:363 +#, c-format +msgid "unknown user: %s" +msgstr "neznámý uživatel: %s" + +#: plugins/sudoers/def_data.c:27 +#, 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 +#, 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 +#, 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 +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 +msgid "Ignore '.' in $PATH" +msgstr "Ignoruje „.“ v PATH" + +#: plugins/sudoers/def_data.c:47 +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 +msgid "Send mail if user authentication fails" +msgstr "Odešle e-mail, když autentizace uživatele selže" + +#: plugins/sudoers/def_data.c:55 +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 +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 +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 +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:71 +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:75 +#, c-format +msgid "File containing the sudo lecture: %s" +msgstr "Soubor obsahující školení k sudo: %s" + +#: plugins/sudoers/def_data.c:79 +msgid "Require users to authenticate by default" +msgstr "Standardně vyžaduje, aby se uživatelé autentizovali" + +#: plugins/sudoers/def_data.c:83 +msgid "Root may run sudo" +msgstr "Root může spustit sudo" + +#: plugins/sudoers/def_data.c:87 +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:91 +msgid "Log the year in the (non-syslog) log file" +msgstr "Do (nesyslogového) protokolu zaznamenává rok" + +#: plugins/sudoers/def_data.c:95 +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:99 +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:103 +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:107 +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:111 +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:115 +msgid "Insult the user when they enter an incorrect password" +msgstr "Urazí uživatele, pokud zadá chybné heslo" + +#: plugins/sudoers/def_data.c:119 +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:123 +msgid "Visudo will honor the EDITOR environment variable" +msgstr "Visudo bude dodržovat proměnou prostředí EDITOR" + +#: plugins/sudoers/def_data.c:127 +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:131 +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:135 +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:139 +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:143 +msgid "Set the LOGNAME and USER environment variables" +msgstr "Nastaví proměnné prostředí LOGNAME a USER" + +#: plugins/sudoers/def_data.c:147 +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:151 +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:155 +#, 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:159 +#, c-format +msgid "Authentication timestamp timeout: %.1f minutes" +msgstr "Limit na časové údaje autentizace: %.1f min" + +#: plugins/sudoers/def_data.c:163 +#, c-format +msgid "Password prompt timeout: %.1f minutes" +msgstr "Limit na výzvu k heslu: %.1f min" + +#: plugins/sudoers/def_data.c:167 +#, 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:171 +#, 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:175 +#, c-format +msgid "Path to log file: %s" +msgstr "Cesta k souboru s protokolem: %s" + +#: plugins/sudoers/def_data.c:179 +#, c-format +msgid "Path to mail program: %s" +msgstr "Cesta k poštovnímu programu: %s" + +#: plugins/sudoers/def_data.c:183 +#, c-format +msgid "Flags for mail program: %s" +msgstr "Přepínače pro poštovní program: %s" + +#: plugins/sudoers/def_data.c:187 +#, c-format +msgid "Address to send mail to: %s" +msgstr "Adresa, kam zasílat poštu: %s" + +#: plugins/sudoers/def_data.c:191 +#, c-format +msgid "Address to send mail from: %s" +msgstr "Adrese, ze které zasílat poštu: %s" + +#: plugins/sudoers/def_data.c:195 +#, 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:199 +#, c-format +msgid "Incorrect password message: %s" +msgstr "Zpráva při chybném hesle: %s" + +#: plugins/sudoers/def_data.c:203 +#, c-format +msgid "Path to lecture status dir: %s" +msgstr "Cesta k adresáři se stavy lekcí: %s" + +#: plugins/sudoers/def_data.c:207 +#, 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:211 +#, 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:215 +#, 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:219 +#, c-format +msgid "Default password prompt: %s" +msgstr "Výchozí výzva pro heslo: %s" + +#: plugins/sudoers/def_data.c:223 +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:227 +#, 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:231 +#, 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:235 +#, 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:239 +#, 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:243 +#, 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:247 +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:251 +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:255 +#, 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:259 +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:263 +msgid "Allow users to set arbitrary environment variables" +msgstr "Dovolit uživatelům nastavit libovolné proměnné prostředí" + +#: plugins/sudoers/def_data.c:267 +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:271 +msgid "Environment variables to check for sanity:" +msgstr "Proměnné prostředí kontrolované na logičnost:" + +#: plugins/sudoers/def_data.c:275 +msgid "Environment variables to remove:" +msgstr "Proměnné prostředí, které se mají odstranit:" + +#: plugins/sudoers/def_data.c:279 +msgid "Environment variables to preserve:" +msgstr "Proměnné prostředí, které se mají zachovat:" + +#: plugins/sudoers/def_data.c:283 +#, 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:287 +#, 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:291 +#, 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:295 +#, 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:299 +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:303 +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:307 +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:311 +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:315 +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:319 +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:323 +msgid "Compress I/O logs using zlib" +msgstr "Komprimovat protokoly o vstupu/výstupu pomocí zlib" + +#: plugins/sudoers/def_data.c:327 +msgid "Always run commands in a pseudo-tty" +msgstr "Vždy spouštět příkazy v pseudoTTY" + +#: plugins/sudoers/def_data.c:331 +#, c-format +msgid "Plugin for non-Unix group support: %s" +msgstr "Modul pro podporu neunixových skupin: %s" + +#: plugins/sudoers/def_data.c:335 +#, 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:339 +#, 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:343 +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:347 +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:351 +msgid "Set of permitted privileges" +msgstr "Množina povolujících práv" + +#: plugins/sudoers/def_data.c:355 +msgid "Set of limit privileges" +msgstr "Množina omezujících práv" + +#: plugins/sudoers/def_data.c:359 +msgid "Run commands on a pty in the background" +msgstr "Spouštět příkazy v PTY na pozadí" + +#: plugins/sudoers/def_data.c:363 +msgid "PAM service name to use" +msgstr "Použít tuto službu PAM" + +#: plugins/sudoers/def_data.c:367 +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:371 +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:375 +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:379 +#, 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:383 +msgid "Enable sudoers netgroup support" +msgstr "Zapnout v sudoers podporu netgroup" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 +#: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 +#, c-format +msgid "unknown defaults entry `%s'" +msgstr "neznámá položka defaults „%s“" + +#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 +#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 +#: plugins/sudoers/defaults.c:330 +#, c-format +msgid "value `%s' is invalid for option `%s'" +msgstr "hodnota „%s“ je pro volbu „%s“ neplatná" + +#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 +#: plugins/sudoers/defaults.c:239 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:326 +#, c-format +msgid "no value specified for `%s'" +msgstr "u „%s“ nebyla zadána žádná hodnota" + +#: plugins/sudoers/defaults.c:244 +#, c-format +msgid "values for `%s' must start with a '/'" +msgstr "hodnota u „%s“ musí začínat na „/“" + +#: plugins/sudoers/defaults.c:306 +#, c-format +msgid "option `%s' does not take a value" +msgstr "volba „%s“ nebere hodnotu" + +#: plugins/sudoers/env.c:288 plugins/sudoers/env.c:293 +#: plugins/sudoers/env.c:395 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/policy.c:442 plugins/sudoers/policy.c:449 +#: plugins/sudoers/prompt.c:171 plugins/sudoers/sudoers.c:656 +#: plugins/sudoers/testsudoers.c:241 +#, c-format +msgid "internal error, %s overflow" +msgstr "vnitřní chyba, přetečení %s" + +#: plugins/sudoers/env.c:367 +msgid "sudo_putenv: corrupted envp, length mismatch" +msgstr "sudo_putenv: poškozené pole envp, délka nesouhlasí" + +#: plugins/sudoers/env.c:1014 +#, 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/group_plugin.c:94 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s musí být vlastněn UID %d" + +#: plugins/sudoers/group_plugin.c:98 +#, c-format +msgid "%s must only be writable by owner" +msgstr "%s smí být zapisovatelný jen pro vlastníka" + +#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#, c-format +msgid "unable to load %s: %s" +msgstr "nelze zavést %s: %s" + +#: plugins/sudoers/group_plugin.c:110 +#, c-format +msgid "unable to find symbol \"group_plugin\" in %s" +msgstr "v %s nelze nalézt symbol „group_plugin“" + +#: plugins/sudoers/group_plugin.c:115 +#, c-format +msgid "%s: incompatible group plugin major version %d, expected %d" +msgstr "%s: nekompatibilní hlavní verze modulu pro skupiny %d, očekávána %d" + +#: plugins/sudoers/interfaces.c:116 +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/iolog.c:112 +#: plugins/sudoers/timestamp.c:227 +#, 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:109 plugins/sudoers/iolog.c:123 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 +#, c-format +msgid "unable to mkdir %s" +msgstr "nelze vytvořit adresář %s" + +#: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 +#, c-format +msgid "unable to open %s" +msgstr "nelze otevřít %s" + +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 +#, c-format +msgid "unable to read %s" +msgstr "%s nelze číst" + +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 +#, c-format +msgid "unable to write to %s" +msgstr "do %s nelze zapsat" + +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 +#, c-format +msgid "unable to create %s" +msgstr "%s nelze vytvořit" + +#: plugins/sudoers/ldap.c:406 +msgid "sudo_ldap_conf_add_ports: port too large" +msgstr "sudo_ldap_conf_add_ports: port je příliš velký" + +#: plugins/sudoers/ldap.c:429 +msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +msgstr "sudo_ldap_conf_add_ports: nedostatek místa na rozšíření hostbuf" + +#: plugins/sudoers/ldap.c:461 +#, c-format +msgid "unsupported LDAP uri type: %s" +msgstr "nepodporovaný typ ldapového URI: %s" + +#: plugins/sudoers/ldap.c:492 +msgid "unable to mix ldap and ldaps URIs" +msgstr "nelze míchat URI ldap a ldaps" + +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 +msgid "starttls not supported when using ldaps" +msgstr "při použití ldaps není starttls podporováno" + +#: plugins/sudoers/ldap.c:514 +msgid "sudo_ldap_parse_uri: out of space building hostbuf" +msgstr "sudo_ldap_parse_uri: nedostatek místo pro vytvoření hostbuf" + +#: plugins/sudoers/ldap.c:595 +#, 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:598 +#, c-format +msgid "you must set TLS_CERT in %s to use SSL" +msgstr "pro SSL musíte v %s nastavit TLS_CERT" + +#: plugins/sudoers/ldap.c:1089 +msgid "unable to get GMT time" +msgstr "nelze získat čas GMT" + +#: plugins/sudoers/ldap.c:1095 +msgid "unable to format timestamp" +msgstr "nelze naformátovat časový údaj" + +#: plugins/sudoers/ldap.c:1103 +msgid "unable to build time filter" +msgstr "nelze vytvořit časový filtr" + +#: plugins/sudoers/ldap.c:1322 +msgid "sudo_ldap_build_pass1 allocation mismatch" +msgstr "nesouhlasí alokace sudo_ldap_build_pass1" + +#: plugins/sudoers/ldap.c:1433 +#, c-format +msgid "%s: %s: %s: %s" +msgstr "%s: %s: %s: %s" + +#: plugins/sudoers/ldap.c:1909 +#, c-format +msgid "" +"\n" +"LDAP Role: %s\n" +msgstr "" +"\n" +"Role LDAP: %s\n" + +#: plugins/sudoers/ldap.c:1911 +#, c-format +msgid "" +"\n" +"LDAP Role: UNKNOWN\n" +msgstr "" +"\n" +"Role LDAP: NEZNÁMÁ\n" + +#: plugins/sudoers/ldap.c:1958 +#, c-format +msgid " Order: %s\n" +msgstr " Pořadí: %s\n" + +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 +#: plugins/sudoers/sssd.c:1295 +#, c-format +msgid " Commands:\n" +msgstr " Příkazy:\n" + +#: plugins/sudoers/ldap.c:2509 +#, c-format +msgid "unable to initialize LDAP: %s" +msgstr "LDAP nelze inicializovat: %s" + +#: plugins/sudoers/ldap.c:2551 +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:2784 +#, c-format +msgid "invalid sudoOrder attribute: %s" +msgstr "neplatný atribut sudoOrder: %s" + +#: plugins/sudoers/linux_audit.c:57 +msgid "unable to open audit system" +msgstr "nelze otevřít auditní systém" + +#: plugins/sudoers/linux_audit.c:93 +msgid "unable to send audit message" +msgstr "nelze odeslat auditní zprávu" + +#: plugins/sudoers/logging.c:136 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: plugins/sudoers/logging.c:164 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (příkaz pokračuje) %s" + +#: plugins/sudoers/logging.c:189 +#, c-format +msgid "unable to open log file: %s: %s" +msgstr "nelze otevřít soubor protokolu: %s: %s" + +#: plugins/sudoers/logging.c:192 +#, c-format +msgid "unable to lock log file: %s: %s" +msgstr "nelze zamknout soubor protokolu: %s: %s" + +#: plugins/sudoers/logging.c:243 +msgid "No user or host" +msgstr "Žádný uživatel nebo stroj" + +#: plugins/sudoers/logging.c:245 +msgid "validation failure" +msgstr "selhání ověření" + +#: plugins/sudoers/logging.c:252 +msgid "user NOT in sudoers" +msgstr "uživatel NENÍ v sudoers" + +#: plugins/sudoers/logging.c:254 +msgid "user NOT authorized on host" +msgstr "uživatel NENÍ na stroji autorizován" + +#: plugins/sudoers/logging.c:256 +msgid "command not allowed" +msgstr "příkaz nedovolen" + +#: plugins/sudoers/logging.c:286 +#, c-format +msgid "%s is not in the sudoers file. This incident will be reported.\n" +msgstr "%s není v souboru sudoers. Tento událost bude ohlášena.\n" + +#: plugins/sudoers/logging.c:289 +#, c-format +msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" +msgstr "%s nemá dovoleno spouštět sudo na %s. Tato událost bude ohlášena.\n" + +#: plugins/sudoers/logging.c:293 +#, c-format +msgid "Sorry, user %s may not run sudo on %s.\n" +msgstr "Je nám líto, uživatel %s nesmí spouštět sudo na %s.\n" + +#: plugins/sudoers/logging.c:296 +#, c-format +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:333 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 +#: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 +#: plugins/sudoers/sudoers.c:1018 +#, c-format +msgid "%s: command not found" +msgstr "%s: příkaz nenalezen" + +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 +#, c-format +msgid "" +"ignoring `%s' found in '.'\n" +"Use `sudo ./%s' if this is the `%s' you wish to run." +msgstr "" +"ignoruje se „%s“ nalezený v „.“\n" +"Použijte „sudo ./%s„, je-li toto „%s“', který chcete spustit." + +#: plugins/sudoers/logging.c:351 +msgid "authentication failure" +msgstr "selhání autentizace" + +#: plugins/sudoers/logging.c:377 +msgid "a password is required" +msgstr "je vyžadováno heslo" + +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 +#, c-format +msgid "%u incorrect password attempt" +msgid_plural "%u incorrect password attempts" +msgstr[0] "%u chybný pokus zadat heslo" +msgstr[1] "%u chybné pokusy zadat heslo" +msgstr[2] "%u chybných pokusů zadat heslo" + +#: plugins/sudoers/logging.c:581 +msgid "unable to fork" +msgstr "nelze vytvořit proces" + +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 +#, c-format +msgid "unable to fork: %m" +msgstr "nelze vytvořit proces: %m" + +#: plugins/sudoers/logging.c:634 +#, c-format +msgid "unable to open pipe: %m" +msgstr "nelze otevřít rouru: %m" + +#: plugins/sudoers/logging.c:659 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "nelze zdvojit standardní vstup: %m" + +#: plugins/sudoers/logging.c:694 +#, c-format +msgid "unable to execute %s: %m" +msgstr "nelze spustit %s: %m" + +#: plugins/sudoers/logging.c:914 +msgid "internal error: insufficient space for log line" +msgstr "vnitřní chyba: nedostatek místa pro řádek protokolu" + +#: plugins/sudoers/match.c:617 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "nepodporovaný druh kontrolního součtu %d pro %s" + +#: plugins/sudoers/match.c:647 +#, c-format +msgid "%s: read error" +msgstr "%s: chyba při čtení" + +#: plugins/sudoers/match.c:661 +#, c-format +msgid "digest for %s (%s) is not in %s form" +msgstr "součet pro %s (%s) nemá tvar %s" + +#: 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:118 +#, c-format +msgid "parse error in %s" +msgstr "chyba rozboru v %s" + +#: plugins/sudoers/parse.c:451 +#, c-format +msgid "" +"\n" +"Sudoers entry:\n" +msgstr "" +"\n" +"Položka v sudoers:\n" + +#: plugins/sudoers/parse.c:452 +#, c-format +msgid " RunAsUsers: " +msgstr " RunAsUsers: " + +#: plugins/sudoers/parse.c:466 +#, c-format +msgid " RunAsGroups: " +msgstr " RunAsGroups: " + +#: plugins/sudoers/parse.c:475 +#, c-format +msgid " Options: " +msgstr " Volby: " + +#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:116 +#: plugins/sudoers/policy.c:123 plugins/sudoers/policy.c:145 +#: plugins/sudoers/policy.c:259 plugins/sudoers/policy.c:277 +#: plugins/sudoers/policy.c:284 plugins/sudoers/policy.c:312 +#: plugins/sudoers/policy.c:320 plugins/sudoers/policy.c:327 +#: plugins/sudoers/set_perms.c:363 plugins/sudoers/set_perms.c:702 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1357 +#: plugins/sudoers/set_perms.c:1525 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 +#, c-format +msgid "unable to execute %s" +msgstr "nelze vykonat %s" + +#: plugins/sudoers/policy.c:681 +#, c-format +msgid "Sudoers policy plugin version %s\n" +msgstr "Verze modulu s politikami sudoers je %s\n" + +#: plugins/sudoers/policy.c:683 +#, c-format +msgid "Sudoers file grammar version %d\n" +msgstr "Verze gramatiky souboru sudoers je %d\n" + +#: plugins/sudoers/policy.c:687 +#, c-format +msgid "" +"\n" +"Sudoers path: %s\n" +msgstr "" +"\n" +"Cesta sudoers: %s\n" + +#: plugins/sudoers/policy.c:690 +#, c-format +msgid "nsswitch path: %s\n" +msgstr "cesta k nsswitch: %s\n" + +#: plugins/sudoers/policy.c:692 +#, c-format +msgid "ldap.conf path: %s\n" +msgstr "cesta k ldap.conf: %s\n" + +#: plugins/sudoers/policy.c:693 +#, c-format +msgid "ldap.secret path: %s\n" +msgstr "cesta k ldap.secret: %s\n" + +#: plugins/sudoers/pwutil.c:148 +#, c-format +msgid "unable to cache uid %u, already exists" +msgstr "nelze zapamatovat si UID %u, již existuje" + +#: plugins/sudoers/pwutil.c:190 +#, c-format +msgid "unable to cache user %s, already exists" +msgstr "nelze zapamatovat si uživatele %s, již existuje" + +#: plugins/sudoers/pwutil.c:393 +#, c-format +msgid "unable to cache gid %u, already exists" +msgstr "nelze zapamatovat si GID %u, již existuje" + +#: plugins/sudoers/pwutil.c:429 +#, c-format +msgid "unable to cache group %s, already exists" +msgstr "nelze zapamatovat si skupinu %s, již existuje" + +#: plugins/sudoers/pwutil.c:592 plugins/sudoers/pwutil.c:614 +#, c-format +msgid "unable to cache group list for %s, already exists" +msgstr "nelze zapamatovat si seznam skupin pro %s, již existuje" + +#: plugins/sudoers/pwutil.c:612 +#, c-format +msgid "unable to parse groups for %s" +msgstr "nelze rozebrat skupiny pro %s" + +#: plugins/sudoers/set_perms.c:124 plugins/sudoers/set_perms.c:449 +#: plugins/sudoers/set_perms.c:852 plugins/sudoers/set_perms.c:1149 +#: plugins/sudoers/set_perms.c:1441 +msgid "perm stack overflow" +msgstr "přetečení zásobníku oprávnění" + +#: plugins/sudoers/set_perms.c:132 plugins/sudoers/set_perms.c:457 +#: plugins/sudoers/set_perms.c:860 plugins/sudoers/set_perms.c:1157 +#: plugins/sudoers/set_perms.c:1449 +msgid "perm stack underflow" +msgstr "podtečení zásobníku oprávnění" + +#: plugins/sudoers/set_perms.c:191 plugins/sudoers/set_perms.c:504 +#: plugins/sudoers/set_perms.c:1208 plugins/sudoers/set_perms.c:1481 +msgid "unable to change to root gid" +msgstr "nelze přepnout GID na root" + +#: plugins/sudoers/set_perms.c:280 plugins/sudoers/set_perms.c:601 +#: plugins/sudoers/set_perms.c:989 plugins/sudoers/set_perms.c:1285 +msgid "unable to change to runas gid" +msgstr "nelze přepnout na běhové GID" + +#: plugins/sudoers/set_perms.c:292 plugins/sudoers/set_perms.c:613 +#: plugins/sudoers/set_perms.c:999 plugins/sudoers/set_perms.c:1295 +msgid "unable to change to runas uid" +msgstr "nelze přepnout na běhové UID" + +#: plugins/sudoers/set_perms.c:310 plugins/sudoers/set_perms.c:631 +#: plugins/sudoers/set_perms.c:1015 plugins/sudoers/set_perms.c:1311 +msgid "unable to change to sudoers gid" +msgstr "nelze přepnout na GID sudoers" + +#: plugins/sudoers/set_perms.c:363 plugins/sudoers/set_perms.c:702 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1357 +#: plugins/sudoers/set_perms.c:1525 +msgid "too many processes" +msgstr "příliš mnoho procesů" + +#: plugins/sudoers/set_perms.c:1595 +msgid "unable to set runas group vector" +msgstr "nelze nastavit vektor běhových skupin" + +#: plugins/sudoers/sssd.c:252 +msgid "unable to initialize SSS source. Is SSSD installed on your machine?" +msgstr "nelze inicializovat zdroj SSS. Je SSSD nainstalován na vašem stroji?" + +#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 +#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 +#: plugins/sudoers/sssd.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "nelze nalézt symbol „%s“ v %s" + +#: plugins/sudoers/sudo_nss.c:283 +#, c-format +msgid "Matching Defaults entries for %s on %s:\n" +msgstr "Odpovídající položky Defaults pro %s na %s:\n" + +#: plugins/sudoers/sudo_nss.c:296 +#, c-format +msgid "Runas and Command-specific defaults for %s:\n" +msgstr "Výchozí hodnoty Runas a Command pro %s:\n" + +#: plugins/sudoers/sudo_nss.c:309 +#, c-format +msgid "User %s may run the following commands on %s:\n" +msgstr "Uživatel %s smí spustit následující příkazy na %s:\n" + +#: plugins/sudoers/sudo_nss.c:318 +#, c-format +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:154 plugins/sudoers/sudoers.c:188 +#: plugins/sudoers/sudoers.c:675 +msgid "problem with defaults entries" +msgstr "problém s položkami defaults" + +#: plugins/sudoers/sudoers.c:160 +msgid "no valid sudoers sources found, quitting" +msgstr "nenalezen žádné platné zdroje sudoers, končí se" + +#: plugins/sudoers/sudoers.c:222 +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:261 +msgid "you are not permitted to use the -C option" +msgstr "nemáte dovoleno použít přepínač -C" + +#: plugins/sudoers/sudoers.c:314 +#, c-format +msgid "timestamp owner (%s): No such user" +msgstr "vlastník časového údaje (%s): Takový uživatel neexistuje" + +#: plugins/sudoers/sudoers.c:328 +msgid "no tty" +msgstr "žádné TTY" + +#: plugins/sudoers/sudoers.c:329 +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:377 +msgid "command in current directory" +msgstr "příkaz v aktuálním adresáři" + +#: plugins/sudoers/sudoers.c:394 +msgid "sorry, you are not allowed to preserve the environment" +msgstr "je nám líto, ale nemáte dovoleno zachovat prostředí" + +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 +#, c-format +msgid "unable to stat %s" +msgstr "nelze zjistit údaje o %s" + +#: plugins/sudoers/sudoers.c:728 +#, c-format +msgid "%s is not a regular file" +msgstr "%s není běžný soubor" + +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 +#, 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:735 toke.l:930 +#, c-format +msgid "%s is world writable" +msgstr "%s je zapisovatelný pro všechny" + +#: plugins/sudoers/sudoers.c:738 toke.l:935 +#, 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:764 +#, c-format +msgid "only root can use `-c %s'" +msgstr "pouze root může použít „-c %s“" + +#: plugins/sudoers/sudoers.c:781 plugins/sudoers/sudoers.c:783 +#, c-format +msgid "unknown login class: %s" +msgstr "neznáma přihlašovací třída: %s" + +#: plugins/sudoers/sudoers.c:815 +#, c-format +msgid "unable to resolve host %s" +msgstr "nelze přeložit název stroje %s" + +#: plugins/sudoers/sudoers.c:878 plugins/sudoers/testsudoers.c:387 +#, c-format +msgid "unknown group: %s" +msgstr "neznámá skupina: %s" + +#: plugins/sudoers/sudoreplay.c:274 +#, c-format +msgid "invalid filter option: %s" +msgstr "neplatná volba filtru: %s" + +#: plugins/sudoers/sudoreplay.c:287 +#, c-format +msgid "invalid max wait: %s" +msgstr "neplatná maximální doba čekání: %s" + +#: plugins/sudoers/sudoreplay.c:293 +#, c-format +msgid "invalid speed factor: %s" +msgstr "neplatný násobek rychlosti: %s" + +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 +#, c-format +msgid "%s version %s\n" +msgstr "%s verze %s\n" + +#: plugins/sudoers/sudoreplay.c:328 +#, c-format +msgid "%s/%.2s/%.2s/%.2s/timing: %s" +msgstr "%s/%.2s/%.2s/%.2s/časování: %s" + +#: plugins/sudoers/sudoreplay.c:334 +#, c-format +msgid "%s/%s/timing: %s" +msgstr "%s/%s/časování: %s" + +#: plugins/sudoers/sudoreplay.c:350 +#, c-format +msgid "Replaying sudo session: %s\n" +msgstr "Přehrává se relace sudo: %s\n" + +#: plugins/sudoers/sudoreplay.c:356 +#, c-format +msgid "Warning: your terminal is too small to properly replay the log.\n" +msgstr "Pozor: váš terminál je příliš malý pro správné zobrazení záznamu.\n" + +#: plugins/sudoers/sudoreplay.c:357 +#, c-format +msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." +msgstr "Rozměry záznamu jsou %d × %d, váš terminál má rozměry %d × %d." + +#: plugins/sudoers/sudoreplay.c:412 +msgid "unable to set tty to raw mode" +msgstr "TTY nelze nastavit do přímého režimu" + +#: plugins/sudoers/sudoreplay.c:443 +#, c-format +msgid "invalid timing file line: %s" +msgstr "neplatný řádek s časovacím souborem: %s" + +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 +#, c-format +msgid "ambiguous expression \"%s\"" +msgstr "nejednoznačný výraz „%s“" + +#: plugins/sudoers/sudoreplay.c:696 +msgid "unmatched ')' in expression" +msgstr "ve výrazu neodpovídá „)“" + +#: plugins/sudoers/sudoreplay.c:700 +#, c-format +msgid "unknown search term \"%s\"" +msgstr "neznámý vyhledávací výraz „%s“" + +#: plugins/sudoers/sudoreplay.c:714 +#, c-format +msgid "%s requires an argument" +msgstr "%s vyžaduje argument" + +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 +#, c-format +msgid "invalid regular expression: %s" +msgstr "neplatný regulární výraz: %s" + +#: plugins/sudoers/sudoreplay.c:724 +#, c-format +msgid "could not parse date \"%s\"" +msgstr "datum „%s“ se nepodařilo rozebrat" + +#: plugins/sudoers/sudoreplay.c:733 +msgid "unmatched '(' in expression" +msgstr "ve výrazu neodpovídá „(“" + +#: plugins/sudoers/sudoreplay.c:735 +msgid "illegal trailing \"or\"" +msgstr "zakázané zakončení „or“" + +#: plugins/sudoers/sudoreplay.c:737 +msgid "illegal trailing \"!\"" +msgstr "zakázané zakončení „!“" + +#: plugins/sudoers/sudoreplay.c:790 +#, c-format +msgid "unknown search type %d" +msgstr "neznámý vyhledávácí typ %d" + +#: plugins/sudoers/sudoreplay.c:827 +#, c-format +msgid "%s: invalid log file" +msgstr "%s: neplatný soubor s protokolem" + +#: plugins/sudoers/sudoreplay.c:845 +#, c-format +msgid "%s: time stamp field is missing" +msgstr "%s: chybí položka s časovým údajem" + +#: plugins/sudoers/sudoreplay.c:852 +#, c-format +msgid "%s: time stamp %s: %s" +msgstr "%s: čas %s: %s" + +#: plugins/sudoers/sudoreplay.c:859 +#, c-format +msgid "%s: user field is missing" +msgstr "%s: chybí položka s uživatelem" + +#: plugins/sudoers/sudoreplay.c:867 +#, c-format +msgid "%s: runas user field is missing" +msgstr "%s: chybí položka s runas uživatelem" + +#: plugins/sudoers/sudoreplay.c:875 +#, c-format +msgid "%s: runas group field is missing" +msgstr "%s chybí položka s runas skupinou" + +#: plugins/sudoers/sudoreplay.c:1230 +#, c-format +msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" +msgstr "použití: %s [-h] [-d adresář] [-m číslo] [-s číslo] ID\n" + +#: plugins/sudoers/sudoreplay.c:1233 +#, c-format +msgid "usage: %s [-h] [-d dir] -l [search expression]\n" +msgstr "použití: %s [-h] [-d adresář] -l [vyhledávací_výraz]\n" + +#: plugins/sudoers/sudoreplay.c:1242 +#, c-format +msgid "" +"%s - replay sudo session logs\n" +"\n" +msgstr "" +"%s – přehraje záznam relace sudo\n" +"\n" + +#: plugins/sudoers/sudoreplay.c:1244 +msgid "" +"\n" +"Options:\n" +" -d, --directory=dir specify directory for session logs\n" +" -f, --filter=filter specify which I/O type(s) to display\n" +" -h, --help display help message and exit\n" +" -l, --list list available session IDs, with optional expression\n" +" -m, --max-wait=num max number of seconds to wait between events\n" +" -s, --speed=num speed up or slow down output\n" +" -V, --version display version information and exit" +msgstr "" +"\n" +"Přepínače:\n" +" -d, --directory=adresář\n" +" určuje adresář pro záznamy relace\n" +" -f, --filter=filtr určuje, které druhy I/O se mají zobrazit\n" +" -h, --help zobrazí nápovědu a skončí\n" +" -l, --list vypíše seznam ID dostupných relací, s volitelným výrazem\n" +" -m, --max-wait=číslo čeká maximálně počet sekund mezi událostmi\n" +" -s, --speed=číslo zrychlí nebo zpomalí výstup\n" +" -V, --version zobrazí údaje o verzi a skončí" + +#: plugins/sudoers/testsudoers.c:326 +msgid "\thost unmatched" +msgstr "\tstroj se neshoduje" + +#: plugins/sudoers/testsudoers.c:329 +msgid "" +"\n" +"Command allowed" +msgstr "" +"\n" +"Příkaz povolen" + +#: plugins/sudoers/testsudoers.c:330 +msgid "" +"\n" +"Command denied" +msgstr "" +"\n" +"Příkaz odepřen" + +#: plugins/sudoers/testsudoers.c:330 +msgid "" +"\n" +"Command unmatched" +msgstr "" +"\n" +"Příkaz se neshoduje" + +# TODO: pluralize +#: plugins/sudoers/timestamp.c:191 +#, 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:291 +#, c-format +msgid "%s is group writable" +msgstr "%s je zapisovatelný pro skupinu" + +#: plugins/sudoers/timestamp.c:311 +#, c-format +msgid "timestamp path too long: %s/%s" +msgstr "cesta k časovým údajům je příliš dlouhá: %s/%s" + +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "časový údaj z budoucnosti se ignoruje" + +#: plugins/sudoers/timestamp.c:496 +#, c-format +msgid "time stamp too far in the future: %20.20s" +msgstr "časový údaj ukazuje příliš do budoucna: %20.20s" + +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 +#, c-format +msgid "lecture status path too long: %s/%s" +msgstr "cesta ke stavům lekce je příliš dlouhý: %s/%s" + +#: plugins/sudoers/toke_util.c:176 +msgid "fill_args: buffer overflow" +msgstr "fill_args: přetečení bufferu" + +#: plugins/sudoers/visudo.c:186 +#, c-format +msgid "%s grammar version %d\n" +msgstr "verze gramatiky %s je %d\n" + +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 +#, c-format +msgid "press return to edit %s: " +msgstr "pro úpravu %s stiskněte enter: " + +#: plugins/sudoers/visudo.c:342 plugins/sudoers/visudo.c:348 +msgid "write error" +msgstr "chyba zápisu" + +#: plugins/sudoers/visudo.c:430 +#, 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:435 +#, 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:441 +#, c-format +msgid "editor (%s) failed, %s unchanged" +msgstr "editor (%s) selhal, %s nezměněno" + +#: plugins/sudoers/visudo.c:463 +#, c-format +msgid "%s unchanged" +msgstr "%s nezměněno" + +#: plugins/sudoers/visudo.c:488 +#, 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:498 +#, 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:534 +#, 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:592 plugins/sudoers/visudo.c:601 +#, 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:596 plugins/sudoers/visudo.c:606 +#, 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:623 +#, 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:637 +#, 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:647 +#, c-format +msgid "error renaming %s, %s unchanged" +msgstr "chyba při přejmenování %s, %s nezměněno" + +#: plugins/sudoers/visudo.c:709 +msgid "What now? " +msgstr "Co teď? " + +#: plugins/sudoers/visudo.c:723 +msgid "" +"Options are:\n" +" (e)dit sudoers file again\n" +" e(x)it without saving changes to sudoers file\n" +" (Q)uit and save changes to sudoers file (DANGER!)\n" +msgstr "" +"Možnosti jsou:\n" +" (e) upravit soubor sudoers znovu\n" +" (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:771 +#, c-format +msgid "unable to run %s" +msgstr "nelze spustit %s" + +#: plugins/sudoers/visudo.c:797 +#, 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:804 +#, 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:829 plugins/sudoers/visudo_json.c:1008 +#, c-format +msgid "failed to parse %s file, unknown error" +msgstr "rozbor souboru %s se nezdařil, neznámá chyba" + +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 +#, 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:848 plugins/sudoers/visudo_json.c:1020 +#, c-format +msgid "parse error in %s\n" +msgstr "chyba při rozboru %s\n" + +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 +#, c-format +msgid "%s: parsed OK\n" +msgstr "%s: rozbor úspěšný\n" + +#: plugins/sudoers/visudo.c:909 +#, c-format +msgid "%s busy, try again later" +msgstr "%s je zaneprázdněn, zkuste to později" + +#: plugins/sudoers/visudo.c:953 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "zadaný editor (%s) neexistuje" + +#: plugins/sudoers/visudo.c:976 +#, c-format +msgid "unable to stat editor (%s)" +msgstr "nelze zjisti údaje o editoru (%s)" + +#: plugins/sudoers/visudo.c:1024 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "žádný editor nenalezen (cesta k editoru = %s)" + +#: plugins/sudoers/visudo.c:1117 +#, c-format +msgid "Error: cycle in %s_Alias `%s'" +msgstr "Chyba: smyčka v %s_Alias „%s“" + +#: plugins/sudoers/visudo.c:1118 +#, c-format +msgid "Warning: cycle in %s_Alias `%s'" +msgstr "Pozor: smyčka v %s_Alias „%s“" + +#: plugins/sudoers/visudo.c:1124 +#, c-format +msgid "Error: %s_Alias `%s' referenced but not defined" +msgstr "Chyba: %s_Alias „%s“ použit, ale nedefinován" + +#: plugins/sudoers/visudo.c:1125 +#, c-format +msgid "Warning: %s_Alias `%s' referenced but not defined" +msgstr "Pozor: %s_Alias „%s“ použit, ale nedefinován" + +#: plugins/sudoers/visudo.c:1267 +#, c-format +msgid "%s: unused %s_Alias %s" +msgstr "%s: nepoužití %s_Alias %s" + +#: plugins/sudoers/visudo.c:1329 +#, c-format +msgid "" +"%s - safely edit the sudoers file\n" +"\n" +msgstr "" +"%s – bezpečně upraví soubor sudoers\n" +"\n" + +#: plugins/sudoers/visudo.c:1331 +msgid "" +"\n" +"Options:\n" +" -c, --check check-only mode\n" +" -f, --file=file specify sudoers file location\n" +" -h, --help display help message and exit\n" +" -q, --quiet less verbose (quiet) syntax error messages\n" +" -s, --strict strict syntax checking\n" +" -V, --version display version information and exit\n" +" -x, --export=file export sudoers in JSON format" +msgstr "" +"\n" +"Přepínače:\n" +" -c, --check pouze kontroluje\n" +" -f, --file=soubor\n" +" určuje umístění souboru sudoers\n" +" -h, --help zobrazí nápovědu a skončí\n" +" -q, --quiet méně upovídaná (stručnější) hlášení chyb syntaxe\n" +" -s, --strict přísná kontrola syntaxe\n" +" -V, --version zobrazí údaje o verzi a skončí\n" +" -x, --export=soubor\n" +" exportuje sudoers do formátu JSON" + +#: toke.l:894 +msgid "too many levels of includes" +msgstr "příliš mnoho úrovní zanoření" diff --git a/plugins/sudoers/po/da.mo b/plugins/sudoers/po/da.mo Binary files differindex f58830726..e19ec1170 100644 --- a/plugins/sudoers/po/da.mo +++ b/plugins/sudoers/po/da.mo diff --git a/plugins/sudoers/po/da.po b/plugins/sudoers/po/da.po index 1334258cc..d3473441c 100644 --- a/plugins/sudoers/po/da.po +++ b/plugins/sudoers/po/da.po @@ -1,6 +1,6 @@ # Danish translation of sudoers. # This file is put in the public domain. -# Joe Hansen <joedalton2@yahoo.dk>, 2011, 2012, 2013. +# Joe Hansen <joedalton2@yahoo.dk>, 2011, 2012, 2013, 2014. # # audit -> overvågning # dummy -> attrap @@ -16,10 +16,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-28 23:06+0100\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-10 23:06+0100\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "Language: da\n" @@ -248,13 +248,13 @@ msgstr "" " #3) Med stor magt følger stort ansvar.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "ukendt uid: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -455,200 +455,209 @@ msgstr "Ugyldig adgangskodebesked: %s" #: plugins/sudoers/def_data.c:203 #, c-format +msgid "Path to lecture status dir: %s" +msgstr "Sti til undervisningsstatusmappen: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Sti til mappe for godkendelsestidsstempel: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Ejer af mappen for godkendelsestidsstempel: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Brugere i denne gruppe er undtaget fra adgangskode og STI-krav: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Standard for adgangskodeprompt: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 msgid "If set, passprompt will override system prompt in all cases." msgstr "Hvis angivet vil adgangsprompt overskrive systemprompt i alle tilfælde." -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardbruger at køre kommandoer som: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Værdi at overskrive brugers $PATH med: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Sti til redigeringsprogrammet for brug af visudo: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Hvornår der skal kræves en adgangskode for »list« pseudokommando: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Hvornår der skal kræves en adgangskode for »verify« pseudokommando: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Præindlæs attrap-udførelsesfunktioner indeholdt i biblioteket sudo_noexec" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Hvis LDAP-mappe er sat op, ignorer vi så lokal sudoersfil" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Filbeskrivelser >= %d vil blive lukket før udførelse af en kommando" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Hvis angivet kan brugere overskrive værdien af »closeform« med tilvalget -C" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Tillad at brugere kan angive arbitrære miljøvariabler" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Nulstil miljøet til et standardsæt af variabler" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Miljøvariabler at indstillingskontrollere:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Miljøvariabler at fjerne:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Miljøvariabler at bevare:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-rolle at bruge i den nye sikkerhedskontekst: %s" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-type at bruge i den nye sikkerhedskontekst: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Sti til den sudo-specifikke miljøfil: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Sprog at bruge under fortolkning af sudoers: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Tillad at sudo spørger om en adgangskode selv om den vil være synlig" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Tilbyd visuel tilbagemeldning ved adgangskodeprompten når der er brugerinddata" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Brug hurtigere globbing som er mindre præcis, men som ikke tilgår filsystemet" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Umask'en angivet i sudoers vil overskrive brugerens, også selv om den er mere tilladende" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "Log brugers inddata for kommandoen der bliver kørt" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Log uddata for kommandoen der bliver kørt" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Komprimer I/O-log med brug af zlib" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Kør altid kommandoer i en pseudo-tty" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Udvidelsesmodul for ikke-Unix-gruppeunderstøttelse: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Mappe at gemme inddata-/uddatalogge i: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fil at gemme inddata-/uddatalog i: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Tilføjer et punkt til utmp/utmpx-filen når der allokeres en pty" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Angiv brugeren i utmp til brugeren kør som, ikke den opstartende bruger" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Sæt af tilladte privilegier" # engelsk fejl? Set of limited ... -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Sæt af begræns privilegier" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Kør kommandoer på en pty i baggrunden" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "PAM-tjenestenavn der skal bruges" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use for login shells" msgstr "PAM-tjenestenavn der skal bruges for logindskaller" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "Attempt to establish PAM credentials for the target user" msgstr "Forsøg på at etablere PAM-akkreditiver for målbrugeren" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Create a new PAM session for the command to run in" msgstr "Opret en ny PAM-session som kommandoen kan køre i" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksimalt I/O-logsekvenstal: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Aktiver sudoers netgroup-understøttelse" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -725,106 +734,106 @@ msgstr "kan ikke finde symbol »group_plugin« i %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: inkompatibel gruppeudvidelsesmodul for hovedversion %d, forventede %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "Lokal IP-adresse og netmaskepar:\n" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s findes men er ikke en mappe (0%o)" #: plugins/sudoers/iolog.c:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "kan ikke mkdir %s" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "kan ikke åbne %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "kan ikke læse %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "kan ikke skrive til %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "kan ikke oprette %s" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port for stor" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: stigende mellemlager for vært (hostbuf) har ikke nok plads" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "ikkeunderstøttet LDAP uri-type: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "kan ikke blande ldap og ldaps URI'er" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "starttls er ikke understøttet, når der bruges ldaps" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: opbyggende mellemlager for vært (hostbuf) har ikke nok plads" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "kan ikke initialisere SSL-cert og key db: %s" -#: plugins/sudoers/ldap.c:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "du skal angive at TLS_CERT i %s skal bruge SSL" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "kan ikke indhente GMT-tid" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "kan ikke formatere tidsstempel" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "kan ikke bygge tidsfilter" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "sudo_ldap_build_pass1 forskellige allokeringer" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -833,7 +842,7 @@ msgstr "" "\n" "LDAP-rolle: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -842,27 +851,27 @@ msgstr "" "\n" "LDAP-rolle: UKENDT\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Rækkefølge: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Kommandoer:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kan ikke initialisere LDAP: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls angivet men LDAP libs understøtter ikke ldap_start_tls_s() eller ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ugyldig sudoOrder-attribut: %s" @@ -885,57 +894,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s: (kommando fortsat) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "kan ikke åbne logfil: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "kan ikke låse logfil: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Ingen bruger eller vært" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "valideringsfejl" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "bruger IKKE i sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "bruger IKKE autoriseret på vært" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "kommando ikke tilladt" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, 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:291 +#: plugins/sudoers/logging.c:289 #, 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:295 +#: plugins/sudoers/logging.c:293 #, 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:298 +#: plugins/sudoers/logging.c:296 #, 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:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -943,7 +952,7 @@ msgstr "Beklager. Bruger %s har ikke tilladelse til at køre »%s%s%s« som %s%s msgid "%s: command not found" msgstr "%s: Kommando ikke fundet" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -952,41 +961,41 @@ msgstr "" "ignorerer »%s« fundet i ».«\n" "Brug »sudo ./%s« hvis dette er »%s«, du ønsker at køre." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "godkendelsesfejl" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "der kræves en adgangskode" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, 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:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "kan ikke forgrene" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "kan ikke forgrene: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "kan ikke åbne datakanal: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "kan ikke dup stdin: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "kan ikke køre %s: %m" @@ -1056,7 +1065,7 @@ msgstr " Tilvalg: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "kan ikke udføre %s" @@ -1236,9 +1245,8 @@ msgstr "kommando i aktuel mappe" 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:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "kan ikke stat %s" @@ -1248,17 +1256,17 @@ msgstr "kan ikke stat %s" msgid "%s is not a regular file" msgstr "%s er ikke en regulær fil" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, 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:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s er skrivbar for alle" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s er eget af gid %u, bør være %u" @@ -1283,147 +1291,147 @@ msgstr "kan ikke slå vært %s op" msgid "unknown group: %s" msgstr "ukendt gruppe: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "ugyldigt filtertilvalg: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "ugyldig maks ventetid: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "ugyldig hastighedsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Genafspiller sudosession: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, 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:355 +#: plugins/sudoers/sudoreplay.c:357 #, 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:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "kan ikke angive tty til rå (raw) tilstand" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "ugyldig timingfillinje: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "tvetydigt udtryk »%s«" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "manglende »)« i udtryk" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "ukendt søgeterm »%s«" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s kræver et argument" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "ugyldigt regulært udtryk: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "kunne ikke fortolke dato »%s«" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "mangler »(« i udtryk" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "ugyldig kæde »or« (eller)" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "ugyldig kæde »!«" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "ukendt søgeterm %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: Ugyldig logfil" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: Tidsstempelfelt mangler" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: Tidsstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: Brugerfelt mangler" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: runas-brugerfelt mangler" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: runas-gruppefelt mangler" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, 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:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, 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:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1432,7 +1440,7 @@ msgstr "" "%s - genafspil sudosessionslogge\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1482,46 +1490,34 @@ msgstr "" "\n" "Kommando ikke matchet" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "tidsstempelsti er for lang: %s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "kan ikke afkorte tidsstempelfil til %lld byte" -#: plugins/sudoers/timestamp.c:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s ejet af uid %u, bør være uid %u" +msgid "%s is group writable" +msgstr "%s er gruppe-skrivbar" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s er skrivbar for ikkeejer (0%o), bør være tilstand 0700" +msgid "timestamp path too long: %s/%s" +msgstr "tidsstempelsti er for lang: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s findes men er ikke en regulær fil (0%o)" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "ignorerer tidsstempel fra fremtiden" -#: plugins/sudoers/timestamp.c:296 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s skrivbar af ikkeejer (0%o), bør være tilstand 0600" - -#: plugins/sudoers/timestamp.c:351 -#, c-format -msgid "timestamp too far in the future: %20.20s" +msgid "time stamp too far in the future: %20.20s" msgstr "tidsstempel for langt ude i fremtiden: %20.20s" -#: plugins/sudoers/timestamp.c:405 -#, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "kan ikke fjerne %s, vil nulstille til Unix-epoken" - -#: plugins/sudoers/timestamp.c:413 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "kan ikke nulstille %s til Unix-epoken" +msgid "lecture status path too long: %s/%s" +msgstr "undervisningsstatussti er for lang: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1532,7 +1528,7 @@ msgstr "fill_args: overløb for mellemlager" msgid "%s grammar version %d\n" msgstr "%s grammatikversion %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "tryk retur for at redigere %s: " @@ -1556,56 +1552,56 @@ msgstr "midlertidig fil med nullængde (%s), %s uændret" msgid "editor (%s) failed, %s unchanged" msgstr "redigeringsprogram (%s) fejlede, %s uændret" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s uændret" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "kan ikke genåbne midlertidig fil (%s), %s uændrede." -#: plugins/sudoers/visudo.c:499 +#: plugins/sudoers/visudo.c:498 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "kan ikke fortolke midlertidig fil (%s), ukendt fejl" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "internal error, unable to find %s in list!" msgstr "intern fejl, kan ikke finde %s på listen!" -#: plugins/sudoers/visudo.c:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kan ikke angive (uid, gid) af %s til (%u, %u)" -#: plugins/sudoers/visudo.c:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "kan ikke ændre tilstand på %s til 0%o" -#: plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:623 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s og %s er ikke på det samme filsystem, bruger mv til at omdøbe" -#: plugins/sudoers/visudo.c:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "kommando fejlede: »%s %s %s«, %s uændret" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "fejl under omdøbing af %s, %s uændret" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Hvad nu? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1617,87 +1613,87 @@ msgstr "" " afslut(x) uden at gemme ændringer til sudoersfil\n" " afslut(Q) og gem ændringer til sudoersfil (FARLIGT!)\n" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "kan ikke køre %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: forkert ejer (uid, gid) bør være (%u, %u)\n" -#: plugins/sudoers/visudo.c:805 +#: plugins/sudoers/visudo.c:804 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: ugyldige rettigheder, bør være tilstand 0%o\n" -#: plugins/sudoers/visudo.c:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "kunne ikke fortolke %s-fil, ukendt fejl" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, c-format msgid "parse error in %s near line %d\n" msgstr "fortolkningsfejl i %s nær linje %d\n" -#: plugins/sudoers/visudo.c:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "fortolkningsfejl i %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: fortolket o.k.\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s travl, forsøg igen senere" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "angivet redigeringsprogram (%s) findes ikke" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "kan ikke stat redigeringsprogram (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "intet redigeringsprogram fundet (sti for redigeringsprogram = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Fejl: Cyklus i %s_Alias »%s«" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Advarsel: Cyklus i %s_Alias »%s«" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Fejl: %s_Alias »%s« refereret men ikke defineret" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Advarsel: %s_Alias »%s« refereret men ikke defineret" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: ubrugt %s_Alias %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1706,7 +1702,7 @@ msgstr "" "%s - rediger sikkert sudoersfilen\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1728,6 +1724,24 @@ msgstr "" " -V, --version vis information om version og afslut\n" " -x, --export ekporter sudoers i JSON-format" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "for mange niveauer af includes (inkluderinger)" + +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "%s ejet af uid %u, bør være uid %u" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s er skrivbar for ikkeejer (0%o), bør være tilstand 0700" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s findes men er ikke en regulær fil (0%o)" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s skrivbar af ikkeejer (0%o), bør være tilstand 0600" + +#~ msgid "unable to remove %s, will reset to the Unix epoch" +#~ msgstr "kan ikke fjerne %s, vil nulstille til Unix-epoken" + +#~ msgid "unable to reset %s to the Unix epoch" +#~ msgstr "kan ikke nulstille %s til Unix-epoken" diff --git a/plugins/sudoers/po/de.mo b/plugins/sudoers/po/de.mo Binary files differindex eb5dc2eb7..b1d751ef5 100644 --- a/plugins/sudoers/po/de.mo +++ b/plugins/sudoers/po/de.mo diff --git a/plugins/sudoers/po/de.po b/plugins/sudoers/po/de.po index 678c8f7f7..a3ecf40c0 100644 --- a/plugins/sudoers/po/de.po +++ b/plugins/sudoers/po/de.po @@ -2,13 +2,13 @@ # This file is put in the public domain. # Todd C. Miller <Todd.Miller@courtesan.com>, 2011-2013 # Hendrik Knackstedt <hendrik.knackstedt@t-online.de>, 2013 -# Jochen Hein <jochen@jochen.org>, 2001-2013. +# Jochen Hein <jochen@jochen.org>, 2001-2014. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-27 16:01+0100\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-09 10:17+0100\n" "Last-Translator: Jochen Hein <jochen@jochen.org>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: German\n" @@ -243,13 +243,13 @@ msgstr "" " #3) Mit großer Macht kommt große Verantwortung.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "unbekannte uid: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -451,202 +451,212 @@ msgstr "Meldung bei Eingabe eines falschen Passwortes: %s" #: plugins/sudoers/def_data.c:203 #, c-format +msgid "Path to lecture status dir: %s" +msgstr "Verzeichnis für den Belehrungsstatus: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Pfad zum Authentifizierungszeitstempel-Verzeichnis: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Besitzer des Authentifizierungszeitstempelverzeichnisses: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Standard Passwort-Prompt: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 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:223 +#: plugins/sudoers/def_data.c:227 #, 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:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Wert, mit dem der $PATH des Benutzers überschrieben werden soll: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Pfad zum Editor, den visudo verwendenden soll: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Datei-Deskriptoren >= %d werden geschlossen, bevor ein Kommando ausgeführt wird" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 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:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Erlaube Benutzern beliebige Umgebungsvariablen zu setzen" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Setze die Umgebung auf eine Standard-Menge an Variablen zurück" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Prüfe folgende Umgebungsvariablen:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Lösche folgende Umgebungsvariablen:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Erhalte folgende Umgebungsvariablen:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, 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:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Pfad zur sudo-spezifischen »environment«-Datei: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Beim Parsen der sudoers-Datei wird diese Locale verwendet: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Erlaube sudo nach einem Passwort zu fragen, auch wenn das Passwort sichtbar wird" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "Benutzereingaben für den ausgeführten Befehl protokollieren" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Die Ausgabe des ausgeführten Befehls protokollieren" # XXX use input/output logs -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Komprimiere Ein-/Ausgabe-Logs mittels lib" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Starte Kommandos immer in einem Pseudo-TTY" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Pluginh für nicht-Unix Gruppen-Unterstützung: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Verzeichnis zur Speicherung der Ein-/Ausgabe-Logs: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Datei zur Speicherung der Ein-/Ausgabe-Logs: %s" # XXX pty -> pseudo TTY? -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Füge einen Eintrag in die utmp/utmpx-Datei ein, wenn ein Pseudo-TTY erzeugt wird" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Verwende für den Eintrag in der utmp-Datei den runas-Benutzer, nicht den aufrufenden Benutzer" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Menge der erlaubten Priviliegien" # XXX ? -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Menge der eingeschränkten Privilegien" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Starte Kommandos mit einem Pseudo-TTY im Hintergrund" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Verwende den PAM Service-Name" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use for login shells" msgstr "Verwende den PAM Service-Name für Login-Shells" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "Attempt to establish PAM credentials for the target user" msgstr "Versuche die PAM-Credentials für den Ziel-Benutzer zu bekommen" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Create a new PAM session for the command to run in" msgstr "Erzeuge eine neue PAM-Sitzung, um das Kommando auszuführen" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maximale Ein-/Ausgabe-Log Sequenznummer: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +# XXX vector? +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Support für netgroups in sudoers aktivieren" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -723,108 +733,108 @@ msgstr "kann das Symbol \"group_plugin\" in %s nicht finden" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: Die Major-Version %d des Group-Plugins ist inkompatibel, erwartet wird %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "Lokale IP-Adresse und Netzmaske:\n" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, 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:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "kann das Verzeichnis »%s« nicht erstellen" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "kann die Datei »%s« nicht öffnen" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "kann die Datei »%s« nicht lesen" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "kann die Datei »%s« nicht schreiben" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "kann die Datei »%s« nicht erstellen" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: Port ist zu groß" # XXX ? -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: kein Platz zum Erweitern von hostbuf" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "LDAP uri Typ ist nicht unterstützt: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap und ldaps URIs können nicht zusammen verwendet werden" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "starttls wird für ldaps nicht unterstützt" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: kein Platz zum Erzeugen von hostbuf" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "kann die Zertifikat- und Schlüsseldatenbank für SSL nicht initialisieren: %s" -#: plugins/sudoers/ldap.c:595 +#: plugins/sudoers/ldap.c:598 #, 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" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "kann die GMT-Zeit nicht bekommen" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "kann den Zeitstempel nicht formatieren" # XXX ? -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "Kann den Filter beim Kompilieren nicht erstellen" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "sudo_ldap_build_pass1 ungültige Zuordnung" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -833,7 +843,7 @@ msgstr "" "\n" "LDAP-Rolle: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -842,27 +852,27 @@ msgstr "" "\n" "LDAP-Rolle: UNBEKANNT\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Reihenfolge: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Kommandos:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "Kann LDAP nicht initialisieren: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ungültiges »sudoOrder« Attribut: %s" @@ -885,57 +895,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (Kommando fortgesetzt) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "Kann die Log-Datei nicht öffnen: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "Kann die Log-Datei nicht sperren: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Kein Benutzer oder Rechner angegeben" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "Fehler bei der Validierung" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "Der Benutzer ist NICHT in der sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "Der Benutzer ist NICHT auf dem Rechner authorisiert" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "Das Kommando ist nicht erlaubt" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s ist nicht in der sudoers-Datei. Dieser Vorfall wird gemeldet.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s darf sudo für %s nicht verwenden. Dieser Vorfall wird gemeldet.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Tut mir leid, der Benutzer %s darf sudo für %s nicht verwenden.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Tut mir leid, der Benutzer %s darf '%s%s%s' als %s%s%s auf %s nicht ausführen.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -943,7 +953,7 @@ msgstr "Tut mir leid, der Benutzer %s darf '%s%s%s' als %s%s%s auf %s nicht ausf msgid "%s: command not found" msgstr "%s: Kommando nicht gefunden" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -952,42 +962,42 @@ msgstr "" "ignoriere `%s' im aktuellen Verzeichnis ».«\n" "Verwende »sudo ./%s«, wenn dies das gewünschte Kommando »%s« ist." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "Fehler bei der Authentisierung" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "Ein Passwort ist notwendig" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u Fehlversuch bei der Passwort-Eingabe" msgstr[1] "%u Fehlversuche bei der Passwort-Eingabe" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "Fehler bei fork()" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "Fehler bei fork(): %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "Kann die Pipe nicht öffnen: %m" # XXX ? -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "Kann stdin nicht duplizieren" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "Kann %s nicht ausführen: %m" @@ -1057,7 +1067,7 @@ msgstr " Optionen: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "kann %s nicht ausführen" @@ -1244,9 +1254,8 @@ msgstr "Kommando ist im aktuellen Verzeichnis" msgid "sorry, you are not allowed to preserve the environment" msgstr "Uh, Sie dürfen das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "stat konnte nicht auf %s angewandt werden" @@ -1256,17 +1265,17 @@ msgstr "stat konnte nicht auf %s angewandt werden" msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, 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:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s ist für alle beschreibbar (world writable)" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s gehört gid %u, sollte allerdings %u gehören" @@ -1292,151 +1301,151 @@ msgstr "Hostname %s kann nicht aufgelöst werden" msgid "unknown group: %s" msgstr "unbekannte Gruppe: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "Ungültige Filteroption: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "Ungültige maximale Wartezeit: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "Ungültiger Geschwindigkeitsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s Version %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/Zeit: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/Zeit: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Sudo-Sitzung wird abgespielt: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" "Warnung: Ihr Terminal ist zu klein, um das Protokoll korrekt\n" "wiederzugeben.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Protokollgeometrie ist %d x %d, die Geometrie Ihres Terminals ist %d x %d." -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "TTY konnte nicht in den Raw-Mode versetzt werden" # XXX -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "Ungültige Zeitdateizeile: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "Mehrdeutiger Ausdruck »%s«" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "»)« ohne öffnende Klammer im Ausdruck" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "Unbekannter Suchbegriff »%s«" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s erfordert ein Argument" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "ungültiger regulärer Ausdruck: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "Datum »%s« konnte nicht analysiert werden" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "»(« ohne schließende Klammer im Ausdruck" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "Ungültiges nachgestelltes »or«" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "Ungültiges nachgestelltes »!«" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "Unbekannter Suchtyp %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: ungültige Log-Datei" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: Das Feld für den Zeitstempel fehlt" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: Zeitstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: Das Benutzerfeld fehlt" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: Das Feld für den »runas«-Benutzer fehlt" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: Das Feld für die »runas«-Gruppe fehlt" # XXX -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "Aufruf: %s [-h] [-d Verzeichnis] [-m Max_Wartezeit] [-s Geschwindigkeitsfaktor] ID\n" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "Aufruf: %s [-h] [-d Verzeichnis] -l [search Ausdruck]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1445,7 +1454,7 @@ msgstr "" "%s – sudo-Sitzungsprotokolle abspielen\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1496,47 +1505,34 @@ msgstr "" "\n" "Befehl nicht erkannt" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "Zeitstempelpfad zu lang: %s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "kann die Zeitstempeldatei nicht auf %lld Bytes abschneiden" -#: plugins/sudoers/timestamp.c:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s gehört UID %u, sollte UID %u gehören" +msgid "%s is group writable" +msgstr "%s ist für die Gruppe beschreibbar" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s durch nicht-Besitzer schreibbar (0%o), sollte Modus 0700 haben" +msgid "timestamp path too long: %s/%s" +msgstr "Zeitstempelpfad zu lang: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s existiert, ist aber keine reguläre Datei (0%o)" - -#: plugins/sudoers/timestamp.c:296 -#, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s durch nicht-Besitzer schreibbar (0%o), sollte Modus 0600 haben" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "ignoriere Zeitstempel aus der Zukunft" -#: plugins/sudoers/timestamp.c:351 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "timestamp too far in the future: %20.20s" +msgid "time stamp too far in the future: %20.20s" msgstr "Zeitstempel ist zu weit in der Zukunft: %20.20s" -#: plugins/sudoers/timestamp.c:405 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "%s konnte nicht entfernt werden, der Zeitraum wird auf Unix-Epoch zurückgesetzt" - -# XXX -#: plugins/sudoers/timestamp.c:413 -#, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "Kann %s nicht auf die Unix-Epoch zurücksetzen" +msgid "lecture status path too long: %s/%s" +msgstr "Pfad zur Belehrung ist zu lang: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1547,7 +1543,7 @@ msgstr "fill_args: Pufferüberlauf" msgid "%s grammar version %d\n" msgstr "%s-Grammatik Version %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "Drücken Sie die Eingabetaste, um %s zu bearbeiten: " @@ -1571,56 +1567,56 @@ msgstr "Leere temporäre Datei (%s), %s ist unverändert" msgid "editor (%s) failed, %s unchanged" msgstr "Editor-Aufruf (%s) ist gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s unverändert" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, 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:499 +#: plugins/sudoers/visudo.c:498 #, 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:535 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "internal error, unable to find %s in list!" msgstr "Interner Fehler, %s in der Liste nicht gefunden!" -#: plugins/sudoers/visudo.c:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, 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:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, 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:624 +#: plugins/sudoers/visudo.c:623 #, 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:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "Kommando gescheitert: »%s %s %s«, %s unverändert" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "Fehler beim Umbennenen von %s, %s unverändert" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Was jetzt? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1632,87 +1628,87 @@ msgstr "" " 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:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, 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:805 +#: plugins/sudoers/visudo.c:804 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: Falsche Zugriffsrechte, sollten Modus 0%o sein\n" -#: plugins/sudoers/visudo.c:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "Analyse der Datei %s gescheitert, unbekannter Fehler" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, c-format msgid "parse error in %s near line %d\n" msgstr "Analysefehler in %s nahe Zeile %d\n" -#: plugins/sudoers/visudo.c:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "Analysefehler in %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: Analyse OK\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s ist in Verwendung, versuchen Sie es später erneut" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "Der angegebene Editor (%s) ist nicht vorhanden" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "Anwenden von stat auf den Editor ist gescheitert (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "Kein Editor gefunden (Pfad zum Editor = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Fehler: zyklischer Verweis in %s_Alias »%s«" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Warnung: zyklischer Verweis in %s_Alias »%s«" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Fehler: %s_Alias »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Warnung: %s_Alias »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: Unbenutzter %s_Alias %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1721,7 +1717,7 @@ msgstr "" "%s – Die sudoers-Datei sicher bearbeiten\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1743,6 +1739,6 @@ msgstr "" " -V, --version Versionsinformation anzeigen und beenden\n" " -x, --export exportiere sudoers im JSON-Format" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "Zu viele geschachtelte include Einträge" diff --git a/plugins/sudoers/po/eo.mo b/plugins/sudoers/po/eo.mo Binary files differindex b4a445bc0..100bf7e79 100644 --- a/plugins/sudoers/po/eo.mo +++ b/plugins/sudoers/po/eo.mo diff --git a/plugins/sudoers/po/eo.po b/plugins/sudoers/po/eo.po index 3682651b2..1c1cd170a 100644 --- a/plugins/sudoers/po/eo.po +++ b/plugins/sudoers/po/eo.po @@ -1,13 +1,13 @@ # Esperanto translations for sudo package. # This file is put in the public domain. -# Felipe Castro <fefcas@gmail.com>, 2013. +# Felipe Castro <fefcas@gmail.com>, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-30 09:38-0300\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-08 12:52-0500\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" "Language: eo\n" @@ -237,13 +237,13 @@ msgstr "" " #3) Granda povo devigas grandan responson.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "nekonata uid: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -444,199 +444,208 @@ msgstr "Neĝusta pasvorta mesaĝo: %s" #: plugins/sudoers/def_data.c:203 #, c-format -msgid "Path to authentication timestamp dir: %s" -msgstr "Pado al dosierujo de aŭtentikiga tempostampo: %s" +msgid "Path to lecture status dir: %s" +msgstr "Pado al dosierujo de prelega stato: %s" #: plugins/sudoers/def_data.c:207 #, c-format -msgid "Owner of the authentication timestamp dir: %s" -msgstr "Estro de la dosierujo de aŭtentikiga tempostampo: %s" +msgid "Path to authentication timestamp dir: %s" +msgstr "Pado al dosierujo de aŭtentikiga tempo-indikilo: %s" #: plugins/sudoers/def_data.c:211 #, c-format -msgid "Users in this group are exempt from password and PATH requirements: %s" -msgstr "Uzantoj en la grupo en devas plenumi la postulojn de posvorto kaj PATH: %s" +msgid "Owner of the authentication timestamp dir: %s" +msgstr "Estro de la dosierujo de aŭtentikiga tempo-indikilo: %s" #: plugins/sudoers/def_data.c:215 #, c-format +msgid "Users in this group are exempt from password and PATH requirements: %s" +msgstr "Uzantoj en la grupo en devas plenumi la postulojn de pasvorto kaj PATH: %s" + +#: plugins/sudoers/def_data.c:219 +#, c-format msgid "Default password prompt: %s" msgstr "Defaŭlta pasvorta peto: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se aktivigita, passprompt superregas sistemajn invitojn ĉiuokaze." -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "Defaŭlta uzanto por plenumigi komandojn: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valoro per kiu superregi la PATH-on de uzanto: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Pado al la tekstoredaktilo uzota de visudo: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kiam postuli pasvorton por la pseŭdokomando 'list': %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kiam postuli pasvorton por la pseŭdokamando 'verify': %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Anstaŭŝargi la falsan exec-funkciojn enhavatajn en la biblioteko sudo_noexec" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Se LDAP-dosierujo estas aktiva, ni ignoru la lokan suders-dosieron" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Dosiero-priskribiloj >= %d fermiĝos antaŭ ol plenumigi komandon" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Se aktiva, uzantoj rajtas superregi la voloron de 'closefrom' per la parametro -C" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Permesi, ke uzantoj valorizu arbitrajn medivariablojn" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Restarigi la medion al apriora aro da variabloj" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Medivariabloj por kontroli por sano:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Medivariabloj por forigi:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Medivariabloj konservi:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-rolo por uzi en la nova sekureca kunteksto: %s" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-tipo por uzi en la nova sekureca kunteksto: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Pado al media dosiero specifa al sudo: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Lokaĵaro por uzi dum analizi dosieron sudoers: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Permesi, ke sudo peti pasvorton eĉ se ĝi estus videbla" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Doni vidajn indikojn je la pasvorta enmetanta kiam ekzistas enmeto" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Uzi pli rapida kunigo, kiu estas malpli ĝusta sed ne atingas la dosiersistemon" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "La umask specifa en sudors superregos tio de la uzanto, eĉ se ĝi estas pli permesema" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "Protokoli enmeton de uzanto por la komando, kiun si plenumigas" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Protokoli la eligon de la komando, kiu estas plenumiĝi" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Kunpremi eneligaj protokoloj per zlib" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Ĉiam protokoli komandojn en pseŭda tty" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Kromprogramo por kompreno de ne-uniksaj grupoj: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Dosierujo en kiu konservi eneligaj protokoloj: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Dosiero en kiu konservi la eneliga protokolo: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Aldoni eron al la utmp/utmpx-dosiero dum generi pty-on" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Valorizi uzanton en utmp al la plenumigkiela uzanto, ne la vokanta uzanto" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Aro da permesitaj privilegioj" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Aro da limigaj privilegioj" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Plenumigi komandojn en pty en la fono" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "PAM-servonomo por uzi" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use for login shells" msgstr "PAM-servonomo por uzi por ensalutaj ŝeloj" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "Attempt to establish PAM credentials for the target user" msgstr "ne eblas establi PAM-atestilojn por la cela uzanto" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Create a new PAM session for the command to run in" msgstr "Krei novan PAM-seancon en kiu la komando plenumiĝos" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksimuma sinsekva numero de la en/eliga protokolo: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Aktivigi retgrupan regon de sudoers" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -713,106 +722,106 @@ msgstr "ne eblas trovi simbolon \"group_plugin\" en %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: nekongrua grupa kromprogramo: ĉefa eldono %d, atendita %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "Loka IP-adresa kaj retmaska paroj:\n" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s ekzistas sed ne dosierujo (0%o)" #: plugins/sudoers/iolog.c:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "ne eblas mkdir-i: %s" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi: %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "ne eblas legi %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "ne eblas krei: %s" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: pordo tro granda" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: eluzis spacon etendanta la bufron" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nekonata retadresa tipo de LDAP: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "ne eblas miksi sekurajn kaj nesekurajn retadresojn de LDAP" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "starttls ne estas regata dum uzo de ldaps" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: eluzis spacon muntanta la bufron" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, 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:595 +#: plugins/sudoers/ldap.c:598 #, 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:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "ne eblas atingi GMT-tempon" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" -msgstr "ne eblas aranĝi tempostampon" +msgstr "ne eblas aranĝi tempo-indikilon" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "ne eblas munti tempan filtrilon" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "sudo_ldap_build_pass1: genra malkongruaĵo" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -821,7 +830,7 @@ msgstr "" "\n" "LDAP-rolo: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -830,27 +839,27 @@ msgstr "" "\n" "LDAP-rolo: NEKONATA\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Ordo: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Komandoj:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "ne eblas ekigi LDAP-on: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "nevalida atributo de sudoOrdo: %s" @@ -873,57 +882,57 @@ msgstr "%8s: %s" msgid "%8s : (command continued) %s" msgstr "%8s: (komando ne trovita) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "ne eblas malfermi protokolon: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "ne eblas ŝlosi protokolon: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Neniu uzanto aŭ gastiganto" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "validiga malsukceso" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "uzanto NE estas en sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "uzanto NE permesata en gastiganto" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "komando ne permesata" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, 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:291 +#: plugins/sudoers/logging.c:289 #, 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:295 +#: plugins/sudoers/logging.c:293 #, 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:298 +#: plugins/sudoers/logging.c:296 #, 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:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -931,7 +940,7 @@ msgstr "Bedaŭre uzanto %s ne rajtas plenumigi '%s%s%s'-on kiel %s%s%s en %s.\n" msgid "%s: command not found" msgstr "%s: komando ne trovita" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -940,41 +949,41 @@ msgstr "" "Ignoranta '%s'-on trovita en '.'\n" "Uzu 'sudo ./%s'-on se tio estas la '%s', kiun vi volas plenumigi." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "aŭtentiga malsukceso" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "pasvorto estas bezonata" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, 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:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "ne eblas forki" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "ne eblas forki: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "ne eblas malfermi tubon: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "ne eblas kopii enigon: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "ne eblas plenumigi %s-on: %m" @@ -1044,7 +1053,7 @@ msgstr " Elektoj: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" @@ -1071,17 +1080,17 @@ msgstr "" #: plugins/sudoers/policy.c:690 #, c-format msgid "nsswitch path: %s\n" -msgstr "pado de nsswitch: %s\n" +msgstr "vojo de nsswitch: %s\n" #: plugins/sudoers/policy.c:692 #, c-format msgid "ldap.conf path: %s\n" -msgstr "pado de ldap.conf: %s\n" +msgstr "vojo de ldap.conf: %s\n" #: plugins/sudoers/policy.c:693 #, c-format msgid "ldap.secret path: %s\n" -msgstr "pado de ldap.secret: %s\n" +msgstr "vojo de ldap.secret: %s\n" #: plugins/sudoers/pwutil.c:148 #, c-format @@ -1206,7 +1215,7 @@ msgstr "vi ne rajtas uzi la parametron -C" #: plugins/sudoers/sudoers.c:314 #, c-format msgid "timestamp owner (%s): No such user" -msgstr "tempindika posedanto (%s): neniu tia uzanto" +msgstr "tempo-indikila posedanto (%s): neniu tia uzanto" #: plugins/sudoers/sudoers.c:328 msgid "no tty" @@ -1224,9 +1233,8 @@ msgstr "komando en nuna dosierujo" msgid "sorry, you are not allowed to preserve the environment" msgstr "bedaŭre vi ne rajtas konservi la medion" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "ne eblas stat-i: %s" @@ -1236,17 +1244,17 @@ msgstr "ne eblas stat-i: %s" msgid "%s is not a regular file" msgstr "%s ne estas normala dosiero" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, 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:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s estas skribebla de ĉiuj" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s estas estrita de gid %u, devas esti %u" @@ -1271,147 +1279,147 @@ msgstr "ne eblas trovi gastiganton %s" msgid "unknown group: %s" msgstr "nekonata grupo: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "nevalida filtrila elekto: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "nevalida maksimuma atendo: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "nevalida rapida faktoro: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s eldono %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Refaranta sudo-seancon: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, 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:355 +#: plugins/sudoers/sudoreplay.c:357 #, 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:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "ne eblas elekti tty-on en nudan reĝimon" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "nevalida linio en la tempo-registran dosieron: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "ambigua esprimo \"%s\"" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "esprimo kun ')' sen samnivela '('" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "nekonata serĉaĵo \"%s\"" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s bezonas parametron" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "nevalida regulesprimo: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "ne eblis analizi daton \"%s\"" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "esprimo kun '(' sen samnivela ')'" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "nevalida posta \"or\"" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "nevalida posta \"!\"" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "nekonata serĉtipo %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" -msgstr "%s: nevalida protokol-dosiero" +msgstr "%s: nevalida protokolo-dosiero" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" -msgstr "%s: mankas temp-indika kampo" +msgstr "%s: mankas temp-indikila kampo" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" -msgstr "%s: temp-indiko %s: %s" +msgstr "%s: temp-indikilo %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: mankas kampo de uzanto" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: mankas kampo de runa uzanto" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: mankas kampo de runa grupo" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, 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:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, 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:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1420,7 +1428,7 @@ msgstr "" "%s - refari sudo-seancajn protokolojn\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1470,46 +1478,34 @@ msgstr "" "\n" "Komando sen egalo" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "tempo-indikila pado tro longa: %s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "ne eblas mallongigi tempo-indikilan dosieron ĝis %lld bajtoj" -#: plugins/sudoers/timestamp.c:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s estas estrita de uid %u, devas esti uid %u" +msgid "%s is group writable" +msgstr "%s estas skribebla de la grupo" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s skribebla de ne-estro (0%o), devas esti reĝimo 0700" +msgid "timestamp path too long: %s/%s" +msgstr "tempo-indikila vojo tro longas: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s ekzistas sed ne estas normala dosiero (0%o)" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "ignoranta tempo-indikilon el la estonteco" -#: plugins/sudoers/timestamp.c:296 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s skribebla de ne-estro (0%o), devas esti reĝimo 0600" - -#: plugins/sudoers/timestamp.c:351 -#, c-format -msgid "timestamp too far in the future: %20.20s" +msgid "time stamp too far in the future: %20.20s" msgstr "tempo-indikilo tro estonte: %20.20s" -#: plugins/sudoers/timestamp.c:405 -#, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "ne eblas forigi la dosieron %s, restarigos al la uniksa epoko" - -#: plugins/sudoers/timestamp.c:413 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "ne eblas restarigi la dosieron %s al la uniksa epoko" +msgid "lecture status path too long: %s/%s" +msgstr "vojo de prelega stato tro longas: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1520,7 +1516,7 @@ msgstr "fill_args: bufra superfluo" msgid "%s grammar version %d\n" msgstr "%s gramatika eldono %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "premu enen-klavon por redakti %s-on: " @@ -1532,7 +1528,7 @@ msgstr "skriba eraro" #: plugins/sudoers/visudo.c:430 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" -msgstr "ne eblas stat-i provizoron dosieron (%s), %s neŝanĝita" +msgstr "ne eblas stat-i provizoran dosieron (%s), %s neŝanĝita" #: plugins/sudoers/visudo.c:435 #, c-format @@ -1544,56 +1540,56 @@ msgstr "nul-longa provizora dosiero (%s), %s neŝanĝita" msgid "editor (%s) failed, %s unchanged" msgstr "redaktilo (%s) malsukcesis, %s neŝanĝita" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s neŝanĝita" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, 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:499 +#: plugins/sudoers/visudo.c:498 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "ne eblas analizi provizoran dosieron (%s), nekonata eraro" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:534 #, 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:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, 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:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, 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:624 +#: plugins/sudoers/visudo.c:623 #, 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:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komando malsukcesis: '%s %s %s', %s neŝanĝita" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "eraro dum alinomi %s-on; %s neŝanĝita" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Kion nun? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1605,87 +1601,87 @@ msgstr "" " 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:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, 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:805 +#: plugins/sudoers/visudo.c:804 #, 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:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "malsukcesis analizi dosieron %s, nekonata eraro" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, 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:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "analiza eraro en %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analizita senerare\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s okupata, reprovu pli malfrue" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "specifita tekstoredaktilo (%s) ne ekzistas" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "ne eblas stat-i tekstoredaktilon (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" -msgstr "neniu tekstoredaktilo trovita (pado = %s)" +msgstr "neniu tekstoredaktilo trovita (vojo = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Eraro: ciklo en %s_Alias '%s'" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Averto: ciklo en %s_Alias '%s'" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Eraro: %s_Alias '%s' referinta sed ne difinita" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Averto: %s_Alias '%s' referinta sed ne difinita" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s neuzata %s_Alias %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1694,7 +1690,7 @@ msgstr "" "%s - sekure redakti la dosieron sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1716,10 +1712,28 @@ msgstr "" " -V, --version montri eldonon kaj eliri\n" " -x, --export=dosiero eksporti la dosieron sudoers laŭ JSON-formo" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "tro da niveloj de inkluzivaĵoj" +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "%s estas estrita de uid %u, devas esti uid %u" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s skribebla de ne-estro (0%o), devas esti reĝimo 0700" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s ekzistas sed ne estas normala dosiero (0%o)" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s skribebla de ne-estro (0%o), devas esti reĝimo 0600" + +#~ msgid "unable to remove %s, will reset to the Unix epoch" +#~ msgstr "ne eblas forigi la dosieron %s, restarigos al la uniksa epoko" + +#~ msgid "unable to reset %s to the Unix epoch" +#~ msgstr "ne eblas restarigi la dosieron %s al la uniksa epoko" + #~ msgid "value out of range" #~ msgstr "valoro ne en permesata skalo" diff --git a/plugins/sudoers/po/fi.mo b/plugins/sudoers/po/fi.mo Binary files differindex c250363de..a80317b9c 100644 --- a/plugins/sudoers/po/fi.mo +++ b/plugins/sudoers/po/fi.mo diff --git a/plugins/sudoers/po/fi.po b/plugins/sudoers/po/fi.po index 1fd64714f..098d11148 100644 --- a/plugins/sudoers/po/fi.po +++ b/plugins/sudoers/po/fi.po @@ -1,14 +1,14 @@ # Finnish messages for sudoers. # This file is put in the public domain. # This file is distributed under the same license as the sudo package. -# Jorma Karvonen <karvonen.jorma@gmail.com>, 2011-2013. +# Jorma Karvonen <karvonen.jorma@gmail.com>, 2011-2014. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-31 07:30+0200\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-14 10:54+0200\n" "Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" "Language: fi\n" @@ -238,13 +238,13 @@ msgstr "" " #3) Suuren voiman mukana tulee suuri vastuu.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "tuntematon uid-käyttäjätunniste: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -445,200 +445,209 @@ msgstr "Virheellinen salasanaviesti: %s" #: plugins/sudoers/def_data.c:203 #, c-format +msgid "Path to lecture status dir: %s" +msgstr "Polku luentotilahakemistoon: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Polku todennusaikaleimahakemistoon: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Todennusaikaleimahakemiston omistaja: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Käyttäjät tässä ryhmässä on vapautettu salasana- ja PATH-vaatimuksista: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Oletussalasanakehote: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 msgid "If set, passprompt will override system prompt in all cases." msgstr "Jos asetettu, salasanakehote korvaa järjestelmäkehotteen kaikissa tapauksissa." # Tämä on tekemisessä runas_default -määrittelyn kanssa -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "Oletuskäyttäjä suorittaa komennot käyttäjänä: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Arvo, jolla korvataan käyttäjän $PATH-asetus: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Visudo-editorin käyttämä polku: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kun vaaditaan salasana ’list’-näennäiskomennolle: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kun vaaditaan salasana ’verify’-näennäiskomennolle: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Esilataa vale-exec-funktiot, jotka sisältyvät sudo_noexec-kirjastoon" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Jos LDAP-hakemisto on ylhäällä, ohitammeko paikallisen sudoers-tiedoston" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Tiedostokuvaajat >= %d suljetaan ennen komennon suoritusta" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Jos asetettu, käyttäjä voi korvata ’closefrom’-arvon valitsimella -C" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Salli käyttäjien asettaa mielivaltaisia ympäristömuuttujia" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Nollaa ympäristö muuttujien oletusjoukoksi" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Ympäristömuuttujat, joille tehdään järkevyystarkistus:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Poistettavat ympäristömuuttujat:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Säilytettävät ympäristömuuttujat:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Uudessa turva-asiayhteydessä käytettävä SELinux-rooli: %s" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Uudessa turva-asiayhteydessä käytettävä SELinux-tyyppi: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Polku sudo-kohtaiseen ympäristötiedostoon: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Locale-asetus, jota käytetään sudoers-jäsentämisessä: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Salli sudo-ohjelman kysyä salasana vieläpä jos se olisi näkyvä" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Tarjoa visuaalista palautetta salasanakehotteelta silloin kun on käyttäjäsyöte" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Käyttää nopeampaa jokerimerkkien korvausta, joka on epätarkempi, mutta ei lue tiedostojärjestelmää" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Sudoers umask korvaa käyttäjän umask-määrittelyn, vieläpä jos se on sallivampi" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "Kirjaa lokiin käyttäjän syöte suoritettavalle komennolle" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Kirjaa lokiin suoritettavan komennon tuloste" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Tiivistä siirräntälokit käyttäen zlib-ohjelmaa" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Suorita aina komennot näennäis-tty:ssä" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Lisäosa ei-Unix-ryhmätuelle: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Hakemisto, johon tallennetaan syöte-/tulostelokit: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Tiedosto, johon tallennetaan syöte-/tulosteloki: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Lisää rivi utmp-/utmpx-tiedostoon, kun varataan pty" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Aseta käyttäjäksi utmp-tiedostoon suorittava käyttäjä, ei kutsuva käyttäjä" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Sallittuja käyttöoikeuksia" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Rajoitettuja käyttöoikeuksia" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Suorita komentoja pty:llä taustalla" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Käytettävä PAM-palvelunimi" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use for login shells" msgstr "Kirjautumiskomentotulkeille käytettävä PAM-palvelunimi" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "Attempt to establish PAM credentials for the target user" msgstr "Yritys perustaa PAM-valtuustiedot kohdekäyttäjälle" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Create a new PAM session for the command to run in" msgstr "Luo uusi PAM-istunto suoritettavalle komennolle" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Suurin siirräntälokin sarjanumero: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Ota käyttöön sudoers-verkkoryhmätuki" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -718,111 +727,111 @@ msgstr "symbolin ”group_plugin” löytäminen polusta %s epäonnistui" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: yhteensopimaton ryhmälisäosan major-versio %d, odotettiin %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "Paikallinen ip-osoite ja verkkopeiteparit:\n" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s on olemassa, mutta ei ole hakemisto (0%o)" #: plugins/sudoers/iolog.c:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "käskyn mkdir %s suorittaminen epäonnistui" # Avaamisen kohde voi olla timestamp file, sudoers file tai pathbuf #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "kohteen %s avaaminen epäonnistui" # Parametrinä on sudoers-tiedosto tai pathbuf -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "kohteen %s lukeminen epäonnistui" # Kirjoittamisen kohde voi olla timestamp file tai pathbuf -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "kohteeseen %s kirjoittaminen epäonnistui" # Parametrina on pathbuf -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "hakemistopolun %s luominen epäonnistui" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: portti on liian suuri" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: hostbuf-puskuritila loppui" # URL on verkko-osoite, loogisesti URI on verkkoresurssi(osoite) -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tukematon LDAP-verkkoresurssin tunnustyyppi: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap:n ja ldap-verkkoresurssitunnuksien sekoittaminen epäonnistui" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "starttls ei ole tuettu ldaps-käytössä" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: hostbuf-puskuritila loppui" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "SSL-varmenne- ja -avaintietokannan alustaminen epäonnistui: %s" -#: plugins/sudoers/ldap.c:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "kohteessa %s TLS_CERT on asetettava käyttämään SSL:ää" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "GMT-ajan saaminen epäonnistui" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "aikaleiman muotoileminen epäonnistui" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "aikasuodattimen rakentaminen epäonnistui" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "sudo_ldap_build_pass1-varaustäsmäämättömyys" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -831,7 +840,7 @@ msgstr "" "\n" "LDAP-rooli: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -840,27 +849,27 @@ msgstr "" "\n" "LDAP-rooli: TUNTEMATON\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Järjestys: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Komennot:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kohteen LDAP alustaminen epäonnistui: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls määritelty, mutta LDAP-kirjastot ei tue funktiota ldap_start_tls_s() tai funktiota ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "virheellinen sudoOrder-attribuutti: %s" @@ -883,57 +892,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s: (komento jatkui) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "lokitiedoston avaaminen epäonnistui: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "lokitiedoston lukitseminen epäonnistui: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Ei käyttäjä eikä tietokone" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "kelpuutushäiriö" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "käyttäjä EI ole sudoers-tiedostossa" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "käyttäjä ei ole varmennettu tietokoneella" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "komento ei ole sallittu" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "käyttäjä %s ei ole sudoers-tiedostossa. Tästä tapahtumasta ilmoitetaan.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "käyttäjä %s ei saa suorittaa komentoa sudo tietokoneella %s. Tästä tapahtumasta ilmoitetaan.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Käyttäjä %s ei voi suorittaa komentoa sudo tietokoneella %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Käyttäjän %s ei sallita suorittaa ’%s%s%s’ käyttäjänä %s%s%s tietokoneella %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -941,7 +950,7 @@ msgstr "Käyttäjän %s ei sallita suorittaa ’%s%s%s’ käyttäjänä %s%s%s msgid "%s: command not found" msgstr "%s: komentoa ei löytynyt" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -950,41 +959,41 @@ msgstr "" "ohitetaan komento ”%s”, joka löytyi kohteesta ’.’\n" "Käytä ”sudo ./%s”, jos tämä on ”%s”-komento, joka halutaan suorittaa." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "todentamishäiriö" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "vaaditaan salasana" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u väärä salasana yritetty" msgstr[1] "%u väärää salasanaa yritetty" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "fork-funktion kutsuminen epäonnistui" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "fork-funktion kutsuminen epäonnistui: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "putken avaaminen epäonnistui: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "funktion dup kutsuminen vakiosyötteellä epäonnistui: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "käskyn %s suorittaminen epäonnistui: %m" @@ -1055,7 +1064,7 @@ msgid "%s: %s" msgstr "%s: %s" # Parametri on path, mutta saattaa sisältää suoritettavan ohjelman -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "kohteen %s suorittaminen epäonnistui" @@ -1237,9 +1246,8 @@ msgstr "komento nykyisessä hakemistossa" msgid "sorry, you are not allowed to preserve the environment" msgstr "ympäristöä ei ole lupa säilyttää" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "funktion stat %s kutsuminen epäonnistui" @@ -1249,17 +1257,17 @@ msgstr "funktion stat %s kutsuminen epäonnistui" msgid "%s is not a regular file" msgstr "%s ei ole tavallinen tiedosto" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s on uid %u -käyttäjän omistama, pitäisi olla %u" -#: plugins/sudoers/sudoers.c:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s on yleiskirjoitettava" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s on gid %u -ryhmän omistama, pitäisi olla %u" @@ -1284,147 +1292,147 @@ msgstr "tietokoneen %s ratkaiseminen epäonnistui" msgid "unknown group: %s" msgstr "tuntematon ryhmä: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "virheellinen suodatinvalitsin: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "virheellinen enimmäisodotusaika: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "virheellinen nopeustekijä: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s versio %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/ajoitus: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/ajoitus: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Toistetaan sudo-istunto: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Varoitus: pääteikkunasi on liian pieni tämän lokin toistamiseksi oikein.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Lokigeometria on %d x %d, pääteikkunasi geometria on %d x %d." -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "tty:n asettaminen raakatilaan epäonnistui" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "virheellinen ajoitustiedostorivi: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "monimerkityksellinen lauseke ”%s”" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "täsmäämätön ’)’ lausekkeessa" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "tuntematon hakutermi ”%s”" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s vaatii argumentin" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "virheellinen säännöllinen lauseke: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "päivämäärän ”%s” jäsentäminen epäonnistui" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "täsmäämätön ’(’ lausekkeessa" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "virheellinen jäljessä oleva ”or”" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "virheellinen jäljessä oleva ”!”" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "tuntematon hakutyyppi %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: virheellinen lokitiedosto" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: aikaleimakenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: aikaleima %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: käyttäjäkenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: suorita käyttäjänä-kenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: suorita ryhmänä-kenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "käyttö: %s [-h] [-d hakemisto] [-m numero] [-s numero] ID-tunniste\n" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "käyttö: %s [-h] [-d hakemisto] -l [hakulauseke]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1433,7 +1441,7 @@ msgstr "" "%s - toista sudo-istuntolokit\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1483,46 +1491,34 @@ msgstr "" "\n" "Täsmäämätön komento" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "aikaleimapolku on liian pitkä: %s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "aikaleimatiedoston typistäminen %lld-tavun kokoiseksi epäonnistui" -#: plugins/sudoers/timestamp.c:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s on uid %u:n omistama, pitäisi olla uid %u:n omistama" +msgid "%s is group writable" +msgstr "%s on ryhmäkirjoitettava" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s on kirjoitettava ei-omistajalle (0%o), pitäisi olla tila 0700" +msgid "timestamp path too long: %s/%s" +msgstr "aikaleimapolku on liian pitkä: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s on olemassa, mutta ei ole tavallinen tiedosto (0%o)" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "ohitetaan aikaleima tulevaisuudesta" -#: plugins/sudoers/timestamp.c:296 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s on kirjoitettava ei-omistajalle (0%o), pitäisi olla tila 0600" - -#: plugins/sudoers/timestamp.c:351 -#, c-format -msgid "timestamp too far in the future: %20.20s" +msgid "time stamp too far in the future: %20.20s" msgstr "aikaleima liian kaukana tulevaisuudessa: %20.20s" -#: plugins/sudoers/timestamp.c:405 -#, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "kohteen %s poistaminen epäonnistui, nollaa Unix-ajan" - -#: plugins/sudoers/timestamp.c:413 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "kohteen %s nollaaminen Unix-ajaksi epäonnistui" +msgid "lecture status path too long: %s/%s" +msgstr "luentotilapolku on liian pitkä: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1533,7 +1529,7 @@ msgstr "fill_args: puskuriylivuoto" msgid "%s grammar version %d\n" msgstr "%s kielioppiversio %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "muokkaa %s painamalla enter-painiketta: " @@ -1557,56 +1553,56 @@ msgstr "nollapituinen tilapäinen tiedosto (%s), %s ennallaan" msgid "editor (%s) failed, %s unchanged" msgstr "editori (%s) epäonnistui, %s ennallaan" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s ennallaan" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "tilapäisen tiedoston (%s) avaaminen uudelleen epäonnistui, %s ennallaan." -#: plugins/sudoers/visudo.c:499 +#: plugins/sudoers/visudo.c:498 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "tilapäisen tiedoston (%s) jäsentäminen epäonnistui, tuntematon virhe" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "internal error, unable to find %s in list!" msgstr "sisäinen virhe, kohteen %s löytäminen luettelosta epäonnistui!" -#: plugins/sudoers/visudo.c:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kohteen %s (uid, gid) asettaminen arvoihin (%u, %u) epäonnistui" -#: plugins/sudoers/visudo.c:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "tilan %s vaihtaminen arvoon 0%o epäonnistui" -#: plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:623 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s ja %s eivät ole samassa tiedostojärjestelmässä, käytetään komentoa mv uudelleennimeämiseen" -#: plugins/sudoers/visudo.c:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komento epäonnistui: ’%s %s %s’, %s ennallaan" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "virhe nimettäessä %s uudelleen, %s ennallaan" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Mitä nyt?" -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1619,87 +1615,87 @@ msgstr "" " (Q) poistu ja tallenna muutokset sudoers-tiedostoon (VAARA!)\n" # Parametri on path, mutta saattaa sisältää suoritettavan ohjelman -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "kohteen %s suorittaminen epäonnistui" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: väärä omistaja (uid, gid), pitäisi olla (%u, %u)\n" -#: plugins/sudoers/visudo.c:805 +#: plugins/sudoers/visudo.c:804 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: väärät käyttöoikeudet, pitäisi olla tila 0%o\n" -#: plugins/sudoers/visudo.c:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "tiedoston %s jäsentäminen epäonnistui, tuntematon virhe" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, c-format msgid "parse error in %s near line %d\n" msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d\n" -#: plugins/sudoers/visudo.c:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "jäsentämisvirhe tiedostossa %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: jäsentäminen valmis\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s varattu, yritä myöhemmin uudelleen" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "määritelty editori (%s) ei ole olemassa" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "funktion stat editor (%s) kutsuminen epäonnistui" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "editoria ei löytynyt (editoripolku = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Virhe: jakso kohteessa %s_Alias ”%s”" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Varoitus: jakso kohteessa %s_Alias ”%s”" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Virhe: %s_Alias ”%s” uudelleenviitattu, mutta ei määritelty" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Varoitus: %s_Alias ”%s” uudelleenviitattu, mutta ei määritelty" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: käyttämätön %s_Alias %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1708,7 +1704,7 @@ msgstr "" "%s - muokkaa sudoers-tiedostoa turvallisesti\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1730,10 +1726,28 @@ msgstr "" " -V, --version näytä versiotiedot ja poistu\n" " -x, --export=tiedosto vie sudoers-tiedosto JSON-muodossa" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "liian monta include-tasoa" +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "%s on uid %u:n omistama, pitäisi olla uid %u:n omistama" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s on kirjoitettava ei-omistajalle (0%o), pitäisi olla tila 0700" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s on olemassa, mutta ei ole tavallinen tiedosto (0%o)" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s on kirjoitettava ei-omistajalle (0%o), pitäisi olla tila 0600" + +#~ msgid "unable to remove %s, will reset to the Unix epoch" +#~ msgstr "kohteen %s poistaminen epäonnistui, nollaa Unix-ajan" + +#~ msgid "unable to reset %s to the Unix epoch" +#~ msgstr "kohteen %s nollaaminen Unix-ajaksi epäonnistui" + #~ msgid "invalid value" #~ msgstr "virheellinen arvo" @@ -1892,9 +1906,6 @@ msgstr "liian monta include-tasoa" #~ msgid "unable to get runas group vector" #~ msgstr "runas-ryhmävektorin hakeminen epäonnistui" -#~ msgid "unable to reset group vector" -#~ msgstr "ryhmävektorin nollaaminen epäonnistui" - #~ msgid "unable to get group vector" #~ msgstr "ryhmävektorin hakeminen epäonnistui" diff --git a/plugins/sudoers/po/it.mo b/plugins/sudoers/po/it.mo Binary files differindex ed34d0cb7..2e2c0bcf5 100644 --- a/plugins/sudoers/po/it.mo +++ b/plugins/sudoers/po/it.mo diff --git a/plugins/sudoers/po/it.po b/plugins/sudoers/po/it.po index 9861268ec..aa4b5ba6e 100644 --- a/plugins/sudoers/po/it.po +++ b/plugins/sudoers/po/it.po @@ -4,18 +4,19 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.9b2\n" +"Project-Id-Version: sudoers-1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-26 22:16+0100\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-08 19:06+0100\n" "Last-Translator: Milo Casagrande <milo@milo.name>\n" "Language-Team: Italian <tp@lists.linux.it>\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8-bit\n" -"Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Gtranslator 2.91.6\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.6.4\n" +"X-Poedit-SourceCharset: UTF-8\n" #: confstr.sh:2 msgid "Password:" @@ -237,13 +238,13 @@ msgstr "" " #3) Da grandi poteri derivano grandi responsabilità\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "uid sconosciuto: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -444,199 +445,208 @@ msgstr "Messaggio password errata: %s" #: plugins/sudoers/def_data.c:203 #, c-format +msgid "Path to lecture status dir: %s" +msgstr "Percorso directory di stato della lezione: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Percorso directory con la marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, 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:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Prompt predefinito per la password: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 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:223 +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "Utente predefinito con cui eseguire i comandi: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, 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:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Percorso all'editor per visudo: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 #, 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:255 +#: plugins/sudoers/def_data.c:259 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:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Consente agli utenti di impostare variabili d'ambiente" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Reimposta l'ambiente con le variabili predefinite" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Variabile d'ambienti da validare:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Variabili d'ambiente da rimuovere:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Variabili d'ambiente da preservare:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, 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:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, 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:295 +#: plugins/sudoers/def_data.c:299 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:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Registra l'output del comando in esecuzione" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Comprime i registri utilizzando zlib" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Esegue sempre i comandi in uno pseudo-tty" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin per supporto ai gruppi non-Unix: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, 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:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Privilegi concessi" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Privilegi non concessi" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Esegue i comandi in un pty in background" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Nome del servizio PAM da usare" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 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:367 +#: plugins/sudoers/def_data.c:371 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:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Numero massimo di sequenze I/O di registro: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Abilita support netgroup in sudoers" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -713,106 +723,106 @@ msgstr "impossibile trovare il simbolo \"group_plugin\" in %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: major version %d del plugin per il gruppo non compatibile, atteso %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 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/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, 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:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "impossibile creare la directory %s" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "impossibile aprire %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "impossibile leggere %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "impossibile scrivere su %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "impossibile creare %s" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: porta troppo grande" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: spazio esaurito nell'espansione di hostbuf" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipologia di uri LDAP non supportata: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "impossibile utilizzare URI ldap e ldaps assieme" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "starttls non supportato quando viene utilizzato ldaps" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: spazio esaurito nella generazione di hostbuf" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, 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:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "è necessario impostare TLS_CERT in %s per usare SSL" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "impossibile ottenere l'ora GMT" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "impossibile formattare la marcatura temporale" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "impossibile creare il filtro temporale" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "discordanza nell'allocazione sudo_ldap_build_pass1" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -821,7 +831,7 @@ msgstr "" "\n" "Ruolo LDAP: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -830,27 +840,27 @@ msgstr "" "\n" "Ruolo LDAP: sconosciuto\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Ordine: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Comandi:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "impossibile inizializzare LDAP: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attributo sudoOrder non valido: %s" @@ -873,57 +883,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (comando continuato) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "impossibile aprire il file di registro: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "impossibile impostare il blocco sul file di registro: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Nessun utente o host" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "validazione non riuscita" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "utente non tra i sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "utente non autorizzato sull'host" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "comando non consentito" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s non è nel file sudoers. Questo evento verrà segnalato.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "A %s non è consentito eseguire sudo su %s. Questo evento verrà segnalato.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "L'utente %s non può eseguire sudo su %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format 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:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -931,7 +941,7 @@ msgstr "All'utente %s non è consentito eseguire \"%s%s%s\" come %s%s%s su %s.\n msgid "%s: command not found" msgstr "%s: comando non trovato" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -940,41 +950,41 @@ msgstr "" "viene ignorato \"%s\" trovato in \".\"\n" "Usare \"sudo ./%s\" se si voleva eseguire \"%s\"." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "autenticazione non riuscita" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "è necessaria una password" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u tentativo di immissione password non corretto" msgstr[1] "%u tentativi di immissione password non corretti" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "impossibile eseguire fork" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "impossibile eseguire fork: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "impossibile aprire una pipe: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "impossibile eseguire dup sullo stdin: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "impossibile eseguire %s: %m" @@ -1044,7 +1054,7 @@ msgstr " Opzioni: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "impossibile eseguire %s" @@ -1224,9 +1234,8 @@ msgstr "comando nella directory corrente" msgid "sorry, you are not allowed to preserve the environment" msgstr "non è consentito preservare l'ambiente" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "impossibile eseguire stat su %s" @@ -1236,17 +1245,17 @@ msgstr "impossibile eseguire stat su %s" msgid "%s is not a regular file" msgstr "%s non è un file regolare" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, 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:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s è di proprietà del gid %u, dovrebbe essere %u" @@ -1271,147 +1280,147 @@ msgstr "impossibile risolvere l'host %s" msgid "unknown group: %s" msgstr "gruppo sconosciuto: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "opzione di filtro non valida: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "attesa massima non valida: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "fattore di velocità non valido: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s versione %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Riproduzione della sessione sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Attenzione: il terminale è troppo piccolo per riprodurre correttamente il registro.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "La geometria del registro è %dx%d, quella del terminale è %dx%d." -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "impossibile impostare il terminale in modalità raw" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "riga di timing del file non valida: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "espressione \"%s\" ambigua" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "carattere \")\" nell'espressione non corrisposto" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "termine di ricerca \"%s\" sconosciuto" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s richiede un argomento" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "espressione regolare non valida: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "impossibile analizzare la data \"%s\"" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "carattere \"(\" nell'espressione non corrisposto" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "\"or\" finale non consentito" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "carattere \"!\" finale non consentito" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "tipo di ricerca %d sconosciuto" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: file di registro non valido" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: manca il campo della marcatura temporale" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marcatura temporale %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: manca il campo utente" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: manca il campo utente di runas" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: manca il campo gruppo di runas" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-h] [-d DIR] [-m NUM] [-s NUM] ID\n" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uso: %s [-h] [-d DIR] -l [ESPRESSIONE DI RICERCA]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1420,7 +1429,7 @@ msgstr "" "%s - Riproduce i registri di sessione di sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1470,46 +1479,34 @@ msgstr "" "\n" "Comando non corrispondente" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "percorso marcatura temporale troppo lungo: %s" +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:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s è di proprietà dell'uid %u, dovrebbe essere dell'uid %u" - -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 -#, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s è accessibile in scrittura dal non-proprietario (0%o), dovrebbe avere modalità 0700" +msgid "%s is group writable" +msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/timestamp.c:284 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s esiste, ma non è un file regolare (0%o)" +msgid "timestamp path too long: %s/%s" +msgstr "percorso marcatura temporale troppo lungo: %s %s" -#: plugins/sudoers/timestamp.c:296 -#, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s è accessibile in scrittura dal non-proprietario (0%o), dovrebbe avere modalità 0600" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "marcatura temporale dal futuro ignorata" -#: plugins/sudoers/timestamp.c:351 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "timestamp too far in the future: %20.20s" +msgid "time stamp too far in the future: %20.20s" msgstr "marcatura temporale troppo avanti nel tempo: %20.20s" -#: plugins/sudoers/timestamp.c:405 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "impossibile rimuovere %s, viene reimpostato a Unix epoch" - -#: plugins/sudoers/timestamp.c:413 -#, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "impossibile reimpostare %s a Unix epoch" +msgid "lecture status path too long: %s/%s" +msgstr "percorso marcatura temporale troppo lungo: %s %s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1520,7 +1517,7 @@ msgstr "fill_args: buffer overflow" msgid "%s grammar version %d\n" msgstr "%s versione grammaticale %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "premere Invio per modificare %s:" @@ -1544,56 +1541,56 @@ msgstr "file temporaneo di lunghezza pari a zero (%s), %s non modificato" msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) non riuscito, %s non modificato" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s non modificato" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, 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:499 +#: plugins/sudoers/visudo.c:498 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "impossibile analizzare il file temporaneo (%s), errore sconosciuto" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "internal error, unable to find %s in list!" msgstr "errore interno, impossibile trovare %s nell'elenco." -#: plugins/sudoers/visudo.c:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, 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:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, 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:624 +#: plugins/sudoers/visudo.c:623 #, 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:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando non riuscito: \"%s %s %s\", %s non modificato" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "errore nel rinominare %s, %s non è stato modificato" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Che fare ora?" -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1605,94 +1602,94 @@ msgstr "" " (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:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "impossibile avviare %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, 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:805 +#: plugins/sudoers/visudo.c:804 #, 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:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "analisi del file %s non riuscita, errore sconosciuto" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, 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:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "errore di analisi in %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analisi effettuata correttamente\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s occupato, riprovare" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "l'editor specificato (%s) non esiste" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "impossibile eseguire stat sull'editor (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "nessun editor trovato (percorso dell'editor = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Errore: ciclo in %s_Alias \"%s\"" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Attenzione: ciclo in %s_Alias \"%s\"" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Errore: riferimento a \"%2$s\" %1$s_Alias, ma non definito" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Attenzione: riferimento a \"%2$s\" %1$s_Alias, ma non definito" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%1$s: %3$s di %2$s_Alias non utilizzato" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "%s - Modifica in sicurezza il file sudoers\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1714,6 +1711,6 @@ msgstr "" " -V, --version Visualizza la versione ed esce\n" " -x, --export=FILE Esporta il file sudoers in formato JSON" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "troppi livelli di inclusioni" diff --git a/plugins/sudoers/po/pl.mo b/plugins/sudoers/po/pl.mo Binary files differindex e506668cf..acb446b27 100644 --- a/plugins/sudoers/po/pl.mo +++ b/plugins/sudoers/po/pl.mo diff --git a/plugins/sudoers/po/pl.po b/plugins/sudoers/po/pl.po index ae8d15473..457915843 100644 --- a/plugins/sudoers/po/pl.po +++ b/plugins/sudoers/po/pl.po @@ -1,13 +1,13 @@ # Polish translation for sudo/sudoers. # This file is put in the public domain. -# Jakub Bogusz <qboosh@pld-linux.org>, 2011-2013. +# Jakub Bogusz <qboosh@pld-linux.org>, 2011-2014. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-26 21:16+0100\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-08 17:34+0100\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language: pl\n" @@ -236,13 +236,13 @@ msgstr "" " 3) z dużą władzą wiąże się duża odpowiedzialność.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "nieznany uid: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -443,199 +443,208 @@ msgstr "Komunikat o błędnym haśle: %s" #: plugins/sudoers/def_data.c:203 #, c-format +msgid "Path to lecture status dir: %s" +msgstr "Ścieżka katalogu stanu instrukcji: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Ścieżka katalogu znaczników czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Właściciel katalogu znaczników czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Grupa, której użytkownicy są zwolnieni z wymagań dot. haseł i PATH: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Domyślne pytanie o hasło: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 msgid "If set, passprompt will override system prompt in all cases." msgstr "Czy passprompt ma być używane zamiast systemowego zapytania we wszystkich przypadkach" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "Domyślny użytkownik do uruchamiania poleceń: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Wartość do podstawienia za $PATH użytkownika: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Ścieżka do edytora, który ma być używany przez visudo: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kiedy ma być wymagane hasło dla pseudopolecenia 'list': %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kiedy ma być wymagane hasło dla pseudopolecenia 'verify': %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 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:247 +#: plugins/sudoers/def_data.c:251 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Jeśli istnieje katalog LDAP, czy ignorować lokalny plik sudoers" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Deskryptory plików >= %d będą zamykane przed uruchomieniem polecenia" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Czy użytkownicy mogą zmieniać wartość `closefrom' opcją -C" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Zezwolenie użytkownikom na ustawianie dowolnych zmiennych środowiskowych" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Wyczyszczenie środowiska do domyślnego zbioru zmiennych" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Zmienne środowiskowe do sprawdzania poprawności:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Zmienne środowiskowe do usunięcia:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Zmienne środowiskowe do zachowania:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Rola SELinuksa do używania w nowym kontekście bezpieczeństwa: %s" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Typ SELinuksa do używania w nowym kontekście bezpieczeństwa: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Ścieżka do pliku środowiska specyficznego dla sudo: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Lokalizacja, jak ma być używana przy analizie pliku sudoers: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 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:299 +#: plugins/sudoers/def_data.c:303 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Uwidocznienie wprowadzania hasła przez użytkownika w miarę wpisywania" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Użycie szybszych masek (glob) - mniej dokładnych, ale nie odwołujących się do systemu plików" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Wartość umask podana w sudoers ma zastąpić wartość użytkownika, nawet jeśli pozwala na więcej" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "Logowanie wejścia użytkownika dla uruchamianych poleceń" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Logowanie wyjścia z uruchamianych poleceń" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Kompresja logów we/wy przy użyciu zliba" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Uruchamianie poleceń zawsze na pseudoterminalu" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Wtyczka do obsługi grup nieuniksowych: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, 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:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Dodawanie wpisu do pliku utmp/utmpx przy przydzielaniu pty" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Ustawianie użytkownika w utmp jako docelowego, nie wywołującego" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Zbiór dozwolonych uprawnień" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Zbiór ograniczonych uprawnień" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Uruchomienie poleceń na pseudoterminalu w tle" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Nazwa usługi PAM do użycia" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 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:367 +#: plugins/sudoers/def_data.c:371 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:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksymalny numer sekwencji logu we/wy: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Włączenie obsługi grup sieciowych w sudoers" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -712,106 +721,106 @@ msgstr "nie udało się odnaleźć symbolu \"group_plugin\" w %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: niezgodna główna wersja wtyczki grup %d, oczekiwano %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "Pary lokalnych adresów IP i masek:\n" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, 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:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "nie udało się wykonać mkdir %s" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "nie udało się odczytać %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "nie udało się zapisać do %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "nie udało się utworzyć %s" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port zbyt duży" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: brak miejsca podczas rozszerzania hostbuf" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nieobsługiwany rodzaj URI LDAP: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "nie można mieszać URI ldap i ldaps" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "brak obsługi starttls w przypadku użycia ldaps" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: brak miejsca podczas konstruowania hostbuf" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, 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:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "aby używać SSL, trzeba ustawić TLS_CERT w %s" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "nie udało się pobrać czasu GMT" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "nie udało się sformatować znacznika czasu" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "nie udało się stworzyć filtra czasu" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "niezgodność przydzielenia sudo_ldap_build_pass1" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -820,7 +829,7 @@ msgstr "" "\n" "Rola LDAP: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -829,27 +838,27 @@ msgstr "" "\n" "Rola LDAP: NIEZNANA\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Porządek: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Polecenia:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "nie udało się zainicjować LDAP: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "błędny atrybut sudoOrder: %s" @@ -872,57 +881,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (kontynuacja polecenia) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "nie udało się otworzyć pliku logu: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "nie udało się zablokować pliku logu: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Brak użytkownika lub hosta" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "błąd kontroli poprawności" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "użytkownik NIE występuje w sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "użytkownik NIE jest autoryzowany na hoście" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "polecenie niedozwolone" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s nie występuje w pliku sudoers. Ten incydent zostanie zgłoszony.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s nie ma uprawnień do uruchamiania sudo na %s. Ten incydent zostanie zgłoszony.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Niestety użytkownik %s nie może uruchamiać sudo na %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Niestety użytkownik %s nie ma uprawnień do uruchamiania '%s%s%s' jako %s%s%s na %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -930,7 +939,7 @@ msgstr "Niestety użytkownik %s nie ma uprawnień do uruchamiania '%s%s%s' jako msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -939,15 +948,15 @@ msgstr "" "zignorowano plik `%s' znaleziony w '.'\n" "Proszę użyć `sudo ./%s', jeśli to `%s' ma być uruchomiony." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "błąd uwierzytelniania" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "wymagane jest hasło" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -955,26 +964,26 @@ msgstr[0] "%u błędna próba wprowadzenia hasła" msgstr[1] "%u błędne próby wprowadzenia hasła" msgstr[2] "%u błędnych prób wprowadzenia hasła" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "nie udało się wykonać fork" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "nie udało się wykonać fork: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "nie udało się otworzyć potoku: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "nie udało się wykonać dup na stdin: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "nie udało się wywołać %s: %m" @@ -1044,7 +1053,7 @@ msgstr " Opcje: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "nie udało się wywołać %s" @@ -1224,9 +1233,8 @@ msgstr "polecenie w bieżącym katalogu" msgid "sorry, you are not allowed to preserve the environment" msgstr "niestety brak uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "nie udało się wykonać stat na %s" @@ -1236,17 +1244,17 @@ msgstr "nie udało się wykonać stat na %s" msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, 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:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "właścicielem %s jest gid %u, powinien być %u" @@ -1271,147 +1279,147 @@ msgstr "nie udało się rozwiązać nazwy hosta %s" msgid "unknown group: %s" msgstr "nieznana grupa: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "błędna opcja filtra: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "błędny maksymalny czas oczekiwania: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "błędny współczynnik szybkości: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s wersja %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/czas: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/czas: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Odtwarzanie sesji sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Uwaga: ten terminal jest za mały, aby właściwie odtworzyć log.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Geometria logu to %d x %d, geometria terminala to %d x %d." -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "nie udało się przestawić tty w tryb surowy" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "błędna linia pliku czasu: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "niejednoznaczne wyrażenie \"%s\"" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "niesparowany ')' w wyrażeniu" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "nieznany warunek wyszukiwania \"%s\"" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s wymaga argumentu" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "błędne wyrażenie regularne: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "nie udało się przeanalizować daty \"%s\"" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "niesparowany '(' w wyrażeniu" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "niedozwolone kończące \"or\"" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "niedozwolony kończący \"!\"" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "nieznany typ wyszukiwania %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: błędny plik logu" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: brak pola znacznika czasu" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: znacznik czasu %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: brak pola z użytkownikiem" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: brak pola z użytkownikiem runas" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: brak pola z grupą runas" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "Składnia: %s [-h] [-d katalog] [-m liczba] [-s wsp_szybkości] ID\n" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "Składnia: %s [-h] [-d katalog] -l [wyrażenie wyszukiwania]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1420,7 +1428,7 @@ msgstr "" "%s - odtwarzanie logów sesji sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1470,46 +1478,34 @@ msgstr "" "\n" "Polecenie nie znalezione" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "ścieżka znacznika czasu zbyt długa: %s" +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:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "właścicielem %s jest uid %u, powinien być uid %u" +msgid "%s is group writable" +msgstr "%s jest zapisywalny dla groupy" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s zapisywalny nie tylko dla właściciela (uprawnienia 0%o, powinny być 0700)" +msgid "timestamp path too long: %s/%s" +msgstr "ścieżka znacznika czasu zbyt długa: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s istnieje, ale nie jest zwykłym plikiem (0%o)" - -#: plugins/sudoers/timestamp.c:296 -#, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s zapisywalny nie tylko dla właściciela (uprawnienia 0%o, powinny być 0600)" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "znacznik czasu zbyt daleko w przyszłości" -#: plugins/sudoers/timestamp.c:351 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "timestamp too far in the future: %20.20s" +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:405 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "nie udało się usunąć %s, zostanie zresetowany do uniksowego epoch" - -#: plugins/sudoers/timestamp.c:413 -#, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "nie udało się zresetować %s do uniksowego epoch" +msgid "lecture status path too long: %s/%s" +msgstr "ścieżka stanu instrukcji zbyt długa: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1520,7 +1516,7 @@ msgstr "fill_args: przepełnienie bufora" msgid "%s grammar version %d\n" msgstr "%s, wersja gramatyki %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "wciśnięcie return przejdzie do edycji %s: " @@ -1544,56 +1540,56 @@ msgstr "plik tymczasowy (%s) zerowej długości, %s nie zmieniony" msgid "editor (%s) failed, %s unchanged" msgstr "błąd edytora (%s), %s nie zmieniony" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s nie zmieniony" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, 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:499 +#: plugins/sudoers/visudo.c:498 #, 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:535 +#: plugins/sudoers/visudo.c:534 #, 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:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, 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:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, 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:624 +#: plugins/sudoers/visudo.c:623 #, 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:638 +#: plugins/sudoers/visudo.c:637 #, 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:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "błąd podczas zmiany nazwy %s, %s nie zmieniony" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Co teraz? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1605,87 +1601,87 @@ msgstr "" " (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:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, 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:805 +#: plugins/sudoers/visudo.c:804 #, 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:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, 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:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, 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:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "błąd składni w %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: składnia poprawna\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s zajęty, proszę spróbować później" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "podany edytor (%s) nie istnieje" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "nie udało się wykonać stat na edytorze (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "nie znaleziono edytora (ścieżka = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Błąd: cykl w %s_Alias `%s'" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Uwaga: cykl w %s_Alias `%s'" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Błąd: %s_Alias `%s' użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Uwaga: %s_Alias `%s' użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: nie użyty %s_Alias %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1694,7 +1690,7 @@ msgstr "" "%s - bezpieczna edycja pliku sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1716,6 +1712,6 @@ msgstr "" " -V, --version wyświetlenie informacji o wersji i zakończenie\n" " -x, --export=plik eksport danych sudoers w formacie JSON" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "za dużo poziomów include" diff --git a/plugins/sudoers/po/pt_BR.mo b/plugins/sudoers/po/pt_BR.mo Binary files differindex 653e231e6..11074e66e 100644 --- a/plugins/sudoers/po/pt_BR.mo +++ b/plugins/sudoers/po/pt_BR.mo diff --git a/plugins/sudoers/po/pt_BR.po b/plugins/sudoers/po/pt_BR.po index fafbe2cc8..2237fb99f 100644 --- a/plugins/sudoers/po/pt_BR.po +++ b/plugins/sudoers/po/pt_BR.po @@ -1,21 +1,21 @@ # Brazilian Portuguese translation of sudoers. # This file is distributed under the same license as the sudo package. -# Copyright (C) 2013 Free Software Foundation, Inc. -# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013. +# Copyright (C) 2014 Free Software Foundation, Inc. +# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-26 18:18-0300\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-12 18:42-0300\n" "Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.6.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: confstr.sh:2 @@ -238,13 +238,13 @@ msgstr "" " #3) Com grandes poderes vêm grandes responsabilidades.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "uid desconhecido: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -446,200 +446,209 @@ msgstr "Mensagem de senha incorreta: %s" #: plugins/sudoers/def_data.c:203 #, c-format -msgid "Path to authentication timestamp dir: %s" -msgstr "Caminho do diretório de marca de tempo de autenticação: %s" +msgid "Path to lecture status dir: %s" +msgstr "Caminho para o diretório de status de instruções: %s" #: plugins/sudoers/def_data.c:207 #, 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:211 +#, 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:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Pedido de senha padrão: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 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:223 +#: plugins/sudoers/def_data.c:227 #, 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:227 +#: plugins/sudoers/def_data.c:231 #, 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:231 +#: plugins/sudoers/def_data.c:235 #, 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:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 #, 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:255 +#: plugins/sudoers/def_data.c:259 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:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 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:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Variáveis de ambiente nas quais deve-se verificar sanidade:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Variáveis de ambiente para remover:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Variáveis de ambiente para preservar:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, 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:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, 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:295 +#: plugins/sudoers/def_data.c:299 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:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 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:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Comprime logs I/O usando zlib" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Sempre executa comandos em um pseudo-tty" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, 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:331 +#: plugins/sudoers/def_data.c:335 #, 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:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Conjunto de privilégios permitidos" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Conjunto de privilégios limitados" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Executa comandos em um pty em plano de fundo" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Nome do serviço PAM para usar" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 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:367 +#: plugins/sudoers/def_data.c:371 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:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 #, 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/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Habilita suporte a netgroup no sudoers" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -716,108 +725,108 @@ msgstr "não foi possível localizar um símbolo \"group_plugin\" %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: versão maior do plug-in de grupo %d incompatível, esperava %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 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/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, 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:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "não foi possível fazer mkdir %s" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "não foi possível abrir %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "não foi possível ler %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "não foi possível gravar em %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "não foi possível criar %s" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: porta muito grande" # Mantive, pois hostbuf é uma variável do plugins/sudoers/ldap.c -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: sem espaço para expansão de hostbuf" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipo de uri LDAP sem suporte: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "não foi possível misturar ldap e ldaps URIs" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "Sem suporte a starttls ao usar ldaps" # Mantive, pois hostbuf é uma variável do plugins/sudoers/ldap.c -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: sem espaço na construção de hostbuf" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, 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:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "você deve definir TLS_CERT em %s para usar SSL" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "não foi possível obter o horário GMT" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "não é possível formatar marca de tempo" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "não foi possível compilar filtro de tempo" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "alocação de sudo_ldap_build_pass1 não confere" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -826,7 +835,7 @@ msgstr "" "\n" "Papel LDAP: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -835,27 +844,27 @@ msgstr "" "\n" "Papel LDAP: DESCONHECIDO\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Ordem: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Comandos:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "não foi possível inicializar LDAP: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atributo sudoOrder inválido: %s" @@ -878,57 +887,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (comando continuado) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "não foi possível abrir o arquivo de log: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "não foi possível travar o arquivo de log: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "nenhum usuário ou máquina" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "falha de validação" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "usuário NÃO ESTÁ no sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "usuário NÃO ESTÁ autorizado na máquina" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "comando não permitido" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s não está no arquivo sudoers. Este incidente será relatado.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s não tem permissão para executar sudo em %s. Este incidente será relatado.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Sinto muito, usuário %s não pode executar sudo em %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format 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:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -936,7 +945,7 @@ msgstr "Sinto muito, usuário %s não tem permissão para executar \"%s%s%s\" co msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -945,41 +954,41 @@ msgstr "" "ignorando \"%s\" encontrado em \".\"\n" "Use \"sudo ./%s\" se isto é o \"%s\" que você deseja executar." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "falha de autenticação" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "uma senha é necessária" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u tentativa de senha incorreta" msgstr[1] "%u tentativas de senha incorreta" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "não foi possível fazer fork" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "não foi possível fazer fork: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "não foi possível abrir um redirecionamento (pipe): %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "não foi possível fazer dup da entrada padrão: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "não foi possível executar %s: %m" @@ -1049,7 +1058,7 @@ msgstr " Opções: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" @@ -1229,9 +1238,8 @@ msgstr "comando no diretório atual" 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:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "não foi possível obter o estado de %s" @@ -1241,17 +1249,17 @@ msgstr "não foi possível obter o estado de %s" msgid "%s is not a regular file" msgstr "%s não é um arquivo comum" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, 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:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s é gravável globalmente" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s tem como dono o gid %u, deveria ser %u" @@ -1276,150 +1284,150 @@ msgstr "não foi possível resolver máquina %s" msgid "unknown group: %s" msgstr "grupo desconhecido %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "opção de filtro inválida: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "espera máxima inválida: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "fator de velocidade inválido: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s versão %s\n" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Reproduzindo sessão de sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Aviso: seu terminal é muito pequeno para reproduzir adequadamente o log.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Geometria do log é %d x %d; geometria do seu terminal é %d x %d." -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "não foi possível definir o tty para modo raw" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "linha inválida no arquivo timing: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expressão ambígua \"%s\"" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "\")\" não coincidente na expressão" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "termo de pesquisa desconhecido \"%s\"" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s requer um argumento" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "expressão regular inválida: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "não foi possível analisar a data \"%s\"" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "\"(\" sem correspondente na expressão" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "fim de linha ilegal com \"or\"" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "fim de linha ilegal com \"!\"" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "tipo de pesquisa desconhecido %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: arquivo de log inválido" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: campo de marca de tempo está faltando" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marca de tempo %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: campo de usuário está faltando" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: campo de usuário, a ser executado como, está faltando" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: campo de grupo, a ser executado como, está faltando" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-h] [-d diretório] [-m número] [-s número] ID\n" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uso: %s [-h] [-d diretório] -l [expressão de pesquisa]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1428,7 +1436,7 @@ msgstr "" "%s - reproduz logs de sessão do sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1478,46 +1486,34 @@ msgstr "" "\n" "Comando sem correspondente" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "caminho de marca de tempo muito longo: %s" +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:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s tem como dono o uid %u, deveria ser uid %u" +msgid "%s is group writable" +msgstr "%s é gravável pelo grupo" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s gravável por não-dono (0%o); deveria estar no modo 0700" +msgid "timestamp path too long: %s/%s" +msgstr "caminho de marca de tempo muito longo: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s existe, mas não é um arquivo comum (0%o)" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "ignorado marca de tempo no futuro" -#: plugins/sudoers/timestamp.c:296 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s gravável por não-dono (0%o); deveria estar no modo 0600" - -#: plugins/sudoers/timestamp.c:351 -#, c-format -msgid "timestamp too far in the future: %20.20s" +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:405 -#, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "não foi possível remover %s, redefinindo para como estava no Unix" - -#: plugins/sudoers/timestamp.c:413 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "não foi possível redefinir %s para como estava no Unix" +msgid "lecture status path too long: %s/%s" +msgstr "caminho de status de instruções muito longo: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1528,7 +1524,7 @@ msgstr "fill_args: estouro de buffer" msgid "%s grammar version %d\n" msgstr "gramática de %s versão %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "pressione enter para editar %s: " @@ -1552,56 +1548,56 @@ msgstr "arquivo de temporário (%s) com comprimento zero, %s sem alteração" msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s sem alteração" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, 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:499 +#: plugins/sudoers/visudo.c:498 #, 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:535 +#: plugins/sudoers/visudo.c:534 #, 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:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, 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:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, 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:624 +#: plugins/sudoers/visudo.c:623 #, 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:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando \"%s %s %s\" falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "erro ao renomear %s, %s sem alteração" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Agora o que? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1613,87 +1609,87 @@ msgstr "" " 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:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, 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:805 +#: plugins/sudoers/visudo.c:804 #, 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:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "falha em analisar o arquivo %s, erro desconhecido" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, 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:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "erro de análise em \"%s\"\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: análise OK\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s ocupado, tente novamente" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "editor especificado (%s) não existe" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "não foi possível obter estado do editor (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "nenhum editor encontrado (caminho do editor = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Erro: ciclo em %s_Alias \"%s\"" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Aviso: ciclo em %s_Alias \"%s\"" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Erro: %s_Alias \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Aviso: %s_Alias \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: %s_Alias %s não usado" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1702,7 +1698,7 @@ msgstr "" "%s - edita o arquivo sudoers com segurança\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1726,10 +1722,28 @@ msgstr "" " -x, --export=arquivo\n" " exporta o sudoers no formato JSON" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "níveis de inclusões demais" +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "%s tem como dono o uid %u, deveria ser uid %u" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s gravável por não-dono (0%o); deveria estar no modo 0700" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s existe, mas não é um arquivo comum (0%o)" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s gravável por não-dono (0%o); deveria estar no modo 0600" + +#~ msgid "unable to remove %s, will reset to the Unix epoch" +#~ msgstr "não foi possível remover %s, redefinindo para como estava no Unix" + +#~ msgid "unable to reset %s to the Unix epoch" +#~ msgstr "não foi possível redefinir %s para como estava no Unix" + #~ msgid "value out of range" #~ msgstr "valor fora da faixa" diff --git a/plugins/sudoers/po/sr.mo b/plugins/sudoers/po/sr.mo Binary files differnew file mode 100644 index 000000000..47ef4c316 --- /dev/null +++ b/plugins/sudoers/po/sr.mo diff --git a/plugins/sudoers/po/sr.po b/plugins/sudoers/po/sr.po new file mode 100644 index 000000000..ffc2e0594 --- /dev/null +++ b/plugins/sudoers/po/sr.po @@ -0,0 +1,1718 @@ +# Serbian translation for sudoers. +# This file is put in the public domain. +# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: sudoers-1.8.10b3\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-23 13:51+0100\n" +"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" +"Language-Team: Serbian <(nothing)>\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: 3\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" + +#: confstr.sh:2 +msgid "Password:" +msgstr "Лозинка:" + +#: confstr.sh:3 +msgid "*** SECURITY information for %h ***" +msgstr "*** информације БЕЗБЕДНОСТИ за %h ***" + +#: confstr.sh:4 +msgid "Sorry, try again." +msgstr "Извините, покушајте поново." + +#: plugins/sudoers/alias.c:136 +#, c-format +msgid "Alias `%s' already defined" +msgstr "Псеудоним „%s“ је већ одређен" + +#: plugins/sudoers/auth/bsdauth.c:75 +#, c-format +msgid "unable to get login class for user %s" +msgstr "не могу да добавим разред пријаве за корисника „%s“" + +#: plugins/sudoers/auth/bsdauth.c:81 +msgid "unable to begin bsd authentication" +msgstr "не могу да почнем бсд потврђивање идентитета" + +#: plugins/sudoers/auth/bsdauth.c:89 +msgid "invalid authentication type" +msgstr "неисправна врста потврђивање идентитета" + +#: plugins/sudoers/auth/bsdauth.c:98 +msgid "unable to initialize BSD authentication" +msgstr "не могу да покренем БСД потврђивање идентитета" + +#: plugins/sudoers/auth/fwtk.c:59 +msgid "unable to read fwtk config" +msgstr "не могу да читам „fwtk“ подешавања" + +#: plugins/sudoers/auth/fwtk.c:64 +msgid "unable to connect to authentication server" +msgstr "не могу да се повежем на сервер потврђивања идентитета" + +#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 +#: plugins/sudoers/auth/fwtk.c:127 +msgid "lost connection to authentication server" +msgstr "изгубио сам везу са сервером потврђивања идентитета" + +#: plugins/sudoers/auth/fwtk.c:74 +#, c-format +msgid "" +"authentication server error:\n" +"%s" +msgstr "" +"грешка сервера потврђивања идентитета:\n" +"%s" + +#: plugins/sudoers/auth/kerb5.c:116 +#, c-format +msgid "%s: unable to convert principal to string ('%s'): %s" +msgstr "%s: не могу да претворим главника у ниску („%s“): %s" + +#: plugins/sudoers/auth/kerb5.c:159 +#, c-format +msgid "%s: unable to parse '%s': %s" +msgstr "%s: не могу да обрадим „%s“: %s" + +#: plugins/sudoers/auth/kerb5.c:169 +#, c-format +msgid "%s: unable to resolve credential cache: %s" +msgstr "%s: не могу да решим оставу пуномоћства: %s" + +#: plugins/sudoers/auth/kerb5.c:217 +#, c-format +msgid "%s: unable to allocate options: %s" +msgstr "%s: не могу да доделим опције: %s" + +#: plugins/sudoers/auth/kerb5.c:233 +#, c-format +msgid "%s: unable to get credentials: %s" +msgstr "%s: не могу да добавим пуномоћства: %s" + +#: plugins/sudoers/auth/kerb5.c:246 +#, c-format +msgid "%s: unable to initialize credential cache: %s" +msgstr "%s: не могу да покренем оставу пуномоћства: %s" + +#: plugins/sudoers/auth/kerb5.c:250 +#, c-format +msgid "%s: unable to store credential in cache: %s" +msgstr "%s: не могу да сместим пуномоћства у оставу: %s" + +#: plugins/sudoers/auth/kerb5.c:315 +#, c-format +msgid "%s: unable to get host principal: %s" +msgstr "%s: не могу да добавим главника домаћина: %s" + +#: plugins/sudoers/auth/kerb5.c:330 +#, c-format +msgid "%s: Cannot verify TGT! Possible attack!: %s" +msgstr "%s: Не могу потврдити ТГТ! Могући напад!: %s" + +#: plugins/sudoers/auth/pam.c:98 +msgid "unable to initialize PAM" +msgstr "не могу да покренем ПАМ" + +#: plugins/sudoers/auth/pam.c:149 +msgid "account validation failure, is your account locked?" +msgstr "неуспех провере налога, да ли је ваш налог закључан?" + +#: plugins/sudoers/auth/pam.c:153 +msgid "Account or password is expired, reset your password and try again" +msgstr "Налог или лозинка је истекла, поново поставите лозинку и покушајте поново" + +#: plugins/sudoers/auth/pam.c:161 +#, c-format +msgid "unable to change expired password: %s" +msgstr "не могу да изменим истеклу лозинку: %s" + +#: plugins/sudoers/auth/pam.c:166 +msgid "Password expired, contact your system administrator" +msgstr "Лозинка је истекла, обратите се администратору система" + +#: plugins/sudoers/auth/pam.c:170 +msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" +msgstr "Налог је истекао или ПАМ подешавањима недостаје одељак „налог“ за судо, обратите се администратору система" + +#: plugins/sudoers/auth/pam.c:187 +#, c-format +msgid "PAM authentication error: %s" +msgstr "Грешка ПАМ потврђивања идентитета: %s" + +#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:222 +#, c-format +msgid "you do not exist in the %s database" +msgstr "ви не постојите у бази подтака „%s“" + +#: plugins/sudoers/auth/securid5.c:80 +msgid "failed to initialise the ACE API library" +msgstr "нисам успео да покренем АЦЕ АПИ библиотеку" + +#: plugins/sudoers/auth/securid5.c:106 +msgid "unable to contact the SecurID server" +msgstr "не могу да ступим у везу са сервером безбеднног ИБ-а" + +#: plugins/sudoers/auth/securid5.c:115 +msgid "User ID locked for SecurID Authentication" +msgstr "ИБ корисника је закључан за потврђивање идентитета безбедног ИБ-а" + +#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +msgid "invalid username length for SecurID" +msgstr "неисправна дужина корисничког имена за безбедни ИБ" + +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +msgid "invalid Authentication Handle for SecurID" +msgstr "неисправна ручка потврђивања идентитета за безбедни ИБ" + +#: plugins/sudoers/auth/securid5.c:127 +msgid "SecurID communication failed" +msgstr "Није успело комуницирање безбедног ИБ-а" + +#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +msgid "unknown SecurID error" +msgstr "непозната грешка безбедног ИБ-а" + +#: plugins/sudoers/auth/securid5.c:165 +msgid "invalid passcode length for SecurID" +msgstr "неисправна дужина пропусне шифре за безбедни ИБ" + +#: plugins/sudoers/auth/sia.c:108 +msgid "unable to initialize SIA session" +msgstr "не могу да покренем СИА сесију" + +#: plugins/sudoers/auth/sudo_auth.c:119 +msgid "invalid authentication methods" +msgstr "неисправни начини потврђивања идентитета" + +#: plugins/sudoers/auth/sudo_auth.c:120 +msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." +msgstr "Неисправни начини потврђивања идентитета су преведени у судоу! Не можете мешати самостално и несамостално потврђивање идентитета." + +#: plugins/sudoers/auth/sudo_auth.c:203 +msgid "no authentication methods" +msgstr "нема начина потврђивања идентитета" + +#: plugins/sudoers/auth/sudo_auth.c:205 +msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." +msgstr "Нема начина потврђивања идентитета преведених у судоу! Ако желите да искључите потврђивање идентитета, користите „--disable-authentication“." + +#: plugins/sudoers/auth/sudo_auth.c:389 +msgid "Authentication methods:" +msgstr "Начини потврђивања идентитета:" + +#: plugins/sudoers/bsm_audit.c:91 plugins/sudoers/bsm_audit.c:158 +msgid "Could not determine audit condition" +msgstr "Не могу да утврдим услов прегледа" + +#: plugins/sudoers/bsm_audit.c:134 plugins/sudoers/bsm_audit.c:199 +msgid "unable to commit audit record" +msgstr "не могу да предам снимак прегледа" + +#: plugins/sudoers/check.c:189 +msgid "" +"\n" +"We trust you have received the usual lecture from the local System\n" +"Administrator. It usually boils down to these three things:\n" +"\n" +" #1) Respect the privacy of others.\n" +" #2) Think before you type.\n" +" #3) With great power comes great responsibility.\n" +"\n" +msgstr "" +"\n" +"Верујемо да вам је администратор система објаснио неке ствари.\n" +"Обично се своде на следеће три:\n" +"\n" +" #1) Поштујте приватност других.\n" +" #2) Размислите пре куцања.\n" +" #3) Са великом моћи долази и велика одговорност.\n" +"\n" + +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 +#: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 +#, c-format +msgid "unknown uid: %u" +msgstr "непознат јиб: %u" + +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 +#: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 +#: plugins/sudoers/testsudoers.c:363 +#, c-format +msgid "unknown user: %s" +msgstr "непознат корисник: %s" + +#: plugins/sudoers/def_data.c:27 +#, c-format +msgid "Syslog facility if syslog is being used for logging: %s" +msgstr "Помоћник сисдневника ако је сисдневник коришћен за пријављивање: %s" + +#: plugins/sudoers/def_data.c:31 +#, c-format +msgid "Syslog priority to use when user authenticates successfully: %s" +msgstr "Приоритет системског дневника за коришћење када корисник успешно потврди идентитет: %s" + +#: plugins/sudoers/def_data.c:35 +#, c-format +msgid "Syslog priority to use when user authenticates unsuccessfully: %s" +msgstr "Приоритет системског дневника за коришћење када корисник неуспешно потврди идентитет: %s" + +#: plugins/sudoers/def_data.c:39 +msgid "Put OTP prompt on its own line" +msgstr "Поставља ОТП упит на свом реду" + +#: plugins/sudoers/def_data.c:43 +msgid "Ignore '.' in $PATH" +msgstr "Занемарује . у $ПУТАЊИ" + +#: plugins/sudoers/def_data.c:47 +msgid "Always send mail when sudo is run" +msgstr "Увек шаље пошту када је судо покренут" + +#: plugins/sudoers/def_data.c:51 +msgid "Send mail if user authentication fails" +msgstr "Пошаљи поруку ако потврђивање идентитета корисника не успе" + +#: plugins/sudoers/def_data.c:55 +msgid "Send mail if the user is not in sudoers" +msgstr "Пошаљи поруку ако корисник није у судоерсу" + +#: plugins/sudoers/def_data.c:59 +msgid "Send mail if the user is not in sudoers for this host" +msgstr "Пошаљи поруку ако корисник није у судоерсу за овог домаћина" + +#: plugins/sudoers/def_data.c:63 +msgid "Send mail if the user is not allowed to run a command" +msgstr "Пошаљи поруку ако кориснику није дозвољено да покрене наредбу" + +#: plugins/sudoers/def_data.c:67 +msgid "Use a separate timestamp for each user/tty combo" +msgstr "Користи одвојене временске ознаке за сваку комбинацију корисник/конзола" + +#: plugins/sudoers/def_data.c:71 +msgid "Lecture user the first time they run sudo" +msgstr "Подучава корисника када први пут покрену судо" + +#: plugins/sudoers/def_data.c:75 +#, c-format +msgid "File containing the sudo lecture: %s" +msgstr "Датотека садржи судо обучавања: %s" + +#: plugins/sudoers/def_data.c:79 +msgid "Require users to authenticate by default" +msgstr "Захтева да корисници потврде идентитет по основи" + +#: plugins/sudoers/def_data.c:83 +msgid "Root may run sudo" +msgstr "Администратор може да покрене судо" + +#: plugins/sudoers/def_data.c:87 +msgid "Log the hostname in the (non-syslog) log file" +msgstr "Бележи назив домаћина у (не-сисдневник) датотеци дневника" + +#: plugins/sudoers/def_data.c:91 +msgid "Log the year in the (non-syslog) log file" +msgstr "Бележи годину у (не-сисдневник) датотеци дневника" + +#: plugins/sudoers/def_data.c:95 +msgid "If sudo is invoked with no arguments, start a shell" +msgstr "Ако је судо призван без аргумената, покреће шкољку" + +#: plugins/sudoers/def_data.c:99 +msgid "Set $HOME to the target user when starting a shell with -s" +msgstr "Подешава $HOME на крајњег корисника када покреће шкољку са „-s“" + +#: plugins/sudoers/def_data.c:103 +msgid "Always set $HOME to the target user's home directory" +msgstr "Увек подешава $HOME на циљни лични директоријум корисника" + +#: plugins/sudoers/def_data.c:107 +msgid "Allow some information gathering to give useful error messages" +msgstr "Дозвољава прикупљање неких података да би дао корисне поруке грешака" + +#: plugins/sudoers/def_data.c:111 +msgid "Require fully-qualified hostnames in the sudoers file" +msgstr "Захтева потпуно одређене називе домаћина у датотеци судоерса" + +#: plugins/sudoers/def_data.c:115 +msgid "Insult the user when they enter an incorrect password" +msgstr "Вређа корисника када унесе нетачну лозинку" + +#: plugins/sudoers/def_data.c:119 +msgid "Only allow the user to run sudo if they have a tty" +msgstr "Дозвољава кориснику да покрене судо само ако има конзолу" + +#: plugins/sudoers/def_data.c:123 +msgid "Visudo will honor the EDITOR environment variable" +msgstr "Висудо ће поштовати променљиву окружења УРЕЂИВАЧА" + +#: plugins/sudoers/def_data.c:127 +msgid "Prompt for root's password, not the users's" +msgstr "Тражи администраторову лозинку, а не корисника" + +#: plugins/sudoers/def_data.c:131 +msgid "Prompt for the runas_default user's password, not the users's" +msgstr "Тражи корисникову лозинку покреникао_основни, а не корисника" + +#: plugins/sudoers/def_data.c:135 +msgid "Prompt for the target user's password, not the users's" +msgstr "Тражи корисникову лозинку мете, а не корисника" + +#: plugins/sudoers/def_data.c:139 +msgid "Apply defaults in the target user's login class if there is one" +msgstr "Примењује основности у циљни кориснички разред пријављивања ако постоји" + +#: plugins/sudoers/def_data.c:143 +msgid "Set the LOGNAME and USER environment variables" +msgstr "Подешава променљиве окружења НАЗИВДНЕВНИКА и КОРИСНИК" + +#: plugins/sudoers/def_data.c:147 +msgid "Only set the effective uid to the target user, not the real uid" +msgstr "Подешава само ефективни јиб на крајњег корисника, а не стваран јиб" + +#: plugins/sudoers/def_data.c:151 +msgid "Don't initialize the group vector to that of the target user" +msgstr "Не покреће вектор групе ка оном крајњег корисника" + +#: plugins/sudoers/def_data.c:155 +#, c-format +msgid "Length at which to wrap log file lines (0 for no wrap): %u" +msgstr "Дужина за преламање редова у датотеци дневника (0 — без преламања): %u" + +#: plugins/sudoers/def_data.c:159 +#, c-format +msgid "Authentication timestamp timeout: %.1f minutes" +msgstr "Време истека временске ознаке потврђивања идентитета: %.1f минута" + +#: plugins/sudoers/def_data.c:163 +#, c-format +msgid "Password prompt timeout: %.1f minutes" +msgstr "Време истека упита лозинке: %.1f минута" + +#: plugins/sudoers/def_data.c:167 +#, c-format +msgid "Number of tries to enter a password: %u" +msgstr "Број покушаја за уношење лозинке: %u" + +#: plugins/sudoers/def_data.c:171 +#, c-format +msgid "Umask to use or 0777 to use user's: 0%o" +msgstr "Умаска за коришћење или 0777 за коришћење корисника: 0%o" + +#: plugins/sudoers/def_data.c:175 +#, c-format +msgid "Path to log file: %s" +msgstr "Путања до датотеке дневника: %s" + +#: plugins/sudoers/def_data.c:179 +#, c-format +msgid "Path to mail program: %s" +msgstr "Путања до програма поште: %s" + +#: plugins/sudoers/def_data.c:183 +#, c-format +msgid "Flags for mail program: %s" +msgstr "Опције за програм поште: %s" + +#: plugins/sudoers/def_data.c:187 +#, c-format +msgid "Address to send mail to: %s" +msgstr "Адреса на коју послати поруку: %s" + +#: plugins/sudoers/def_data.c:191 +#, c-format +msgid "Address to send mail from: %s" +msgstr "Адреса са које послати поруку: %s" + +#: plugins/sudoers/def_data.c:195 +#, c-format +msgid "Subject line for mail messages: %s" +msgstr "Ред теме за поруке поште: %s" + +#: plugins/sudoers/def_data.c:199 +#, c-format +msgid "Incorrect password message: %s" +msgstr "Порука нетачне лозинке: %s" + +#: plugins/sudoers/def_data.c:203 +#, c-format +msgid "Path to lecture status dir: %s" +msgstr "Путања до директоријума стања обучавања: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format +msgid "Path to authentication timestamp dir: %s" +msgstr "Путања до директоријума временске ознаке потврђивања идентитета: %s" + +#: plugins/sudoers/def_data.c:211 +#, c-format +msgid "Owner of the authentication timestamp dir: %s" +msgstr "Власник директоријума временске ознаке потврђивања идентитета: %s" + +#: plugins/sudoers/def_data.c:215 +#, c-format +msgid "Users in this group are exempt from password and PATH requirements: %s" +msgstr "Корисницима у овој групи се не захтева лозинка и ПУТАЊА: %s" + +#: plugins/sudoers/def_data.c:219 +#, c-format +msgid "Default password prompt: %s" +msgstr "Основни упит лозинке: %s" + +#: plugins/sudoers/def_data.c:223 +msgid "If set, passprompt will override system prompt in all cases." +msgstr "Ако је подешено, упит лозинке ће преписати системски упит у свим случајевима." + +#: plugins/sudoers/def_data.c:227 +#, c-format +msgid "Default user to run commands as: %s" +msgstr "Основни корисник за покретање наредби као: %s" + +#: plugins/sudoers/def_data.c:231 +#, c-format +msgid "Value to override user's $PATH with: %s" +msgstr "Вредност за преписивање корисничке $ПУТАЊЕ са: %s" + +#: plugins/sudoers/def_data.c:235 +#, c-format +msgid "Path to the editor for use by visudo: %s" +msgstr "Путања до уређивача кога ће да користи висудо: %s" + +#: plugins/sudoers/def_data.c:239 +#, c-format +msgid "When to require a password for 'list' pseudocommand: %s" +msgstr "Када да затражи лозинку за псеудонаредбу „list“: %s" + +#: plugins/sudoers/def_data.c:243 +#, c-format +msgid "When to require a password for 'verify' pseudocommand: %s" +msgstr "Када да затражи лозинку за псеудонаредбу „verify“: %s" + +#: plugins/sudoers/def_data.c:247 +msgid "Preload the dummy exec functions contained in the sudo_noexec library" +msgstr "Унапред учитава лажне функције извршавања које се налазе у библиотеци „sudo_noexec“" + +#: plugins/sudoers/def_data.c:251 +msgid "If LDAP directory is up, do we ignore local sudoers file" +msgstr "Ако је ЛДАП директоријум изнет, да ли занемарујемо месну датотеку судоерса" + +#: plugins/sudoers/def_data.c:255 +#, c-format +msgid "File descriptors >= %d will be closed before executing a command" +msgstr "Описници датотека >= %d ће бити затворени пре извршавања наредбе" + +#: plugins/sudoers/def_data.c:259 +msgid "If set, users may override the value of `closefrom' with the -C option" +msgstr "Ако је подешено, корисници могу да препишу вредност „closefrom“ са опцијом „-C“" + +#: plugins/sudoers/def_data.c:263 +msgid "Allow users to set arbitrary environment variables" +msgstr "Дозвољава корисницима да подесе произвољне променљиве окружења" + +#: plugins/sudoers/def_data.c:267 +msgid "Reset the environment to a default set of variables" +msgstr "Враћа окружење на основни скуп променљивих" + +#: plugins/sudoers/def_data.c:271 +msgid "Environment variables to check for sanity:" +msgstr "Променљиве окружења за проверу исправности:" + +#: plugins/sudoers/def_data.c:275 +msgid "Environment variables to remove:" +msgstr "Променљиве окружења за уклањање:" + +#: plugins/sudoers/def_data.c:279 +msgid "Environment variables to preserve:" +msgstr "Променљиве окружења за очување:" + +#: plugins/sudoers/def_data.c:283 +#, c-format +msgid "SELinux role to use in the new security context: %s" +msgstr "СЕЛинукс улога за употребу у новом контексту безбедности: %s" + +#: plugins/sudoers/def_data.c:287 +#, c-format +msgid "SELinux type to use in the new security context: %s" +msgstr "СЕЛинукс врста за употребу у новом контексту безбедности: %s" + +#: plugins/sudoers/def_data.c:291 +#, c-format +msgid "Path to the sudo-specific environment file: %s" +msgstr "Путања до судо-посебне датотеке окружења: %s" + +#: plugins/sudoers/def_data.c:295 +#, c-format +msgid "Locale to use while parsing sudoers: %s" +msgstr "Језк за коришћење при обради судоерса: %s" + +#: plugins/sudoers/def_data.c:299 +msgid "Allow sudo to prompt for a password even if it would be visible" +msgstr "Дозвољава да судо тражи лозинку чак и ако би била видљива" + +#: plugins/sudoers/def_data.c:303 +msgid "Provide visual feedback at the password prompt when there is user input" +msgstr "Обезбеђује видну повратну поруку при тражењу лозинке када постоји унос корисника" + +#: plugins/sudoers/def_data.c:307 +msgid "Use faster globbing that is less accurate but does not access the filesystem" +msgstr "Користи брже упоређивање које је мање тачно али не приступа систему датотека" + +#: plugins/sudoers/def_data.c:311 +msgid "The umask specified in sudoers will override the user's, even if it is more permissive" +msgstr "Умаска наведена у судоерсима ће преписати корисникову, чак и ако има већа овлашћења" + +#: plugins/sudoers/def_data.c:315 +msgid "Log user's input for the command being run" +msgstr "Бележи корисников улаз за покренуту наредбу" + +#: plugins/sudoers/def_data.c:319 +msgid "Log the output of the command being run" +msgstr "Бележи излаз покренуте наредбе" + +#: plugins/sudoers/def_data.c:323 +msgid "Compress I/O logs using zlib" +msgstr "Пакује У/И дневнике користећи злиб" + +#: plugins/sudoers/def_data.c:327 +msgid "Always run commands in a pseudo-tty" +msgstr "Увек покреће наредбе у привидној конзоли" + +#: plugins/sudoers/def_data.c:331 +#, c-format +msgid "Plugin for non-Unix group support: %s" +msgstr "Прикључак за подршку не-Јуникс групе: %s" + +#: plugins/sudoers/def_data.c:335 +#, c-format +msgid "Directory in which to store input/output logs: %s" +msgstr "Директоријум за смештај улазних/излазних дневника: %s" + +#: plugins/sudoers/def_data.c:339 +#, c-format +msgid "File in which to store the input/output log: %s" +msgstr "Датотека за смештај улазно/излазног дневника: %s" + +#: plugins/sudoers/def_data.c:343 +msgid "Add an entry to the utmp/utmpx file when allocating a pty" +msgstr "Додаје унос у датотеку „utmp/utmpx“ када додељује „pty“" + +#: plugins/sudoers/def_data.c:347 +msgid "Set the user in utmp to the runas user, not the invoking user" +msgstr "Подешава корисника у „utmp“-у на корисника покрени-као, не призивајући корисника" + +#: plugins/sudoers/def_data.c:351 +msgid "Set of permitted privileges" +msgstr "Скуп допуштених повластица" + +#: plugins/sudoers/def_data.c:355 +msgid "Set of limit privileges" +msgstr "Скуп повластица ограничења" + +#: plugins/sudoers/def_data.c:359 +msgid "Run commands on a pty in the background" +msgstr "Покреће наредбе у позадини на назовитерминалу" + +#: plugins/sudoers/def_data.c:363 +msgid "PAM service name to use" +msgstr "Назив ПАМ услуге за коришћење" + +#: plugins/sudoers/def_data.c:367 +msgid "PAM service name to use for login shells" +msgstr "Назив ПАМ услуге за шкољке пријављивања" + +#: plugins/sudoers/def_data.c:371 +msgid "Attempt to establish PAM credentials for the target user" +msgstr "Покушава да успостави ПАМ пуномоћства за циљног корисника" + +#: plugins/sudoers/def_data.c:375 +msgid "Create a new PAM session for the command to run in" +msgstr "Прави нову ПАМ сесију за покретање наредбе" + +#: plugins/sudoers/def_data.c:379 +#, c-format +msgid "Maximum I/O log sequence number: %u" +msgstr "Највећи број низа У/И дневника: %u" + +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Укључује подршку нетгрупе судоерса" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 +#: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 +#, c-format +msgid "unknown defaults entry `%s'" +msgstr "непознат унос основности „%s“" + +#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 +#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 +#: plugins/sudoers/defaults.c:330 +#, c-format +msgid "value `%s' is invalid for option `%s'" +msgstr "вредност „%s“ је неисправна за опцију „%s“" + +#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 +#: plugins/sudoers/defaults.c:239 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:326 +#, c-format +msgid "no value specified for `%s'" +msgstr "није наведена вредност за „%s“" + +#: plugins/sudoers/defaults.c:244 +#, c-format +msgid "values for `%s' must start with a '/'" +msgstr "вредност за „%s“ мора да почиње /" + +#: plugins/sudoers/defaults.c:306 +#, c-format +msgid "option `%s' does not take a value" +msgstr "опција „%s“ не узима вредност" + +#: plugins/sudoers/env.c:288 plugins/sudoers/env.c:293 +#: plugins/sudoers/env.c:395 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/policy.c:442 plugins/sudoers/policy.c:449 +#: plugins/sudoers/prompt.c:171 plugins/sudoers/sudoers.c:656 +#: plugins/sudoers/testsudoers.c:241 +#, c-format +msgid "internal error, %s overflow" +msgstr "унутрашња грешка, прекорачење „%s“" + +#: plugins/sudoers/env.c:367 +msgid "sudo_putenv: corrupted envp, length mismatch" +msgstr "sudo_putenv: оштећено стави окружење, дужине не одговарају" + +#: plugins/sudoers/env.c:1014 +#, c-format +msgid "sorry, you are not allowed to set the following environment variables: %s" +msgstr "извините, није вам дозвољено да подесите следеће променљиве окружења: %s" + +#: plugins/sudoers/group_plugin.c:94 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "„%s“ мора бити у власништву јиб-а %d" + +#: plugins/sudoers/group_plugin.c:98 +#, c-format +msgid "%s must only be writable by owner" +msgstr "Само корисник може да пише у „%s“" + +#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#, c-format +msgid "unable to load %s: %s" +msgstr "не могу да учитам %s: %s" + +#: plugins/sudoers/group_plugin.c:110 +#, c-format +msgid "unable to find symbol \"group_plugin\" in %s" +msgstr "не могу да нађем симбол „group_plugin“ у „%s“" + +#: plugins/sudoers/group_plugin.c:115 +#, c-format +msgid "%s: incompatible group plugin major version %d, expected %d" +msgstr "%s: несагласно веће издање прикључка групе %d, очекивано је %d" + +#: plugins/sudoers/interfaces.c:116 +msgid "Local IP address and netmask pairs:\n" +msgstr "Месна ИП адреса и парови мрежне маске:\n" + +#: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 +#: plugins/sudoers/timestamp.c:227 +#, c-format +msgid "%s exists but is not a directory (0%o)" +msgstr "%s постоји али није директоријум (0%o)" + +#: plugins/sudoers/iolog.c:109 plugins/sudoers/iolog.c:123 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 +#, c-format +msgid "unable to mkdir %s" +msgstr "не могу да направим директоријум „%s“" + +#: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 +#, c-format +msgid "unable to open %s" +msgstr "не могу да отворим „%s“" + +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 +#, c-format +msgid "unable to read %s" +msgstr "не могу да прочитам „%s“" + +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 +#, c-format +msgid "unable to write to %s" +msgstr "не могу да пишем у „%s“" + +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 +#, c-format +msgid "unable to create %s" +msgstr "не могу да направим „%s“" + +#: plugins/sudoers/ldap.c:406 +msgid "sudo_ldap_conf_add_ports: port too large" +msgstr "sudo_ldap_conf_add_ports: прикључник је превелик" + +#: plugins/sudoers/ldap.c:429 +msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +msgstr "sudo_ldap_conf_add_ports: нестаде простора проширујући међумеморију домаћина" + +#: plugins/sudoers/ldap.c:461 +#, c-format +msgid "unsupported LDAP uri type: %s" +msgstr "неподржана врста ЛДАП путање: %s" + +#: plugins/sudoers/ldap.c:492 +msgid "unable to mix ldap and ldaps URIs" +msgstr "не могу да помешам лдап и лдапс путање" + +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 +msgid "starttls not supported when using ldaps" +msgstr "старттлс није подржано када се користи лдапс" + +#: plugins/sudoers/ldap.c:514 +msgid "sudo_ldap_parse_uri: out of space building hostbuf" +msgstr "sudo_ldap_parse_uri: нестаде простора изграђујући међумеморију домаћина" + +#: plugins/sudoers/ldap.c:595 +#, c-format +msgid "unable to initialize SSL cert and key db: %s" +msgstr "не могу да покренем ССЛ уверење и бп кључа: %s" + +#: plugins/sudoers/ldap.c:598 +#, c-format +msgid "you must set TLS_CERT in %s to use SSL" +msgstr "морате да подесите „TLS_CERT“ у „%s“ да користите ССЛ" + +#: plugins/sudoers/ldap.c:1089 +msgid "unable to get GMT time" +msgstr "не могу да добавим ГМТ време" + +#: plugins/sudoers/ldap.c:1095 +msgid "unable to format timestamp" +msgstr "не могу да обликујем временску ознаку" + +#: plugins/sudoers/ldap.c:1103 +msgid "unable to build time filter" +msgstr "не могу да изградим пропусника времена" + +#: plugins/sudoers/ldap.c:1322 +msgid "sudo_ldap_build_pass1 allocation mismatch" +msgstr "не поклапа се додела „sudo_ldap_build_pass1“" + +#: plugins/sudoers/ldap.c:1433 +#, c-format +msgid "%s: %s: %s: %s" +msgstr "%s: %s: %s: %s" + +#: plugins/sudoers/ldap.c:1909 +#, c-format +msgid "" +"\n" +"LDAP Role: %s\n" +msgstr "" +"\n" +"ЛДАП улога: %s\n" + +#: plugins/sudoers/ldap.c:1911 +#, c-format +msgid "" +"\n" +"LDAP Role: UNKNOWN\n" +msgstr "" +"\n" +"ЛДАП улога: НЕПОЗНАТО\n" + +#: plugins/sudoers/ldap.c:1958 +#, c-format +msgid " Order: %s\n" +msgstr " Поредак: %s\n" + +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 +#: plugins/sudoers/sssd.c:1295 +#, c-format +msgid " Commands:\n" +msgstr " Наредбе:\n" + +#: plugins/sudoers/ldap.c:2509 +#, c-format +msgid "unable to initialize LDAP: %s" +msgstr "не могу да покренем ЛДАП: %s" + +#: plugins/sudoers/ldap.c:2551 +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:2784 +#, c-format +msgid "invalid sudoOrder attribute: %s" +msgstr "неисправна особина „sudoOrder“: %s" + +#: plugins/sudoers/linux_audit.c:57 +msgid "unable to open audit system" +msgstr "не могу да отворим систем прегледа" + +#: plugins/sudoers/linux_audit.c:93 +msgid "unable to send audit message" +msgstr "не могу да пошаљем поруку прегледа" + +#: plugins/sudoers/logging.c:136 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: plugins/sudoers/logging.c:164 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (наредба је настављена) %s" + +#: plugins/sudoers/logging.c:189 +#, c-format +msgid "unable to open log file: %s: %s" +msgstr "не могу да отворим датотеку дневника: %s: %s" + +#: plugins/sudoers/logging.c:192 +#, c-format +msgid "unable to lock log file: %s: %s" +msgstr "не могу да закључам датотеку дневника: %s: %s" + +#: plugins/sudoers/logging.c:243 +msgid "No user or host" +msgstr "Нема корисника или домаћина" + +#: plugins/sudoers/logging.c:245 +msgid "validation failure" +msgstr "неуспех потврђивања" + +#: plugins/sudoers/logging.c:252 +msgid "user NOT in sudoers" +msgstr "корисник НИЈЕ у судоерсу" + +#: plugins/sudoers/logging.c:254 +msgid "user NOT authorized on host" +msgstr "корисник НИЈЕ овлашћен на домаћину" + +#: plugins/sudoers/logging.c:256 +msgid "command not allowed" +msgstr "наредба није допуштена" + +#: plugins/sudoers/logging.c:286 +#, c-format +msgid "%s is not in the sudoers file. This incident will be reported.\n" +msgstr "„%s“ се не налази у датотеци судоерса. О овом инциденту ће бити поднет извештај.\n" + +#: plugins/sudoers/logging.c:289 +#, 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:293 +#, c-format +msgid "Sorry, user %s may not run sudo on %s.\n" +msgstr "Извините, корисник %s не може покренути судо на %s.\n" + +#: plugins/sudoers/logging.c:296 +#, 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:333 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 +#: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 +#: plugins/sudoers/sudoers.c:1018 +#, c-format +msgid "%s: command not found" +msgstr "%s: нема такве наредбе" + +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 +#, c-format +msgid "" +"ignoring `%s' found in '.'\n" +"Use `sudo ./%s' if this is the `%s' you wish to run." +msgstr "" +"занемарујем „%s“ пронађено у „.“\n" +"Користите „sudo ./%s“ ако је то „%s“ које желите да покренете." + +#: plugins/sudoers/logging.c:351 +msgid "authentication failure" +msgstr "потврђивање идентитета није успело" + +#: plugins/sudoers/logging.c:377 +msgid "a password is required" +msgstr "потребна је лозинка" + +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 +#, c-format +msgid "%u incorrect password attempt" +msgid_plural "%u incorrect password attempts" +msgstr[0] "%u покушај нетачне лозинке" +msgstr[1] "%u покушаја нетачне лозинке" +msgstr[2] "%u покушаја нетачне лозинке" + +#: plugins/sudoers/logging.c:581 +msgid "unable to fork" +msgstr "не могу да исцепим" + +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 +#, c-format +msgid "unable to fork: %m" +msgstr "не могу да исцепим: %m" + +#: plugins/sudoers/logging.c:634 +#, c-format +msgid "unable to open pipe: %m" +msgstr "не могу да отворим спојку: %m" + +#: plugins/sudoers/logging.c:659 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "не могу да удвостручим стандардни улаз: %m" + +#: plugins/sudoers/logging.c:694 +#, c-format +msgid "unable to execute %s: %m" +msgstr "не могу да извршим „%s“: %m" + +#: plugins/sudoers/logging.c:914 +msgid "internal error: insufficient space for log line" +msgstr "унутрашња грешка: недовољно простора за ред дневника" + +#: plugins/sudoers/match.c:617 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "неподржана врста прихватања потврђивања иднтитета „%d“ за „%s“" + +#: plugins/sudoers/match.c:647 +#, c-format +msgid "%s: read error" +msgstr "%s: грешка читања" + +#: plugins/sudoers/match.c:661 +#, c-format +msgid "digest for %s (%s) is not in %s form" +msgstr "приказ за %s (%s) није у %s облику" + +#: plugins/sudoers/parse.c:115 +#, c-format +msgid "parse error in %s near line %d" +msgstr "грешка обраде у %s близу реда %d" + +#: plugins/sudoers/parse.c:118 +#, c-format +msgid "parse error in %s" +msgstr "грешка обраде у %s" + +#: plugins/sudoers/parse.c:451 +#, c-format +msgid "" +"\n" +"Sudoers entry:\n" +msgstr "" +"\n" +"Унос судоерса:\n" + +#: plugins/sudoers/parse.c:452 +#, c-format +msgid " RunAsUsers: " +msgstr " „Покрени-као“ корисници: " + +#: plugins/sudoers/parse.c:466 +#, c-format +msgid " RunAsGroups: " +msgstr " „Покрени-као“ групе: " + +#: plugins/sudoers/parse.c:475 +#, c-format +msgid " Options: " +msgstr " Опције: " + +#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:116 +#: plugins/sudoers/policy.c:123 plugins/sudoers/policy.c:145 +#: plugins/sudoers/policy.c:259 plugins/sudoers/policy.c:277 +#: plugins/sudoers/policy.c:284 plugins/sudoers/policy.c:312 +#: plugins/sudoers/policy.c:320 plugins/sudoers/policy.c:327 +#: plugins/sudoers/set_perms.c:363 plugins/sudoers/set_perms.c:702 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1357 +#: plugins/sudoers/set_perms.c:1525 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 +#, c-format +msgid "unable to execute %s" +msgstr "не могу да извршим „%s“" + +#: plugins/sudoers/policy.c:681 +#, c-format +msgid "Sudoers policy plugin version %s\n" +msgstr "Издање %s прикључка политике судоерса\n" + +#: plugins/sudoers/policy.c:683 +#, c-format +msgid "Sudoers file grammar version %d\n" +msgstr "Граматика датотеке судоерса издање %d\n" + +#: plugins/sudoers/policy.c:687 +#, c-format +msgid "" +"\n" +"Sudoers path: %s\n" +msgstr "" +"\n" +"Путања судоерса: %s\n" + +#: plugins/sudoers/policy.c:690 +#, c-format +msgid "nsswitch path: %s\n" +msgstr "путања нс-прекидача: %s\n" + +#: plugins/sudoers/policy.c:692 +#, c-format +msgid "ldap.conf path: %s\n" +msgstr "путања лдап.подешавања: %s\n" + +#: plugins/sudoers/policy.c:693 +#, c-format +msgid "ldap.secret path: %s\n" +msgstr "путања лдап.тајне: %s\n" + +#: plugins/sudoers/pwutil.c:148 +#, c-format +msgid "unable to cache uid %u, already exists" +msgstr "не могу да сместим у оставу јиб „%u“, већ постоји" + +#: plugins/sudoers/pwutil.c:190 +#, c-format +msgid "unable to cache user %s, already exists" +msgstr "не могу да сместим у оставу корисника „%s“, већ постоји" + +#: plugins/sudoers/pwutil.c:393 +#, c-format +msgid "unable to cache gid %u, already exists" +msgstr "не могу да сместим у оставу гиб „%u“, већ постоји" + +#: plugins/sudoers/pwutil.c:429 +#, c-format +msgid "unable to cache group %s, already exists" +msgstr "не могу да сместим у оставу групу „%s“, већ постоји" + +#: plugins/sudoers/pwutil.c:592 plugins/sudoers/pwutil.c:614 +#, c-format +msgid "unable to cache group list for %s, already exists" +msgstr "не могу да сместим у оставу списак групе за „%s“, већ постоји" + +#: plugins/sudoers/pwutil.c:612 +#, c-format +msgid "unable to parse groups for %s" +msgstr "не могу да обрадим групе за „%s“" + +#: plugins/sudoers/set_perms.c:124 plugins/sudoers/set_perms.c:449 +#: plugins/sudoers/set_perms.c:852 plugins/sudoers/set_perms.c:1149 +#: plugins/sudoers/set_perms.c:1441 +msgid "perm stack overflow" +msgstr "стално прекорачење спремника" + +#: plugins/sudoers/set_perms.c:132 plugins/sudoers/set_perms.c:457 +#: plugins/sudoers/set_perms.c:860 plugins/sudoers/set_perms.c:1157 +#: plugins/sudoers/set_perms.c:1449 +msgid "perm stack underflow" +msgstr "стално поткорачење спремника" + +#: plugins/sudoers/set_perms.c:191 plugins/sudoers/set_perms.c:504 +#: plugins/sudoers/set_perms.c:1208 plugins/sudoers/set_perms.c:1481 +msgid "unable to change to root gid" +msgstr "не могу да пређем на гиб администратора" + +#: plugins/sudoers/set_perms.c:280 plugins/sudoers/set_perms.c:601 +#: plugins/sudoers/set_perms.c:989 plugins/sudoers/set_perms.c:1285 +msgid "unable to change to runas gid" +msgstr "не могу да пређем на гиб покреникао" + +#: plugins/sudoers/set_perms.c:292 plugins/sudoers/set_perms.c:613 +#: plugins/sudoers/set_perms.c:999 plugins/sudoers/set_perms.c:1295 +msgid "unable to change to runas uid" +msgstr "не могу да пређем на јиб покреникао" + +#: plugins/sudoers/set_perms.c:310 plugins/sudoers/set_perms.c:631 +#: plugins/sudoers/set_perms.c:1015 plugins/sudoers/set_perms.c:1311 +msgid "unable to change to sudoers gid" +msgstr "не могу да пређем на гиб судоерса" + +#: plugins/sudoers/set_perms.c:363 plugins/sudoers/set_perms.c:702 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1357 +#: plugins/sudoers/set_perms.c:1525 +msgid "too many processes" +msgstr "превише процеса" + +#: plugins/sudoers/set_perms.c:1595 +msgid "unable to set runas group vector" +msgstr "не могу да подесим вектор „покрени-као група“" + +#: plugins/sudoers/sssd.c:252 +msgid "unable to initialize SSS source. Is SSSD installed on your machine?" +msgstr "не могу да покренем ССС извор. Да ли је СССД инсталиран на вашем рачунару?" + +#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 +#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 +#: plugins/sudoers/sssd.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "не могу да нађем симбол „%s“ у „%s“" + +#: plugins/sudoers/sudo_nss.c:283 +#, c-format +msgid "Matching Defaults entries for %s on %s:\n" +msgstr "Упоређује уносе основности за „%s“ на %s:\n" + +#: plugins/sudoers/sudo_nss.c:296 +#, c-format +msgid "Runas and Command-specific defaults for %s:\n" +msgstr "Покрени-као и Наредбено-посебне основности за „%s“:\n" + +#: plugins/sudoers/sudo_nss.c:309 +#, c-format +msgid "User %s may run the following commands on %s:\n" +msgstr "Корисник „%s“ може да покреће следеће наредбе на %s:\n" + +#: plugins/sudoers/sudo_nss.c:318 +#, c-format +msgid "User %s is not allowed to run sudo on %s.\n" +msgstr "Корисник „%s“ нема права да покрене судо над „%s“.\n" + +#: plugins/sudoers/sudoers.c:154 plugins/sudoers/sudoers.c:188 +#: plugins/sudoers/sudoers.c:675 +msgid "problem with defaults entries" +msgstr "неприлике са основним уносима" + +#: plugins/sudoers/sudoers.c:160 +msgid "no valid sudoers sources found, quitting" +msgstr "нисам пронашао исправне изворе судоерса, прекидам" + +#: plugins/sudoers/sudoers.c:222 +msgid "sudoers specifies that root is not allowed to sudo" +msgstr "судоерси наводе да администратор није дозвољен у судоу" + +#: plugins/sudoers/sudoers.c:261 +msgid "you are not permitted to use the -C option" +msgstr "није вам допуштено да користите опцију „-C“" + +#: plugins/sudoers/sudoers.c:314 +#, c-format +msgid "timestamp owner (%s): No such user" +msgstr "власник временске ознаке (%s): нема таквог корисника" + +#: plugins/sudoers/sudoers.c:328 +msgid "no tty" +msgstr "нема конзоле" + +#: plugins/sudoers/sudoers.c:329 +msgid "sorry, you must have a tty to run sudo" +msgstr "извините, морате имати конзолу да покренете судо" + +#: plugins/sudoers/sudoers.c:377 +msgid "command in current directory" +msgstr "наредба у текућем директоријуму" + +#: plugins/sudoers/sudoers.c:394 +msgid "sorry, you are not allowed to preserve the environment" +msgstr "извините, није вам дозвољено да сачувате окружење" + +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 +#, c-format +msgid "unable to stat %s" +msgstr "не могу да добијем податке о „%s“" + +#: plugins/sudoers/sudoers.c:728 +#, c-format +msgid "%s is not a regular file" +msgstr "„%s“ није обична датотека" + +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 +#, c-format +msgid "%s is owned by uid %u, should be %u" +msgstr "%s је у власништву уиб-а %u, а треба бити %u" + +#: plugins/sudoers/sudoers.c:735 toke.l:930 +#, c-format +msgid "%s is world writable" +msgstr "Сви могу да пишу у „%s“" + +#: plugins/sudoers/sudoers.c:738 toke.l:935 +#, c-format +msgid "%s is owned by gid %u, should be %u" +msgstr "%s је у власништву уиб-а %u, а треба бити %u" + +#: plugins/sudoers/sudoers.c:764 +#, c-format +msgid "only root can use `-c %s'" +msgstr "само администратор може да користи „-c %s“" + +#: plugins/sudoers/sudoers.c:781 plugins/sudoers/sudoers.c:783 +#, c-format +msgid "unknown login class: %s" +msgstr "непознат разред пријављивања: %s" + +#: plugins/sudoers/sudoers.c:815 +#, c-format +msgid "unable to resolve host %s" +msgstr "не могу да решим домаћина „%s“" + +#: plugins/sudoers/sudoers.c:878 plugins/sudoers/testsudoers.c:387 +#, c-format +msgid "unknown group: %s" +msgstr "непозната група: %s" + +#: plugins/sudoers/sudoreplay.c:274 +#, c-format +msgid "invalid filter option: %s" +msgstr "неисправна опција пропусника: %s" + +#: plugins/sudoers/sudoreplay.c:287 +#, c-format +msgid "invalid max wait: %s" +msgstr "неисправно најдуже чекање: %s" + +#: plugins/sudoers/sudoreplay.c:293 +#, c-format +msgid "invalid speed factor: %s" +msgstr "неисправан чинилац брзине: %s" + +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 +#, c-format +msgid "%s version %s\n" +msgstr "%s издање %s\n" + +#: plugins/sudoers/sudoreplay.c:328 +#, c-format +msgid "%s/%.2s/%.2s/%.2s/timing: %s" +msgstr "%s/%.2s/%.2s/%.2s/временисање: %s" + +#: plugins/sudoers/sudoreplay.c:334 +#, c-format +msgid "%s/%s/timing: %s" +msgstr "%s/%s/временисање: %s" + +#: plugins/sudoers/sudoreplay.c:350 +#, c-format +msgid "Replaying sudo session: %s\n" +msgstr "Понављам сесију судоа: %s\n" + +#: plugins/sudoers/sudoreplay.c:356 +#, c-format +msgid "Warning: your terminal is too small to properly replay the log.\n" +msgstr "Упозорење: ваш терминал је премали да би исправно приказао дневник.\n" + +#: plugins/sudoers/sudoreplay.c:357 +#, 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:412 +msgid "unable to set tty to raw mode" +msgstr "не могу да подесим конзолу на сирови режим" + +#: plugins/sudoers/sudoreplay.c:443 +#, c-format +msgid "invalid timing file line: %s" +msgstr "неисправан ред датотеке временисања: %s" + +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 +#, c-format +msgid "ambiguous expression \"%s\"" +msgstr "нејасан израз „%s“" + +#: plugins/sudoers/sudoreplay.c:696 +msgid "unmatched ')' in expression" +msgstr "непоклопљена ) у изразу" + +#: plugins/sudoers/sudoreplay.c:700 +#, c-format +msgid "unknown search term \"%s\"" +msgstr "непознат појам претраге „%s“" + +#: plugins/sudoers/sudoreplay.c:714 +#, c-format +msgid "%s requires an argument" +msgstr "„%s“ захтева аргумент" + +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 +#, c-format +msgid "invalid regular expression: %s" +msgstr "неисправан регуларан израз: %s" + +#: plugins/sudoers/sudoreplay.c:724 +#, c-format +msgid "could not parse date \"%s\"" +msgstr "не могу да обрадим датум „%s“" + +#: plugins/sudoers/sudoreplay.c:733 +msgid "unmatched '(' in expression" +msgstr "непоклопљена ( у изразу" + +#: plugins/sudoers/sudoreplay.c:735 +msgid "illegal trailing \"or\"" +msgstr "недозвољено пратеће „или“" + +#: plugins/sudoers/sudoreplay.c:737 +msgid "illegal trailing \"!\"" +msgstr "недозвољени пратећи „!“" + +#: plugins/sudoers/sudoreplay.c:790 +#, c-format +msgid "unknown search type %d" +msgstr "непозната врста претраге „%d“" + +#: plugins/sudoers/sudoreplay.c:827 +#, c-format +msgid "%s: invalid log file" +msgstr "%s: неисправна датотека дневника" + +#: plugins/sudoers/sudoreplay.c:845 +#, c-format +msgid "%s: time stamp field is missing" +msgstr "%s: недостаје поље временске ознаке" + +#: plugins/sudoers/sudoreplay.c:852 +#, c-format +msgid "%s: time stamp %s: %s" +msgstr "%s: временска ознака %s: %s" + +#: plugins/sudoers/sudoreplay.c:859 +#, c-format +msgid "%s: user field is missing" +msgstr "%s: недостаје поље корисника" + +#: plugins/sudoers/sudoreplay.c:867 +#, c-format +msgid "%s: runas user field is missing" +msgstr "%s: недостаје поље „покрени-као корисник“" + +#: plugins/sudoers/sudoreplay.c:875 +#, c-format +msgid "%s: runas group field is missing" +msgstr "%s: недостаје поље „покрени-као група“" + +#: plugins/sudoers/sudoreplay.c:1230 +#, 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:1233 +#, c-format +msgid "usage: %s [-h] [-d dir] -l [search expression]\n" +msgstr "употреба: %s [-h] [-d дир] -l [израз претраге]\n" + +#: plugins/sudoers/sudoreplay.c:1242 +#, c-format +msgid "" +"%s - replay sudo session logs\n" +"\n" +msgstr "" +"%s — понавља дневнике сесије судоа\n" +"\n" + +#: plugins/sudoers/sudoreplay.c:1244 +msgid "" +"\n" +"Options:\n" +" -d, --directory=dir specify directory for session logs\n" +" -f, --filter=filter specify which I/O type(s) to display\n" +" -h, --help display help message and exit\n" +" -l, --list list available session IDs, with optional expression\n" +" -m, --max-wait=num max number of seconds to wait between events\n" +" -s, --speed=num speed up or slow down output\n" +" -V, --version display version information and exit" +msgstr "" +"\n" +"Опције:\n" +" -d, --directory=дир наводи директоријум за дневнике сесије\n" +" -f, --filter=пропусник наводи У/И врсту(е) за приказивање\n" +" -h, --help приказује поруку помоћи и излази\n" +" -l, --list исписује доступне ИБ-ове сесије, са изборним изразом\n" +" -m, --max-wait=број највећи број секунди за чекање између догађаја\n" +" -s, --speed=број убрзава или успорава излаз\n" +" -V, --version приказује податке о издању и излази" + +#: plugins/sudoers/testsudoers.c:326 +msgid "\thost unmatched" +msgstr "\tдомаћин није поклопљен" + +#: plugins/sudoers/testsudoers.c:329 +msgid "" +"\n" +"Command allowed" +msgstr "" +"\n" +"Наредба је допуштена" + +#: plugins/sudoers/testsudoers.c:330 +msgid "" +"\n" +"Command denied" +msgstr "" +"\n" +"Наредба је одбијена" + +#: plugins/sudoers/testsudoers.c:330 +msgid "" +"\n" +"Command unmatched" +msgstr "" +"\n" +"Наредба није поклопљена" + +#: plugins/sudoers/timestamp.c:191 +#, c-format +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "не могу да скратим датотеку временске ознаке на %lld бајта" + +#: plugins/sudoers/timestamp.c:291 +#, c-format +msgid "%s is group writable" +msgstr "Група може да пише у „%s“" + +#: plugins/sudoers/timestamp.c:311 +#, c-format +msgid "timestamp path too long: %s/%s" +msgstr "путања временске ознаке је предуга: %s/%s" + +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "занемарујем временску ознаку из будућности" + +#: plugins/sudoers/timestamp.c:496 +#, c-format +msgid "time stamp too far in the future: %20.20s" +msgstr "временска ознака је превише у будућности: %20.20s" + +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 +#, c-format +msgid "lecture status path too long: %s/%s" +msgstr "путања стања обучавања је предуга: %s/%s" + +#: plugins/sudoers/toke_util.c:176 +msgid "fill_args: buffer overflow" +msgstr "fill_args: прекорачење међумеморије" + +#: plugins/sudoers/visudo.c:186 +#, c-format +msgid "%s grammar version %d\n" +msgstr "%s граматика издање %d\n" + +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 +#, c-format +msgid "press return to edit %s: " +msgstr "притисните „унеси“ да уредите „%s“: " + +#: plugins/sudoers/visudo.c:342 plugins/sudoers/visudo.c:348 +msgid "write error" +msgstr "грешка писања" + +#: plugins/sudoers/visudo.c:430 +#, c-format +msgid "unable to stat temporary file (%s), %s unchanged" +msgstr "не могу да добавим податке привремене датотеке (%s), %s је неизмењено" + +#: plugins/sudoers/visudo.c:435 +#, c-format +msgid "zero length temporary file (%s), %s unchanged" +msgstr "привремена датотека нулте дужине (%s), %s је неизмењено" + +#: plugins/sudoers/visudo.c:441 +#, c-format +msgid "editor (%s) failed, %s unchanged" +msgstr "уређивач (%s) није успео, %s је неизмењено" + +#: plugins/sudoers/visudo.c:463 +#, c-format +msgid "%s unchanged" +msgstr "„%s“ је неизмењено" + +#: plugins/sudoers/visudo.c:488 +#, c-format +msgid "unable to re-open temporary file (%s), %s unchanged." +msgstr "не могу поново да отворим привремену датотеку (%s), %s је неизмењено." + +#: plugins/sudoers/visudo.c:498 +#, c-format +msgid "unabled to parse temporary file (%s), unknown error" +msgstr "не могу да обрадим привремену датотеку (%s), непозната грешка" + +#: plugins/sudoers/visudo.c:534 +#, c-format +msgid "internal error, unable to find %s in list!" +msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" + +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 +#, c-format +msgid "unable to set (uid, gid) of %s to (%u, %u)" +msgstr "не могу да подесим (јиб, гиб) за %s на (%u, %u)" + +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "не могу да променим режим „%s“ на 0%o" + +#: plugins/sudoers/visudo.c:623 +#, c-format +msgid "%s and %s not on the same file system, using mv to rename" +msgstr "„%s“ и „%s“ нису на истом систему датотека, користим „mv“ за преименовање" + +#: plugins/sudoers/visudo.c:637 +#, c-format +msgid "command failed: '%s %s %s', %s unchanged" +msgstr "наредба није успела: „%s %s %s“, %s је неизмењено" + +#: plugins/sudoers/visudo.c:647 +#, c-format +msgid "error renaming %s, %s unchanged" +msgstr "грешка преименовања „%s“, %s је неизмењено" + +#: plugins/sudoers/visudo.c:709 +msgid "What now? " +msgstr "Шта сада?" + +#: plugins/sudoers/visudo.c:723 +msgid "" +"Options are:\n" +" (e)dit sudoers file again\n" +" e(x)it without saving changes to sudoers file\n" +" (Q)uit and save changes to sudoers file (DANGER!)\n" +msgstr "" +"Опције су:\n" +" e — опет уређује датотеку судоерса\n" +" x — излази без чувања измена у датотеци судоерса\n" +" Q — прекида и чува измене у датотеци судоерса (ОПАСНО!)\n" + +#: plugins/sudoers/visudo.c:771 +#, c-format +msgid "unable to run %s" +msgstr "не могу да покренем %s" + +#: plugins/sudoers/visudo.c:797 +#, c-format +msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" +msgstr "%s: погрешан власник (јиб, гиб) треба бити (%u, %u)\n" + +#: plugins/sudoers/visudo.c:804 +#, c-format +msgid "%s: bad permissions, should be mode 0%o\n" +msgstr "%s: лоша овлашћења, требају бити у режиму 0%o\n" + +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 +#, c-format +msgid "failed to parse %s file, unknown error" +msgstr "нисам успео да обрадим %s датотеку, непозната грешка" + +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 +#, c-format +msgid "parse error in %s near line %d\n" +msgstr "грешка обраде у %s близу реда %d\n" + +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 +#, c-format +msgid "parse error in %s\n" +msgstr "грешка обраде у %s\n" + +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 +#, c-format +msgid "%s: parsed OK\n" +msgstr "%s: успешно је обрађено\n" + +#: plugins/sudoers/visudo.c:909 +#, c-format +msgid "%s busy, try again later" +msgstr "„%s“ је заузет, покушајте касније" + +#: plugins/sudoers/visudo.c:953 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "наведени уређивач (%s) не постоји" + +#: plugins/sudoers/visudo.c:976 +#, c-format +msgid "unable to stat editor (%s)" +msgstr "не могу да добавим податке уређивача (%s)" + +#: plugins/sudoers/visudo.c:1024 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "нисам пронашао уређивача (путања уређивача = %s)" + +#: plugins/sudoers/visudo.c:1117 +#, c-format +msgid "Error: cycle in %s_Alias `%s'" +msgstr "Грешка: циклус у %s_Alias „%s“" + +#: plugins/sudoers/visudo.c:1118 +#, c-format +msgid "Warning: cycle in %s_Alias `%s'" +msgstr "Упозорење: циклус у %s_Alias „%s“" + +#: plugins/sudoers/visudo.c:1124 +#, c-format +msgid "Error: %s_Alias `%s' referenced but not defined" +msgstr "Грешка: упута за %s_Alias „%s“ постоји али није одређен" + +#: plugins/sudoers/visudo.c:1125 +#, c-format +msgid "Warning: %s_Alias `%s' referenced but not defined" +msgstr "Упозорење: %s_Alias „%s“ има упуту али није одређено" + +#: plugins/sudoers/visudo.c:1267 +#, c-format +msgid "%s: unused %s_Alias %s" +msgstr "%s: некоришћено „%s_Alias %s“" + +#: plugins/sudoers/visudo.c:1329 +#, c-format +msgid "" +"%s - safely edit the sudoers file\n" +"\n" +msgstr "" +"%s — безбедно уређује датотеку судоерса\n" +"\n" + +#: plugins/sudoers/visudo.c:1331 +msgid "" +"\n" +"Options:\n" +" -c, --check check-only mode\n" +" -f, --file=file specify sudoers file location\n" +" -h, --help display help message and exit\n" +" -q, --quiet less verbose (quiet) syntax error messages\n" +" -s, --strict strict syntax checking\n" +" -V, --version display version information and exit\n" +" -x, --export=file export sudoers in JSON format" +msgstr "" +"\n" +"Опције:\n" +" -c, --check режим само провере\n" +" -f, --file=file наводи место датотеке судоерса\n" +" -h, --help приказује поруку помоћи и излази\n" +" -q, --quiet мање опширне (тихе) поруке грешке синтаксе\n" +" -s, --strict строга провера синтаксе\n" +" -V, --version приказује податке о издању и излази\n" +" -x, --export=file извози судоерсе у ЈСОН запису" + +#: toke.l:894 +msgid "too many levels of includes" +msgstr "превише нивоа укључивања" diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot index bcfcc8baa..80ce7781b 100644 --- a/plugins/sudoers/po/sudoers.pot +++ b/plugins/sudoers/po/sudoers.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.9b2\n" +"Project-Id-Version: sudo 1.8.10\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -233,13 +233,13 @@ msgid "" "\n" msgstr "" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -440,202 +440,211 @@ msgstr "" #: plugins/sudoers/def_data.c:203 #, c-format -msgid "Path to authentication timestamp dir: %s" +msgid "Path to lecture status dir: %s" msgstr "" #: plugins/sudoers/def_data.c:207 #, c-format -msgid "Owner of the authentication timestamp dir: %s" +msgid "Path to authentication timestamp dir: %s" msgstr "" #: plugins/sudoers/def_data.c:211 #, c-format -msgid "Users in this group are exempt from password and PATH requirements: %s" +msgid "Owner of the authentication timestamp dir: %s" msgstr "" #: plugins/sudoers/def_data.c:215 #, c-format -msgid "Default password prompt: %s" +msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "" #: plugins/sudoers/def_data.c:219 -msgid "If set, passprompt will override system prompt in all cases." +#, c-format +msgid "Default password prompt: %s" msgstr "" #: plugins/sudoers/def_data.c:223 +msgid "If set, passprompt will override system prompt in all cases." +msgstr "" + +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "" "Use faster globbing that is less accurate but does not access the filesystem" msgstr "" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "" "The umask specified in sudoers will override the user's, even if it is more " "permissive" msgstr "" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "File in which to store the input/output log: %s" msgstr "" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use for login shells" msgstr "" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "Attempt to establish PAM credentials for the target user" msgstr "" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Create a new PAM session for the command to run in" msgstr "" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -713,142 +722,142 @@ msgstr "" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "" #: plugins/sudoers/iolog.c:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "" -#: plugins/sudoers/ldap.c:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" "LDAP Role: %s\n" msgstr "" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" "LDAP Role: UNKNOWN\n" msgstr "" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr "" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr "" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "" @@ -871,57 +880,57 @@ msgstr "" msgid "%8s : (command continued) %s" msgstr "" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -929,48 +938,48 @@ msgstr "" msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" "Use `sudo ./%s' if this is the `%s' you wish to run." msgstr "" -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "" msgstr[1] "" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "" @@ -1038,7 +1047,7 @@ msgstr "" msgid "%s: %s" msgstr "" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "" @@ -1216,9 +1225,8 @@ msgstr "" msgid "sorry, you are not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "" @@ -1228,17 +1236,17 @@ msgstr "" msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" @@ -1263,154 +1271,154 @@ msgstr "" msgid "unknown group: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "" -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" "\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1445,45 +1453,33 @@ msgid "" "Command unmatched" msgstr "" -#: plugins/sudoers/timestamp.c:133 -#, c-format -msgid "timestamp path too long: %s" -msgstr "" - -#: plugins/sudoers/timestamp.c:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 -#, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "" - -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" +msgid "unable to truncate time stamp file to %lld bytes" msgstr "" -#: plugins/sudoers/timestamp.c:284 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s exists but is not a regular file (0%o)" +msgid "%s is group writable" msgstr "" -#: plugins/sudoers/timestamp.c:296 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" +msgid "timestamp path too long: %s/%s" msgstr "" -#: plugins/sudoers/timestamp.c:351 -#, c-format -msgid "timestamp too far in the future: %20.20s" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" msgstr "" -#: plugins/sudoers/timestamp.c:405 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "unable to remove %s, will reset to the Unix epoch" +msgid "time stamp too far in the future: %20.20s" msgstr "" -#: plugins/sudoers/timestamp.c:413 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to reset %s to the Unix epoch" +msgid "lecture status path too long: %s/%s" msgstr "" #: plugins/sudoers/toke_util.c:176 @@ -1495,7 +1491,7 @@ msgstr "" msgid "%s grammar version %d\n" msgstr "" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "" @@ -1519,56 +1515,56 @@ msgstr "" msgid "editor (%s) failed, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "" -#: plugins/sudoers/visudo.c:499 +#: plugins/sudoers/visudo.c:498 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "internal error, unable to find %s in list!" msgstr "" -#: plugins/sudoers/visudo.c:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "" -#: plugins/sudoers/visudo.c:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "" -#: plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:623 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "" -#: plugins/sudoers/visudo.c:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "" -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1576,94 +1572,94 @@ msgid "" " (Q)uit and save changes to sudoers file (DANGER!)\n" msgstr "" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "" -#: plugins/sudoers/visudo.c:805 +#: plugins/sudoers/visudo.c:804 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "" -#: plugins/sudoers/visudo.c:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, c-format msgid "parse error in %s near line %d\n" msgstr "" -#: plugins/sudoers/visudo.c:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1676,6 +1672,6 @@ msgid "" " -x, --export=file export sudoers in JSON format" msgstr "" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "" diff --git a/plugins/sudoers/po/uk.mo b/plugins/sudoers/po/uk.mo Binary files differindex a1bc084ac..8954b2563 100644 --- a/plugins/sudoers/po/uk.mo +++ b/plugins/sudoers/po/uk.mo diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po index 151929eeb..3cdfd78a8 100644 --- a/plugins/sudoers/po/uk.po +++ b/plugins/sudoers/po/uk.po @@ -1,13 +1,13 @@ # Ukrainian translation for sudoers. # This file is put in the public domain. # -# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013. +# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.9b2\n" +"Project-Id-Version: sudoers 1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-26 22:25+0200\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-08 13:59+0200\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" "Language: uk\n" @@ -237,13 +237,13 @@ msgstr "" " #3) Користування широкими правами розширює сферу відповідальності.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" msgstr "невідоме значення uid: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format @@ -444,199 +444,208 @@ msgstr "Повідомлення про помилковий пароль: %s" #: plugins/sudoers/def_data.c:203 #, c-format +msgid "Path to lecture status dir: %s" +msgstr "Шлях до каталогу стану отримання настанов: %s" + +#: plugins/sudoers/def_data.c:207 +#, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Шлях до каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Користувачів цієї групи звільнено від потреби у введенні пароля і PATH: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Default password prompt: %s" msgstr "Типовий запит пароля: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 msgid "If set, passprompt will override system prompt in all cases." msgstr "Якщо встановлено, запит щодо паролю замінюватиме запит системи." -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 #, c-format msgid "Default user to run commands as: %s" msgstr "Типовий користувач для запуску команд: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Значення для заміни $PATH користувача: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Шлях до редактора, який використовуватиме visudo: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «list»: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «verify»: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Попередньо завантажувати фіктивні функції виконання з бібліотеки sudo_noexec" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Чи слід ігнорувати локальний файл sudoers, якщо є доступ до каталогу LDAP" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Дескриптори файлів >= %d буде закрито перед виконанням команди" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Якщо встановлено, користувачі можуть перевизначати значення «closefrom» за допомогою параметра -C" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "Allow users to set arbitrary environment variables" msgstr "Дозволити користувачам встановлювати значення довільних змінних середовища" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Reset the environment to a default set of variables" msgstr "Відновити типовий набір змінних середовища" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Environment variables to check for sanity:" msgstr "Змінні середовища, коректність яких слід перевіряти:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Змінні середовища, які слід вилучити:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Змінні середовища, які слід зберегти:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Роль SELinux, яку слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Тип SELinux, який слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Шлях до специфічного для sudo файла середовища: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Локаль, яку слід використати під час обробки sudoers: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозволити sudo надсилати запит щодо пароля, навіть якщо цей пароль буде видимим" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Супроводжувати введення користувачем пароля показом замінників символів пароля" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Швидше встановлення відповідності, менш точне, але без доступу до файлової системи" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Значення umask, вказане у sudoers, перевизначатиме значення користувача, навіть якщо це значення відкриває ширший доступ" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "Log user's input for the command being run" msgstr "Записувати дані, вказані користувачем під час виконання команди" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log the output of the command being run" msgstr "Записувати дані, виведені командою під час виконання" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Compress I/O logs using zlib" msgstr "Стискати журнали за допомогою zlib" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Завжди запускати команди у псевдо-tty" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Додаток для підтримки не-Unix груп: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Каталог, у якому слід зберігати журнали введення/виведення: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Файл, у якому слід зберігати журнал введення/виведення даних: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додати запис до файла utmp/utmpx під час розміщення pty" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Встановити користувача у utmp у значення користувача, від імені якого виконується команда" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Набір дозвільних прав доступу" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Набір обмежувальних прав доступу" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Run commands on a pty in the background" msgstr "Виконувати команди у pty у фоновому режимі" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Назва служби PAM, якою слід скористатися" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use for login shells" msgstr "Назва служби PAM, якою слід скористатися для оболонок входу до системи" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "Attempt to establish PAM credentials for the target user" msgstr "Спробувати встановити реєстраційні дані PAM для користувача, від імені якого виконуватимуться дії" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Create a new PAM session for the command to run in" msgstr "Створити сеанс PAM для виконання команди" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Максимальний номер у послідовності журналу введення-виведення: %u" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Увімкнути підтримку мережевих груп у sudoers" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" @@ -713,106 +722,106 @@ msgstr "не вдалося знайти символ «group_plugin» у %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: несумісна основна версія додатка обробки груп %d, мало бути — %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 msgid "Local IP address and netmask pairs:\n" msgstr "Пари локальних IP-адрес і масок мережі:\n" #: plugins/sudoers/iolog.c:99 plugins/sudoers/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s існує, але не є каталогом (0%o)" #: plugins/sudoers/iolog.c:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "не вдалося створити каталог %s" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "не вдалося прочитати %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "не вдалося створити %s" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: занадто великий номер порту" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: вихід за межі розширеного буфера вузла" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "непідтримуваний тип адреси LDAP: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "не можна використовувати суміш з адрес ldap і ldaps" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" msgstr "підтримки starttls, якщо використовується ldaps, не передбачено" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" msgstr "sudo_ldap_parse_uri: вихід за межі пам’яті під час побудови буфера вузла" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не вдалося ініціалізувати базу даних сертифікатів і ключів SSL: %s" -#: plugins/sudoers/ldap.c:595 +#: plugins/sudoers/ldap.c:598 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "щоб скористатися SSL, вам слід встановити для TLS_CERT значення %s" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "не вдалося отримати гринвіцький час" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "не вдалося виконати форматування часового штампа" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "не вдалося побудувати фільтр часу" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "sudo_ldap_build_pass1: невідповідність розміщення" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -821,7 +830,7 @@ msgstr "" "\n" "Роль LDAP: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -830,27 +839,27 @@ msgstr "" "\n" "Роль у LDAP: НЕВІДОМА\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" msgstr " Порядок: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" msgstr " Команди:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не вдалося ініціалізувати LDAP: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "некоректний атрибут sudoOrder: %s" @@ -873,57 +882,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (команда продовжується) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "не вдалося відкрити файл журналу: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "не вдалося заблокувати файл журналу: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Немає користувача або вузла" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "помилка під час спроби перевірки" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "користувача немає у списку sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "користувача не уповноважено на дії на вузлі" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "виконання команди заборонено" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s немає у файлі sudoers. Запис про подію додано до звіту.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s заборонено виконувати sudo на %s. Запис про подію додано до звіту.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Вибачте, користувач %s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, 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:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -931,7 +940,7 @@ msgstr "Вибачте, користувач %s не має права вико msgid "%s: command not found" msgstr "%s: команду не знайдено" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -940,15 +949,15 @@ msgstr "" "пропущено «%s» знайдений у «.»\n" "Скористайтеся командою «sudo ./%s», якщо вам потрібно виконати саме «%s»." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "помилка під час спроби розпізнавання" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "слід вказати пароль" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -957,26 +966,26 @@ msgstr[1] "%u невдалих спроби введення пароля" msgstr[2] "%u невдалих спроб введення пароля" msgstr[3] "одна невдала спроба введення пароля" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "не вдалося створити відгалуження" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "не вдалося створити відгалуження: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "не вдалося відкрити канал: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "не вдалося здублювати stdin: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "не вдалося виконати %s: %m" @@ -1046,7 +1055,7 @@ msgstr " Параметри: " msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" @@ -1226,9 +1235,8 @@ msgstr "команда у поточному каталозі" msgid "sorry, you are not allowed to preserve the environment" msgstr "вибачте, вам не дозволено зберігати середовище" -#: plugins/sudoers/sudoers.c:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "не вдалося виконати stat для %s" @@ -1238,17 +1246,17 @@ msgstr "не вдалося виконати stat для %s" msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: plugins/sudoers/sudoers.c:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s належить gid %u, має належати %u" @@ -1273,147 +1281,147 @@ msgstr "не вдалося визначити адресу вузла %s" msgid "unknown group: %s" msgstr "невідома група: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "некоректний параметр фільтрування: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "некоректне значення макс. очікування: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "некоректний коефіцієнт швидкості: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s, версія %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Відтворення сеансу sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Попередження: розміри вашого термінала є замалими для належного показу журналу.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, 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:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" msgstr "не вдалося перевести tty у режим без обробки даних" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "некоректний рядок у файлі timing: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "неоднозначний вираз «%s»" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "зайва дужка, «)», у виразі" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "невідомий ключ пошуку «%s»" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s потребує визначення аргументу" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "некоректний формальний вираз: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "не вдалося обробити дату «%s»" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "зайва дужка, «(», у виразі" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" msgstr "помилкове завершальне «or»" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "помилкове завершальне «!»" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "невідомий тип пошуку %d" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: некоректний файл журналу" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: не вказано даних щодо часової позначки" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: часова позначка %s: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: не вказано даних щодо користувача" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: не вказано даних щодо користувача, від імені якого відбуватиметься виконання" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: не вказано даних щодо групи, від імені якої відбуватиметься виконання" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, 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:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "використання: %s [-h] [-d каталог] -l [вираз для пошуку]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1422,7 +1430,7 @@ msgstr "" "%s — відтворення журналів сеансів sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1472,46 +1480,34 @@ msgstr "" "\n" "Не знайдено відповідника команди" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "шлях часового штампа є занадто довгим: %s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "не вдалося обрізати файл часової позначки до %lld байтів" -#: plugins/sudoers/timestamp.c:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "власником %s є uid %u, має бути uid %u" +msgid "%s is group writable" +msgstr "%s доступний до запису учасниками групи" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s доступний до запису невласником (0%o), має бути встановлено режим 0700" +msgid "timestamp path too long: %s/%s" +msgstr "надто довгий шлях до часової позначки: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s існує, але не є звичайним файлом (0%o)" +#: plugins/sudoers/timestamp.c:484 +msgid "ignoring time stamp from the future" +msgstr "ігноруємо часову позначку з майбутнього" -#: plugins/sudoers/timestamp.c:296 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s доступний до запису невласником (0%o), має бути встановлено режим 0600" +msgid "time stamp too far in the future: %20.20s" +msgstr "занадто далека часова позначка у майбутньому: %20.20s" -#: plugins/sudoers/timestamp.c:351 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "timestamp too far in the future: %20.20s" -msgstr "занадто далекий часовий штамп у майбутньому: %20.20s" - -#: plugins/sudoers/timestamp.c:405 -#, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "на вдалося вилучити %s, час буде змінено відповідно до епохи UNIX" - -#: plugins/sudoers/timestamp.c:413 -#, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "не вдалося скинути час %s до епохи UNIX" +msgid "lecture status path too long: %s/%s" +msgstr "шлях до даних щодо стану отримання настанов є занадто довгим: %s/%s" #: plugins/sudoers/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1522,7 +1518,7 @@ msgstr "fill_args: переповнення буфера" msgid "%s grammar version %d\n" msgstr "Граматична перевірка %s, версія %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "натисніть Enter для редагування %s: " @@ -1546,56 +1542,56 @@ msgstr "файл тимчасових даних має нульовий об’ msgid "editor (%s) failed, %s unchanged" msgstr "помилка редактора (%s), %s не змінено" -#: plugins/sudoers/visudo.c:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s не змінено" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не вдалося повторно відкрити файл тимчасових даних (%s), %s не змінено." -#: plugins/sudoers/visudo.c:499 +#: plugins/sudoers/visudo.c:498 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "не вдалося обробити файл тимчасових даних (%s), невідома помилка" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "internal error, unable to find %s in list!" msgstr "внутрішня помилка, не вдалося знайти %s у списку!" -#: plugins/sudoers/visudo.c:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не вдалося встановити (uid, gid) %s у значення (%u, %u)" -#: plugins/sudoers/visudo.c:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не вдалося змінити режим доступу до %s на значення 0%o" -#: plugins/sudoers/visudo.c:624 +#: plugins/sudoers/visudo.c:623 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s і %s не перебувають у одній файловій системі, використовуємо mv для перейменування" -#: plugins/sudoers/visudo.c:638 +#: plugins/sudoers/visudo.c:637 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "помилка команди: «%s %s %s», %s не змінено" -#: plugins/sudoers/visudo.c:648 +#: plugins/sudoers/visudo.c:647 #, c-format msgid "error renaming %s, %s unchanged" msgstr "помилка перейменування %s, %s не змінено" -#: plugins/sudoers/visudo.c:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "А зараз що? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1607,87 +1603,87 @@ msgstr "" " (x) — вийти без внесення змін до файла sudoers\n" " (Q) — вийти зі збереженням файла sudoers (НЕБЕЗПЕЧНО!)\n" -#: plugins/sudoers/visudo.c:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: помилковий власник (uid, gid), має бути (%u, %u)\n" -#: plugins/sudoers/visudo.c:805 +#: plugins/sudoers/visudo.c:804 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: помилкові права доступу, режим доступу має бути 0%o\n" -#: plugins/sudoers/visudo.c:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, c-format msgid "failed to parse %s file, unknown error" msgstr "не вдалося обробити файл %s, невідома помилка" -#: plugins/sudoers/visudo.c:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, c-format msgid "parse error in %s near line %d\n" msgstr "помилка обробки у %s поблизу рядка %d\n" -#: plugins/sudoers/visudo.c:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "помилка обробки у %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: вдала обробка\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s зайнято, повторіть спробу пізніше" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "вказаного редактора (%s) не існує" -#: plugins/sudoers/visudo.c:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "не вдалося виконати stat для редактора (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, c-format msgid "no editor found (editor path = %s)" msgstr "не знайдено жодного редактора (шлях до редактора = %s)" -#: plugins/sudoers/visudo.c:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" msgstr "Помилка: цикл у %s_Alias «%s»" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" msgstr "Попередження: цикл у %s_Alias «%s»" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Помилка: виявлено посилання %s_Alias «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Попередження: виявлено посилання %s_Alias «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: невикористаний %s_Alias %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1696,7 +1692,7 @@ msgstr "" "%s — безпечне редагування файла sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1718,10 +1714,28 @@ msgstr "" " -V, --version показати дані щодо версії і завершити роботу\n" " -x, --export=файл експортувати sudoers у форматі JSON" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "занадто високий рівень вкладеності" +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "власником %s є uid %u, має бути uid %u" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s доступний до запису невласником (0%o), має бути встановлено режим 0700" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s існує, але не є звичайним файлом (0%o)" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s доступний до запису невласником (0%o), має бути встановлено режим 0600" + +#~ msgid "unable to remove %s, will reset to the Unix epoch" +#~ msgstr "на вдалося вилучити %s, час буде змінено відповідно до епохи UNIX" + +#~ msgid "unable to reset %s to the Unix epoch" +#~ msgstr "не вдалося скинути час %s до епохи UNIX" + #~ msgid "invalid value" #~ msgstr "некоректне значення" @@ -1859,9 +1873,6 @@ msgstr "занадто високий рівень вкладеності" #~ msgid "unable to get runas group vector" #~ msgstr "не вдалося отримати вектор групи виконання" -#~ msgid "unable to reset group vector" -#~ msgstr "не вдалося відновити початкове значення вектора групи" - #~ msgid "unable to get group vector" #~ msgstr "не вдалося отримати вектор групи" diff --git a/plugins/sudoers/po/vi.mo b/plugins/sudoers/po/vi.mo Binary files differindex 9ccb9deba..5fb89ea1c 100644 --- a/plugins/sudoers/po/vi.mo +++ b/plugins/sudoers/po/vi.mo diff --git a/plugins/sudoers/po/vi.po b/plugins/sudoers/po/vi.po index bb8d3a568..6f6e2c84c 100644 --- a/plugins/sudoers/po/vi.po +++ b/plugins/sudoers/po/vi.po @@ -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 <vnwildman@gmail.com>, 2012-2013. +# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014. # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.9b2\n" +"Project-Id-Version: sudoers-1.8.10b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-17 10:47-0700\n" -"PO-Revision-Date: 2013-12-29 15:17+0700\n" +"POT-Creation-Date: 2014-02-07 15:13-0700\n" +"PO-Revision-Date: 2014-02-09 07:45+0700\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" @@ -142,11 +142,11 @@ msgstr "không thể thay đổi mật khẩu đã hết hạn: %s" #: plugins/sudoers/auth/pam.c:166 msgid "Password expired, contact your system administrator" -msgstr "Mật khẩu đã hết hạn dùng, hãy liên lạc với quản trị hệ thống" +msgstr "Mật khẩu đã hết hạn dùng, hãy liên lạc với người quản trị hệ thống của bạn" #: plugins/sudoers/auth/pam.c:170 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" -msgstr "Tài khoản hết hạn hoặc cấu hình PAM không có phiên “tài khoản” cho sudo, hãy liên hệ với người quản trị" +msgstr "Tài khoản hết hạn hoặc cấu hình PAM không có phiên “tài khoản” cho sudo, hãy liên hệ với người quản trị hệ thống của bạn" #: plugins/sudoers/auth/pam.c:187 #, c-format @@ -204,7 +204,7 @@ msgstr "Phương thức xác thực không hợp lệ được biên dịch vào #: plugins/sudoers/auth/sudo_auth.c:203 msgid "no authentication methods" -msgstr "chưa có phương thức xác" +msgstr "chưa có phương thức xác thực" #: plugins/sudoers/auth/sudo_auth.c:205 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." @@ -216,11 +216,11 @@ msgstr "Phương thức xác thực:" #: plugins/sudoers/bsm_audit.c:91 plugins/sudoers/bsm_audit.c:158 msgid "Could not determine audit condition" -msgstr "Không thể xác định điều kiện audit" +msgstr "Không thể phân giải điều kiện audit" #: plugins/sudoers/bsm_audit.c:134 plugins/sudoers/bsm_audit.c:199 msgid "unable to commit audit record" -msgstr "không thể chuyển giao bản ghi audit" +msgstr "không thể chuyển giao bản ghi “audit”" #: plugins/sudoers/check.c:189 msgid "" @@ -242,18 +242,18 @@ msgstr "" " #3) Quyền lực lớn đi kèm với trách nhiệm lớn.\n" "\n" -#: plugins/sudoers/check.c:227 plugins/sudoers/check.c:233 +#: plugins/sudoers/check.c:232 plugins/sudoers/check.c:238 #: plugins/sudoers/sudoers.c:562 plugins/sudoers/sudoers.c:588 #, c-format msgid "unknown uid: %u" -msgstr "không biết UID: %u" +msgstr "không biết mã số người dùng: %u" -#: plugins/sudoers/check.c:230 plugins/sudoers/policy.c:657 +#: plugins/sudoers/check.c:235 plugins/sudoers/policy.c:657 #: plugins/sudoers/sudoers.c:850 plugins/sudoers/testsudoers.c:211 #: plugins/sudoers/testsudoers.c:363 #, c-format msgid "unknown user: %s" -msgstr "không hiểu người dùng: %s" +msgstr "không biết người dùng: %s" #: plugins/sudoers/def_data.c:27 #, c-format @@ -276,7 +276,7 @@ msgstr "Đặt nhắc OTP (mật khẩu dùng một lần) tại dòng nó sở #: plugins/sudoers/def_data.c:43 msgid "Ignore '.' in $PATH" -msgstr "Bỏ qua “.” trong $PATH" +msgstr "Bỏ qua “.” trong biến $PATH" #: plugins/sudoers/def_data.c:47 msgid "Always send mail when sudo is run" @@ -300,7 +300,7 @@ 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 msgid "Use a separate timestamp for each user/tty combo" -msgstr "Sử dụng timestamp riêng rẽ cho từng cặp tkhoản/tty" +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:71 msgid "Lecture user the first time they run sudo" @@ -309,7 +309,7 @@ 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:75 #, c-format msgid "File containing the sudo lecture: %s" -msgstr "TẬP-TIN chứa thuyết trình về sudo: %s" +msgstr "TẬP-TIN chứa thuyết trình về “sudo”: %s" #: plugins/sudoers/def_data.c:79 msgid "Require users to authenticate by default" @@ -329,7 +329,7 @@ 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:95 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 shell (hệ vỏ)" +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:99 msgid "Set $HOME to the target user when starting a shell with -s" @@ -395,7 +395,7 @@ msgstr "Độ dài mà tại đó các dòng trong tập tin nhật ký được #: plugins/sudoers/def_data.c:159 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" -msgstr "Thời gian chờ timestamp 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:163 #, c-format @@ -435,7 +435,7 @@ msgstr "Địa chỉ để gửi thư đến: %s" #: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail from: %s" -msgstr "Địa chỉ dùng để gửi thư: %s" +msgstr "Địa chỉ dùng để gửi thư từ: %s" #: plugins/sudoers/def_data.c:195 #, c-format @@ -445,207 +445,216 @@ msgstr "Chủ đề cho thư: %s" #: plugins/sudoers/def_data.c:199 #, c-format msgid "Incorrect password message: %s" -msgstr "Sai mật khẩu: %s" +msgstr "Mật khẩu không đúng: %s" #: plugins/sudoers/def_data.c:203 #, c-format -msgid "Path to authentication timestamp dir: %s" -msgstr "Đường dẫn thư mục timestamp xác thực: %s" +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:207 #, c-format -msgid "Owner of the authentication timestamp dir: %s" -msgstr "Chủ sở hữu đường dẫn thư mục timestamp xác thực: %s" +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:211 #, 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:215 +#, 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:215 +#: plugins/sudoers/def_data.c:219 #, 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:219 +#: plugins/sudoers/def_data.c:223 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:223 +#: plugins/sudoers/def_data.c:227 #, 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:227 +#: plugins/sudoers/def_data.c:231 #, 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:231 +#: plugins/sudoers/def_data.c:235 #, 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:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" -msgstr "Khi được yêu cầu mật khẩu cho “thẩm tra” lệnh-giả: %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:243 +#: plugins/sudoers/def_data.c:247 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 #, 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:255 +#: plugins/sudoers/def_data.c:259 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:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 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:267 +#: plugins/sudoers/def_data.c:271 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:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to remove:" msgstr "Các biến môi trường bị gỡ bỏ:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to preserve:" msgstr "Các biến môi trường được giữ lại:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 #, 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:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, 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:295 +#: plugins/sudoers/def_data.c:299 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:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 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:319 +#: plugins/sudoers/def_data.c:323 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:323 +#: plugins/sudoers/def_data.c:327 msgid "Always run commands in a pseudo-tty" msgstr "Luôn chạy lệnh ở tty-giả" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Phần bổ xung cho hỗ trợ nhóm không-Unix: %s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, 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:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 msgid "Set of permitted privileges" msgstr "Tập hợp các đặc quyền được phép" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of limit privileges" msgstr "Tập hợp các quyền bị giới hạn" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 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:359 +#: plugins/sudoers/def_data.c:363 msgid "PAM service name to use" msgstr "Tên dịch vụ PAM được dùng" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 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:367 +#: plugins/sudoers/def_data.c:371 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:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 #, 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/defaults.c:210 plugins/sudoers/defaults.c:596 +#: plugins/sudoers/def_data.c:383 +msgid "Enable sudoers netgroup support" +msgstr "Bật hỗ trợ nhóm-mạng “sudoers”" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:600 #: plugins/sudoers/visudo_json.c:611 plugins/sudoers/visudo_json.c:647 #, c-format msgid "unknown defaults entry `%s'" -msgstr "không hiểu mục mặc định “%s”" +msgstr "không hiểu mục tin mặc định “%s”" #: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 #: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 @@ -654,7 +663,7 @@ msgstr "không hiểu mục mặc định “%s”" #: plugins/sudoers/defaults.c:330 #, c-format msgid "value `%s' is invalid for option `%s'" -msgstr "giá trị “%s” là không hợp lệ cho tùy chọn “%s”" +msgstr "giá trị “%s” là không hợp lệ đối với tùy chọn “%s”" #: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 #: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 @@ -668,7 +677,7 @@ msgstr "chưa chỉ ra giá trị cho “%s”" #: plugins/sudoers/defaults.c:244 #, c-format msgid "values for `%s' must start with a '/'" -msgstr "giá trị cho “%s” phải bắt đầu bằng một “/”" +msgstr "giá trị cho “%s” phải bắt đầu bằng dấu “/”" #: plugins/sudoers/defaults.c:306 #, c-format @@ -718,106 +727,106 @@ msgstr "không tìm thấy ký hiệu “group_plugin” trong %s" msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: phiên bản số lớn phần bổ xung nhóm không tương thích %d, mong đợi %d" -#: plugins/sudoers/interfaces.c:118 +#: plugins/sudoers/interfaces.c:116 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/iolog.c:112 -#: plugins/sudoers/timestamp.c:200 plugins/sudoers/timestamp.c:244 +#: plugins/sudoers/timestamp.c:227 #, c-format msgid "%s exists but is not a directory (0%o)" -msgstr "%s tồn tại nhưng không phải là một thư mục (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:109 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:165 -#: plugins/sudoers/timestamp.c:221 plugins/sudoers/timestamp.c:271 +#: plugins/sudoers/iolog.c:127 plugins/sudoers/timestamp.c:221 +#: plugins/sudoers/timestamp.c:242 #, c-format msgid "unable to mkdir %s" msgstr "không thể tạo thư mục “%s”" #: plugins/sudoers/iolog.c:190 plugins/sudoers/sudoers.c:710 -#: plugins/sudoers/sudoreplay.c:340 plugins/sudoers/sudoreplay.c:811 -#: plugins/sudoers/sudoreplay.c:1005 plugins/sudoers/timestamp.c:155 -#: plugins/sudoers/visudo.c:824 plugins/sudoers/visudo_json.c:995 -#: plugins/sudoers/visudo_json.c:1003 +#: plugins/sudoers/sudoreplay.c:342 plugins/sudoers/sudoreplay.c:813 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/timestamp.c:345 +#: plugins/sudoers/visudo.c:823 plugins/sudoers/visudo_json.c:995 +#: plugins/sudoers/visudo_json.c:1001 #, c-format msgid "unable to open %s" msgstr "không mở được %s" -#: plugins/sudoers/iolog.c:223 plugins/sudoers/sudoers.c:713 -#: plugins/sudoers/sudoreplay.c:1112 +#: plugins/sudoers/iolog.c:229 plugins/sudoers/sudoers.c:713 +#: plugins/sudoers/sudoreplay.c:1117 #, c-format msgid "unable to read %s" msgstr "không thể đọc %s" -#: plugins/sudoers/iolog.c:247 plugins/sudoers/sudoreplay.c:580 -#: plugins/sudoers/timestamp.c:159 +#: plugins/sudoers/iolog.c:259 plugins/sudoers/sudoreplay.c:582 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to write to %s" msgstr "không thể ghi vào %s" -#: plugins/sudoers/iolog.c:307 plugins/sudoers/iolog.c:500 +#: plugins/sudoers/iolog.c:319 plugins/sudoers/iolog.c:512 #, c-format msgid "unable to create %s" msgstr "không thể tạo “%s”" -#: plugins/sudoers/ldap.c:403 +#: plugins/sudoers/ldap.c:406 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: cổng quá lớn" -#: plugins/sudoers/ldap.c:426 +#: plugins/sudoers/ldap.c:429 msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" msgstr "sudo_ldap_conf_add_ports: hết bộ nhớ để mở rộng hostbuf" -#: plugins/sudoers/ldap.c:458 +#: plugins/sudoers/ldap.c:461 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "không hỗ trợ kiểu “LDAP uri”: %s" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:492 msgid "unable to mix ldap and ldaps URIs" msgstr "không thể trộn ldap và ldaps URIs" -#: plugins/sudoers/ldap.c:493 plugins/sudoers/ldap.c:525 +#: plugins/sudoers/ldap.c:496 plugins/sudoers/ldap.c:528 msgid "starttls not supported when using ldaps" -msgstr "starttls chỉ được hỗ trợ khi dùng với ldaps" +msgstr "“starttls” chỉ được hỗ trợ khi dùng với “ldaps”" -#: plugins/sudoers/ldap.c:511 +#: plugins/sudoers/ldap.c:514 msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: hết bộ nhớ để xây dựng hostbuf" +msgstr "sudo_ldap_parse_uri: hết bộ nhớ để biên dịch “hostbuf”" -#: plugins/sudoers/ldap.c:592 +#: plugins/sudoers/ldap.c:595 #, 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:595 +#: plugins/sudoers/ldap.c:598 #, 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" -#: plugins/sudoers/ldap.c:1086 +#: plugins/sudoers/ldap.c:1089 msgid "unable to get GMT time" msgstr "không thể lấy giờ quốc tế (GMT)" -#: plugins/sudoers/ldap.c:1092 +#: plugins/sudoers/ldap.c:1095 msgid "unable to format timestamp" msgstr "không thể định dạng dấu-vết-thời-gian" -#: plugins/sudoers/ldap.c:1100 +#: plugins/sudoers/ldap.c:1103 msgid "unable to build time filter" msgstr "không thể xây dựng bộ lọc thời gian" -#: plugins/sudoers/ldap.c:1319 +#: plugins/sudoers/ldap.c:1322 msgid "sudo_ldap_build_pass1 allocation mismatch" msgstr "sudo_ldap_build_pass1 phân bổ không khớp" -#: plugins/sudoers/ldap.c:1424 +#: plugins/sudoers/ldap.c:1433 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1899 +#: plugins/sudoers/ldap.c:1909 #, c-format msgid "" "\n" @@ -826,7 +835,7 @@ msgstr "" "\n" "Vai trò LDAP: %s\n" -#: plugins/sudoers/ldap.c:1901 +#: plugins/sudoers/ldap.c:1911 #, c-format msgid "" "\n" @@ -835,27 +844,27 @@ msgstr "" "\n" "Vai trò LDAP: KHÔNG HIỂU\n" -#: plugins/sudoers/ldap.c:1948 +#: plugins/sudoers/ldap.c:1958 #, c-format msgid " Order: %s\n" -msgstr " Thứ tự: %s\n" +msgstr " Thứ tự: %s\n" -#: plugins/sudoers/ldap.c:1956 plugins/sudoers/parse.c:504 +#: plugins/sudoers/ldap.c:1966 plugins/sudoers/parse.c:504 #: plugins/sudoers/sssd.c:1295 #, c-format msgid " Commands:\n" -msgstr " Lệnh:\n" +msgstr " Lệnh:\n" -#: plugins/sudoers/ldap.c:2499 +#: plugins/sudoers/ldap.c:2509 #, c-format msgid "unable to initialize LDAP: %s" msgstr "không thể khởi tạo LDAP: %s" -#: plugins/sudoers/ldap.c:2541 +#: plugins/sudoers/ldap.c:2551 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:2774 +#: plugins/sudoers/ldap.c:2784 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "thuộc tính sudoOrder không hợp lệ: %s" @@ -878,57 +887,57 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (lệnh tiếp tục) %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:189 #, c-format msgid "unable to open log file: %s: %s" msgstr "không thể mở tập tin nhật ký: %s: %s" -#: plugins/sudoers/logging.c:193 +#: plugins/sudoers/logging.c:192 #, c-format msgid "unable to lock log file: %s: %s" msgstr "không thể khóa tập tin nhật ký: %s: %s" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:243 msgid "No user or host" msgstr "Không có tài khoản hay tên máy chủ" -#: plugins/sudoers/logging.c:247 +#: plugins/sudoers/logging.c:245 msgid "validation failure" msgstr "việc phê chuẩn thất bại" -#: plugins/sudoers/logging.c:254 +#: plugins/sudoers/logging.c:252 msgid "user NOT in sudoers" msgstr "tài khoản KHÔNG có trong sudoers" -#: plugins/sudoers/logging.c:256 +#: plugins/sudoers/logging.c:254 msgid "user NOT authorized on host" msgstr "tài khoản KHÔNG được cho phép sử dụng trên máy chủ" -#: plugins/sudoers/logging.c:258 +#: plugins/sudoers/logging.c:256 msgid "command not allowed" msgstr "lệnh không được phép" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:286 #, 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" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:289 #, 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" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:293 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Rất tiếc, tài khoảnr %s không được chạy lệnh sudo trên %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:296 #, c-format 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:335 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/logging.c:333 plugins/sudoers/sudoers.c:382 #: plugins/sudoers/sudoers.c:383 plugins/sudoers/sudoers.c:385 #: plugins/sudoers/sudoers.c:386 plugins/sudoers/sudoers.c:1017 #: plugins/sudoers/sudoers.c:1018 @@ -936,7 +945,7 @@ msgstr "Rất tiếc, tài khoản %s không được phép thi hành “%s%s%s msgid "%s: command not found" msgstr "%s: không tìm thấy lệnh" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:378 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:378 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -945,40 +954,40 @@ msgstr "" "đang bỏ qua “%s” được tìm thấy trong “.”\n" "Sử dụng “sudo ./%s” nếu đây là “%s” bạn muốn chạy." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:351 msgid "authentication failure" msgstr "xác thực gặp lỗi nghiêm trọng" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:377 msgid "a password is required" msgstr "bắt buộc phải có mật khẩu" -#: plugins/sudoers/logging.c:443 plugins/sudoers/logging.c:497 +#: plugins/sudoers/logging.c:441 plugins/sudoers/logging.c:495 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "đã sai mật khẩu %u lần" -#: plugins/sudoers/logging.c:582 +#: plugins/sudoers/logging.c:581 msgid "unable to fork" msgstr "không thể tạo tiến trình con" -#: plugins/sudoers/logging.c:589 plugins/sudoers/logging.c:645 +#: plugins/sudoers/logging.c:588 plugins/sudoers/logging.c:644 #, c-format msgid "unable to fork: %m" msgstr "không thể tạo tiến trình con: %m" -#: plugins/sudoers/logging.c:635 +#: plugins/sudoers/logging.c:634 #, c-format msgid "unable to open pipe: %m" msgstr "không thể mở ống dẫn lệnh: %m" -#: plugins/sudoers/logging.c:660 +#: plugins/sudoers/logging.c:659 #, c-format msgid "unable to dup stdin: %m" msgstr "không thể dup (nhân bản) stdin: %m" -#: plugins/sudoers/logging.c:695 +#: plugins/sudoers/logging.c:694 #, c-format msgid "unable to execute %s: %m" msgstr "không thể thực thi %s: %m" @@ -1048,7 +1057,7 @@ msgstr " Tùy chọn:" msgid "%s: %s" msgstr "%s: %s" -#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:765 +#: plugins/sudoers/policy.c:539 plugins/sudoers/visudo.c:764 #, c-format msgid "unable to execute %s" msgstr "không thể thực thi %s" @@ -1210,7 +1219,7 @@ msgstr "bạn không được phép sử dụng tùy chọn -C" #: plugins/sudoers/sudoers.c:314 #, c-format msgid "timestamp owner (%s): No such user" -msgstr "người sở hữu timestamp (%s): Không có người dùng nào như vậy" +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:328 msgid "no tty" @@ -1228,9 +1237,8 @@ msgstr "lệnh trong thư mục hiện hành" 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:725 plugins/sudoers/timestamp.c:216 -#: plugins/sudoers/timestamp.c:260 plugins/sudoers/timestamp.c:326 -#: plugins/sudoers/visudo.c:326 plugins/sudoers/visudo.c:591 +#: plugins/sudoers/sudoers.c:725 plugins/sudoers/visudo.c:326 +#: plugins/sudoers/visudo.c:590 #, c-format msgid "unable to stat %s" msgstr "không thể lấy trạng thái về %s" @@ -1240,17 +1248,17 @@ msgstr "không thể lấy trạng thái về %s" msgid "%s is not a regular file" msgstr "%s không phải tập tin thường" -#: plugins/sudoers/sudoers.c:731 toke.l:920 +#: plugins/sudoers/sudoers.c:731 plugins/sudoers/timestamp.c:283 toke.l:923 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s được sở hữu bởi uid %u, nên là %u" -#: plugins/sudoers/sudoers.c:735 toke.l:927 +#: plugins/sudoers/sudoers.c:735 toke.l:930 #, c-format msgid "%s is world writable" msgstr "%s ai ghi cũng được" -#: plugins/sudoers/sudoers.c:738 toke.l:932 +#: plugins/sudoers/sudoers.c:738 toke.l:935 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s được sở hữu bởi gid %u, nên là %u" @@ -1275,147 +1283,147 @@ msgstr "không thể phân giải địa chỉ của máy %s" msgid "unknown group: %s" msgstr "không nhận ra nhóm: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid filter option: %s" msgstr "tùy chọn lọc không hợp lệ: %s" -#: plugins/sudoers/sudoreplay.c:285 +#: plugins/sudoers/sudoreplay.c:287 #, c-format msgid "invalid max wait: %s" msgstr "thời gian chờ tối đa không hợp lệ: %s" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:293 #, c-format msgid "invalid speed factor: %s" msgstr "sai hệ số nhân tốc độ: %s" -#: plugins/sudoers/sudoreplay.c:294 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:296 plugins/sudoers/visudo.c:184 #, c-format msgid "%s version %s\n" msgstr "%s phiên bản %s\n" -#: plugins/sudoers/sudoreplay.c:326 +#: plugins/sudoers/sudoreplay.c:328 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/thời-gian: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:334 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/thời-gian: %s" -#: plugins/sudoers/sudoreplay.c:348 +#: plugins/sudoers/sudoreplay.c:350 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Đang chạy lại phiên sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:356 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Cảnh báo: thiết bị cuối quá nhỏ để có thể chạy nhật ký một cách đúng đắn.\n" -#: plugins/sudoers/sudoreplay.c:355 +#: plugins/sudoers/sudoreplay.c:357 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Định dạng của nhật ký là %d x %d, định dạng của thiết bị cuối là %d x %d." -#: plugins/sudoers/sudoreplay.c:410 +#: plugins/sudoers/sudoreplay.c:412 msgid "unable to set tty to raw mode" -msgstr "không thể đặt thiết bị tty chế độ raw (thô)" +msgstr "không thể đặt thiết bị tty chế độ thô (raw)" -#: plugins/sudoers/sudoreplay.c:441 +#: plugins/sudoers/sudoreplay.c:443 #, c-format msgid "invalid timing file line: %s" msgstr "sai dòng ghi thời gian trong tập tin: %s" -#: plugins/sudoers/sudoreplay.c:647 plugins/sudoers/sudoreplay.c:672 +#: plugins/sudoers/sudoreplay.c:649 plugins/sudoers/sudoreplay.c:674 #, c-format msgid "ambiguous expression \"%s\"" msgstr "biểu thức không rõ ràng “%s”" -#: plugins/sudoers/sudoreplay.c:694 +#: plugins/sudoers/sudoreplay.c:696 msgid "unmatched ')' in expression" msgstr "thiếu “)” trong biểu thức" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:700 #, c-format msgid "unknown search term \"%s\"" msgstr "không hiểu giới hạn tìm kiếm “%s”" -#: plugins/sudoers/sudoreplay.c:712 +#: plugins/sudoers/sudoreplay.c:714 #, c-format msgid "%s requires an argument" msgstr "%s yêu cầu một đối số" -#: plugins/sudoers/sudoreplay.c:716 plugins/sudoers/sudoreplay.c:1085 +#: plugins/sudoers/sudoreplay.c:718 plugins/sudoers/sudoreplay.c:1090 #, c-format msgid "invalid regular expression: %s" msgstr "biểu thức chính quy không hợp lệ: %s" -#: plugins/sudoers/sudoreplay.c:722 +#: plugins/sudoers/sudoreplay.c:724 #, c-format msgid "could not parse date \"%s\"" msgstr "không thể phân tích ngày tháng “%s”" -#: plugins/sudoers/sudoreplay.c:731 +#: plugins/sudoers/sudoreplay.c:733 msgid "unmatched '(' in expression" msgstr "thiếu “(” trong biểu thức" -#: plugins/sudoers/sudoreplay.c:733 +#: plugins/sudoers/sudoreplay.c:735 msgid "illegal trailing \"or\"" -msgstr "sai đuôi “or”" +msgstr "có “or” không hợp lệ đi sau" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:737 msgid "illegal trailing \"!\"" msgstr "có “!” không hợp lệ đi sau" -#: plugins/sudoers/sudoreplay.c:788 +#: plugins/sudoers/sudoreplay.c:790 #, c-format msgid "unknown search type %d" msgstr "không hiểu kiểu tìm kiếm “%d”" -#: plugins/sudoers/sudoreplay.c:825 +#: plugins/sudoers/sudoreplay.c:827 #, c-format msgid "%s: invalid log file" msgstr "%s: tập tin nhật ký không hợp lệ" -#: plugins/sudoers/sudoreplay.c:843 +#: plugins/sudoers/sudoreplay.c:845 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: thiếu trường dấu vết thời gian" -#: plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:852 #, c-format msgid "%s: time stamp %s: %s" -msgstr "%s: dấu thời gian “%s”: %s" +msgstr "%s: dấu vết thời gian “%s”: %s" -#: plugins/sudoers/sudoreplay.c:857 +#: plugins/sudoers/sudoreplay.c:859 #, c-format msgid "%s: user field is missing" msgstr "%s: thiếu trường tài khoản người dùng" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:867 #, c-format msgid "%s: runas user field is missing" msgstr "%s: thiếu trường “runas user” (chạy với tư cách tài khoản này)" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:875 #, c-format msgid "%s: runas group field is missing" msgstr "%s: thiếu trường “runas group” (chạy dưới danh nghĩa nhóm này)" -#: plugins/sudoers/sudoreplay.c:1225 +#: plugins/sudoers/sudoreplay.c:1230 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "cách dùng: %s [-h] [-d thư-mục] [-m số] [-s số] ID\n" -#: plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1233 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "cách dùng: %s [-h] [-d th.mục] -l [biểu thức tìm kiếm]\n" -#: plugins/sudoers/sudoreplay.c:1237 +#: plugins/sudoers/sudoreplay.c:1242 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1424,7 +1432,7 @@ msgstr "" "%s - chạy lại nhật ký phiên sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1244 msgid "" "\n" "Options:\n" @@ -1464,7 +1472,7 @@ msgid "" "Command denied" msgstr "" "\n" -"Lệnh bị từ chối" +"Lệnh bị cấm" #: plugins/sudoers/testsudoers.c:330 msgid "" @@ -1474,46 +1482,34 @@ msgstr "" "\n" "Lệnh không khớp" -#: plugins/sudoers/timestamp.c:133 +#: plugins/sudoers/timestamp.c:191 #, c-format -msgid "timestamp path too long: %s" -msgstr "đường dẫn timestamp quá dài: %s" +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:203 plugins/sudoers/timestamp.c:247 -#: plugins/sudoers/timestamp.c:290 +#: plugins/sudoers/timestamp.c:291 #, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s được sở hữu bởi uid %u, nên là %u" +msgid "%s is group writable" +msgstr "%s là người cùng nhóm được ghi" -#: plugins/sudoers/timestamp.c:208 plugins/sudoers/timestamp.c:252 +#: plugins/sudoers/timestamp.c:311 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s có thể được ghi bởi người không sở hữu nó (0%o), cần đặt chế độ 0700" +msgid "timestamp path too long: %s/%s" +msgstr "đường dẫn dấu vết thời gian quá dài: %s/%s" -#: plugins/sudoers/timestamp.c:284 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s đã sẵn có nhưng không phải là một tập tin bình thường (0%o)" +#: plugins/sudoers/timestamp.c:484 +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:296 +#: plugins/sudoers/timestamp.c:496 #, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s có thể được ghi bởi người không sở hữu nó (0%o), cần đặt chế độ 0600" - -#: plugins/sudoers/timestamp.c:351 -#, c-format -msgid "timestamp too far in the future: %20.20s" +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:405 -#, c-format -msgid "unable to remove %s, will reset to the Unix epoch" -msgstr "không thể gỡ bỏ %s, sẽ đặt lại thành thời điểm bắt đầu kiểu Unix" - -#: plugins/sudoers/timestamp.c:413 +#: plugins/sudoers/timestamp.c:596 plugins/sudoers/timestamp.c:618 #, c-format -msgid "unable to reset %s to the Unix epoch" -msgstr "không thể đặt lại %s thành thời điểm bắt đầu kiểu Unix" +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/toke_util.c:176 msgid "fill_args: buffer overflow" @@ -1524,7 +1520,7 @@ msgstr "fill_args: bộ đệm bị tràn" msgid "%s grammar version %d\n" msgstr "Ngữ pháp %s phiên bản %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:544 +#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:543 #, c-format msgid "press return to edit %s: " msgstr "bấm phím <Enter> để trở về chỉnh sửa %s:" @@ -1541,63 +1537,63 @@ msgstr "không thể lấy thống kê tập tin tạm (%s), %s không thay đ #: plugins/sudoers/visudo.c:435 #, c-format msgid "zero length temporary file (%s), %s unchanged" -msgstr "tập tin tạm (%s) có chiều dài bằng không, %s không thay đổi gì" +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:441 #, 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:464 +#: plugins/sudoers/visudo.c:463 #, c-format msgid "%s unchanged" msgstr "%s không thay đổi" -#: plugins/sudoers/visudo.c:489 +#: plugins/sudoers/visudo.c:488 #, 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:499 +#: plugins/sudoers/visudo.c:498 #, 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:535 +#: plugins/sudoers/visudo.c:534 #, 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:593 plugins/sudoers/visudo.c:602 +#: plugins/sudoers/visudo.c:592 plugins/sudoers/visudo.c:601 #, 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:597 plugins/sudoers/visudo.c:607 +#: plugins/sudoers/visudo.c:596 plugins/sudoers/visudo.c:606 #, 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:624 +#: plugins/sudoers/visudo.c:623 #, 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:638 +#: plugins/sudoers/visudo.c:637 #, 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:648 +#: plugins/sudoers/visudo.c:647 #, 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:710 +#: plugins/sudoers/visudo.c:709 msgid "What now? " msgstr "Vậy làm gì bây giờ? " -#: plugins/sudoers/visudo.c:724 +#: plugins/sudoers/visudo.c:723 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1609,87 +1605,87 @@ msgstr "" " (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:772 +#: plugins/sudoers/visudo.c:771 #, c-format msgid "unable to run %s" msgstr "không thể chạy %s" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:797 #, 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:805 +#: plugins/sudoers/visudo.c:804 #, 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:830 plugins/sudoers/visudo_json.c:1009 +#: plugins/sudoers/visudo.c:829 plugins/sudoers/visudo_json.c:1008 #, 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:846 plugins/sudoers/visudo_json.c:1018 +#: plugins/sudoers/visudo.c:845 plugins/sudoers/visudo_json.c:1017 #, 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:849 plugins/sudoers/visudo_json.c:1021 +#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1020 #, c-format msgid "parse error in %s\n" msgstr "lỗi cú pháp trong %s\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo.c:864 +#: plugins/sudoers/visudo.c:856 plugins/sudoers/visudo.c:863 #, c-format msgid "%s: parsed OK\n" msgstr "%s: vượt qua kiểm duyệt\n" -#: plugins/sudoers/visudo.c:910 +#: plugins/sudoers/visudo.c:909 #, c-format msgid "%s busy, try again later" msgstr "%s đang bận, hãy thử lại sau" -#: plugins/sudoers/visudo.c:954 +#: plugins/sudoers/visudo.c:953 #, 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:977 +#: plugins/sudoers/visudo.c:976 #, c-format msgid "unable to stat editor (%s)" msgstr "không thể lấy thống kê trình biên soạn (%s)" -#: plugins/sudoers/visudo.c:1025 +#: plugins/sudoers/visudo.c:1024 #, 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:1118 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Error: cycle in %s_Alias `%s'" -msgstr "Lỗi: bí danh bị quẩn trong %s_Alias “%s”" +msgstr "Lỗi: bí danh bị quẩn tròn trong %s_Alias “%s”" -#: plugins/sudoers/visudo.c:1119 +#: plugins/sudoers/visudo.c:1118 #, c-format msgid "Warning: cycle in %s_Alias `%s'" -msgstr "Cảnh báo: cycle (vòng tròn) trong %s_Alias “%s”" +msgstr "Cảnh báo: cycle (quẩn tròn) trong %s_Alias “%s”" -#: plugins/sudoers/visudo.c:1125 +#: plugins/sudoers/visudo.c:1124 #, c-format msgid "Error: %s_Alias `%s' referenced but not defined" msgstr "Lỗi: %s_Bí_danh “%s” được tham chiếu nhưng chưa được định nghĩa" -#: plugins/sudoers/visudo.c:1126 +#: plugins/sudoers/visudo.c:1125 #, c-format msgid "Warning: %s_Alias `%s' referenced but not defined" msgstr "Cảnh báo: %s_Bí_danh “%s” được tham chiếu nhưng chưa được định nghĩa" -#: plugins/sudoers/visudo.c:1268 +#: plugins/sudoers/visudo.c:1267 #, c-format msgid "%s: unused %s_Alias %s" msgstr "%s: không dùng %s_Bí_danh %s" -#: plugins/sudoers/visudo.c:1330 +#: plugins/sudoers/visudo.c:1329 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1698,7 +1694,7 @@ msgstr "" "%s - sửa tập tin sudoers một cách an toàn\n" "\n" -#: plugins/sudoers/visudo.c:1332 +#: plugins/sudoers/visudo.c:1331 msgid "" "\n" "Options:\n" @@ -1711,7 +1707,7 @@ msgid "" " -x, --export=file export sudoers in JSON format" msgstr "" "\n" -"Tùy chọn:\n" +"Các tùy chọn:\n" " -c, --check chế độ chỉ kiểm tra\n" " -f, --file=tệp chỉ định vị trí tập tin sudoers\n" " -h, --help hiển thị thông tin trợ giúp rồi thoát\n" @@ -1720,10 +1716,28 @@ msgstr "" " -V, --version hiển thị thông tin về phiên bản rồi thoát\n" " -x, --export=tệp xuất sudoers theo định dạng JSON" -#: toke.l:892 +#: toke.l:894 msgid "too many levels of includes" msgstr "quá nhiều cấp bao gồm (include)" +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "%s được sở hữu bởi uid %u, nên là %u" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s có thể được ghi bởi người không sở hữu nó (0%o), cần đặt chế độ 0700" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s đã sẵn có nhưng không phải là một tập tin bình thường (0%o)" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s có thể được ghi bởi người không sở hữu nó (0%o), cần đặt chế độ 0600" + +#~ msgid "unable to remove %s, will reset to the Unix epoch" +#~ msgstr "không thể gỡ bỏ %s, sẽ đặt lại thành thời điểm bắt đầu kiểu Unix" + +#~ msgid "unable to reset %s to the Unix epoch" +#~ msgstr "không thể đặt lại %s thành thời điểm bắt đầu kiểu Unix" + #~ msgid "value out of range" #~ msgstr "giá trị nằm ngoài phạm vi" diff --git a/plugins/sudoers/regress/iolog_path/check_iolog_path.c b/plugins/sudoers/regress/iolog_path/check_iolog_path.c index 2b0904473..2d2a8f1c3 100644 --- a/plugins/sudoers/regress/iolog_path/check_iolog_path.c +++ b/plugins/sudoers/regress/iolog_path/check_iolog_path.c @@ -74,6 +74,8 @@ do_check(char *dir_in, char *file_in, char *tdir_out, char *tfile_out) */ time(&now); timeptr = localtime(&now); + if (timeptr == NULL) + fatalx("localtime returned NULL"); strftime(dir_out, sizeof(dir_out), tdir_out, timeptr); strftime(file_out, sizeof(file_out), tfile_out, timeptr); diff --git a/plugins/sudoers/regress/parser/check_fill.c b/plugins/sudoers/regress/parser/check_fill.c index ce7c3ca4d..afe99f311 100644 --- a/plugins/sudoers/regress/parser/check_fill.c +++ b/plugins/sudoers/regress/parser/check_fill.c @@ -47,6 +47,7 @@ #include "parse.h" #include "toke.h" #include "sudo_plugin.h" +#include "sudo_util.h" #include <gram.h> __dso_public int main(int argc, char *argv[]); @@ -170,6 +171,8 @@ main(int argc, char *argv[]) { int ntests, errors = 0; + initprogname(argc > 0 ? argv[0] : "check_fill"); + errors += do_tests(check_fill, txt_data, sizeof(txt_data) / sizeof(txt_data[0])); errors += do_tests(check_fill_cmnd, cmd_data, sizeof(cmd_data) / sizeof(cmd_data[0])); errors += do_tests(check_fill_args, args_data, sizeof(args_data) / sizeof(args_data[0])); @@ -177,7 +180,7 @@ main(int argc, char *argv[]) ntests = sizeof(txt_data) / sizeof(txt_data[0]) + sizeof(cmd_data) / sizeof(cmd_data[0]) + sizeof(args_data) / sizeof(args_data[0]); - printf("check_fill: %d tests run, %d errors, %d%% success rate\n", + printf("%s: %d tests run, %d errors, %d%% success rate\n", getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); exit(errors); diff --git a/plugins/sudoers/set_perms.c b/plugins/sudoers/set_perms.c index 511cba273..ec2337069 100644 --- a/plugins/sudoers/set_perms.c +++ b/plugins/sudoers/set_perms.c @@ -891,7 +891,7 @@ set_perms(int perm) if (ostate->euid != ROOT_UID) { if (setreuid(-1, ROOT_UID)) { snprintf(errbuf, sizeof(errbuf), - "PERM_ROOT: setreuid(-1, %d)", PERM_ROOT); + "PERM_ROOT: setreuid(-1, %d)", ROOT_UID); goto bad; } } diff --git a/plugins/sudoers/sssd.c b/plugins/sudoers/sssd.c index a04bd91ab..6e960a841 100644 --- a/plugins/sudoers/sssd.c +++ b/plugins/sudoers/sssd.c @@ -175,7 +175,7 @@ sudo_sss_filter_result(struct sudo_sss_handle *handle, debug_decl(sudo_sss_filter_result, SUDO_DEBUG_SSSD) sudo_debug_printf(SUDO_DEBUG_DEBUG, "in_res=%p, count=%u, act=%s", - in_res, in_res->num_rules, + in_res, in_res ? in_res->num_rules : 0, act == _SUDO_SSS_FILTER_EXCLUDE ? "EXCLUDE" : "INCLUDE"); if (in_res == NULL) diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 08d901eec..79c1c76c2 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -693,11 +693,12 @@ open_sudoers(const char *sudoers, bool doedit, bool *keepopen) switch (sudo_secure_file(sudoers, sudoers_uid, sudoers_gid, &sb)) { case SUDO_PATH_SECURE: /* - * If we are expecting sudoers to be group readable but - * it is not, we must open the file as root, not uid 1. + * If we are expecting sudoers to be group readable by + * SUDOERS_GID but it is not, we must open the file as root, + * not uid 1. */ - if (sudoers_uid == ROOT_UID && (sudoers_mode & S_IRGRP)) { - if ((sb.st_mode & S_IRGRP) == 0) { + if (sudoers_uid == ROOT_UID && ISSET(sudoers_mode, S_IRGRP)) { + if (!ISSET(sb.st_mode, S_IRGRP) || sb.st_gid != SUDOERS_GID) { restore_perms(); set_perms(PERM_ROOT); } diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 59a1534f0..ebf4d8bb7 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1993-1996, 1998-2005, 2007-2013 + * Copyright (c) 1993-1996, 1998-2005, 2007-2014 * Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any @@ -29,6 +29,9 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#define DEFAULT_TEXT_DOMAIN "sudoers" +#include "gettext.h" /* must be included before missing.h */ + #include <pathnames.h> #include "missing.h" #include "fatal.h" @@ -42,9 +45,6 @@ #include "sudo_debug.h" #include "sudo_util.h" -#define DEFAULT_TEXT_DOMAIN "sudoers" -#include "gettext.h" - /* * Password db and supplementary group IDs with associated group names. */ diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index c867a120b..b3926d185 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -89,10 +89,11 @@ #include <pathnames.h> +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" -#include "gettext.h" #include "logging.h" #include "iolog.h" #include "queue.h" @@ -151,12 +152,13 @@ struct search_node { union { #ifdef HAVE_REGCOMP regex_t cmdre; +#else + char *pattern; #endif time_t tstamp; char *cwd; char *tty; char *user; - char *pattern; char *runas_group; char *runas_user; struct search_node_list expr; @@ -184,6 +186,7 @@ static struct option long_opts[] = { { NULL, no_argument, NULL, '\0' }, }; +/* XXX move to separate header? */ extern char *get_timestr(time_t, int); extern time_t get_date(char *); @@ -376,7 +379,7 @@ replay_session(const double max_wait, const char *decimal) unsigned int i, iovcnt = 0, iovmax = 0; struct sudo_event_base *evbase; struct iovec iovb, *iov = &iovb; - bool interactive = false; + bool interactive; struct write_closure wc; char buf[LINE_MAX]; sigaction_t sa; @@ -933,6 +936,7 @@ static int list_session(char *logfile, REGEX_T *re, const char *user, const char *tty) { char idbuf[7], *idstr, *cp; + const char *timestr; struct log_info *li; int rval = -1; debug_decl(list_session, SUDO_DEBUG_UTIL) @@ -961,8 +965,10 @@ list_session(char *logfile, REGEX_T *re, const char *user, const char *tty) idstr = cp; } /* XXX - print rows + cols? */ + timestr = get_timestr(li->tstamp, 1); printf("%s : %s : TTY=%s ; CWD=%s ; USER=%s ; ", - get_timestr(li->tstamp, 1), li->user, li->tty, li->cwd, li->runas_user); + timestr ? timestr : "invalid date", + li->user, li->tty, li->cwd, li->runas_user); if (li->runas_group) printf("GROUP=%s ; ", li->runas_group); printf("TSID=%s ; COMMAND=%s\n", idstr, li->cmd); @@ -1140,7 +1146,7 @@ check_input(int fd, int what, void *v) if (!paused) { /* Determine remaining timeout, if any. */ sudo_ev_get_timeleft(ev, &tv); - if (!timevalisset(&tv)) { + if (!sudo_timevalisset(&tv)) { /* No time left, event is done. */ debug_return; } diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 5732a6718..e4114192d 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -1,6 +1,5 @@ /* - * Copyright (c) 1993-1996,1998-2005, 2007-2013 - * Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2014 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -13,10 +12,6 @@ * 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. - * - * Sponsored in part by the Defense Advanced Research Projects - * Agency (DARPA) and Air Force Research Laboratory, Air Force - * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ #include <config.h> @@ -24,9 +19,6 @@ #include <sys/types.h> #include <sys/time.h> #include <sys/stat.h> -#ifndef __TANDEM -# include <sys/file.h> -#endif #include <stdio.h> #ifdef STDC_HEADERS # include <stdlib.h> @@ -48,381 +40,598 @@ #ifdef TIME_WITH_SYS_TIME # include <time.h> #endif +#ifndef HAVE_STRUCT_TIMESPEC +# include "compat/timespec.h" +#endif #include <errno.h> #include <fcntl.h> -#include <signal.h> #include <pwd.h> #include <grp.h> #include "sudoers.h" +#include "secure_path.h" #include "check.h" -static struct sudo_tty_info tty_info; -static char timestampdir[PATH_MAX]; -static char timestampfile[PATH_MAX]; +/* On Linux, CLOCK_MONOTONIC does not run while suspended. */ +#if defined(CLOCK_BOOTTIME) +# define SUDO_CLOCK_MONOTONIC CLOCK_BOOTTIME +#elif defined(CLOCK_MONOTONIC) +# define SUDO_CLOCK_MONOTONIC CLOCK_MONOTONIC +#else +# define SUDO_CLOCK_MONOTONIC CLOCK_REALTIME +#endif + +static char timestamp_file[PATH_MAX]; +static off_t timestamp_hint = (off_t)-1; +static struct timestamp_entry timestamp_key; /* - * Fills in timestampdir as well as timestampfile if using tty tickets. + * Returns true if entry matches key, else false. */ -int -build_timestamp(struct passwd *pw) +static bool +ts_match_record(struct timestamp_entry *key, struct timestamp_entry *entry) { - char *dirparent; - struct stat sb; - int len; - debug_decl(build_timestamp, SUDO_DEBUG_AUTH) + debug_decl(ts_match_record, SUDO_DEBUG_AUTH) - /* Stash the tty's device, session ID and ctime for ticket comparison. */ - if (def_tty_tickets) { - if (user_ttypath && stat(user_ttypath, &sb) == 0) { - tty_info.dev = sb.st_dev; - tty_info.ino = sb.st_ino; - tty_info.rdev = sb.st_rdev; - tty_info.uid = sb.st_uid; - tty_info.gid = sb.st_gid; - } - tty_info.sid = user_sid; + if (entry->version != key->version) + debug_return_bool(false); + if (!ISSET(key->flags, TS_ANYUID) && entry->auth_uid != key->auth_uid) + debug_return_bool(false); + if (entry->type != key->type) + debug_return_bool(false); + switch (entry->type) { + case TS_GLOBAL: + /* no ppid or tty to match */ + break; + case TS_PPID: + /* verify parent pid */ + if (entry->u.ppid != key->u.ppid) + debug_return_bool(false); + break; + case TS_TTY: + if (entry->u.ttydev != key->u.ttydev) + debug_return_bool(false); + break; + default: + /* unknown record type, ignore it */ + debug_return_bool(false); } + debug_return_bool(true); +} - dirparent = def_timestampdir; - timestampfile[0] = '\0'; - len = snprintf(timestampdir, sizeof(timestampdir), "%s/%s", dirparent, - user_name); - if (len <= 0 || (size_t)len >= sizeof(timestampdir)) - goto bad; +/* + * Searches the time stamp file descriptor for a record that matches key. + * On success, fills in entry with the matching record and returns true. + * On failure, returns false. + * + * Note that records are searched starting at the current file offset, + * which may not be the beginning of the file. + */ +static bool +ts_find_record(int fd, struct timestamp_entry *key, struct timestamp_entry *entry) +{ + struct timestamp_entry cur; + debug_decl(ts_find_record, SUDO_DEBUG_AUTH) /* - * Timestamp file may be a file in the directory or NUL to use - * the directory as the timestamp. + * Look for a matching record. + * We don't match on the sid or actual time stamp. */ - if (def_tty_tickets) { - char pidbuf[sizeof("pid") + (((sizeof(pid_t) * 8) + 2) / 3)]; - char *p; - - if (user_ttypath == NULL) { - /* No tty, use parent pid. */ - len = snprintf(pidbuf, sizeof(pidbuf), "pid%u", - (unsigned int)getppid()); - if (len <= 0 || (size_t)len >= sizeof(pidbuf)) - goto bad; - p = pidbuf; - } else if ((p = strrchr(user_tty, '/'))) { - p++; - } else { - p = user_tty; + while (read(fd, &cur, sizeof(cur)) == sizeof(cur)) { + if (cur.size != sizeof(cur)) { + /* wrong size, seek to next record */ + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "wrong sized record, got %hu, expected %zu", + cur.size, sizeof(cur)); + lseek(fd, (off_t)cur.size - (off_t)sizeof(cur), SEEK_CUR); + continue; + } + if (ts_match_record(key, &cur)) { + memcpy(entry, &cur, sizeof(struct timestamp_entry)); + debug_return_bool(true); } - if (def_targetpw) { - len = snprintf(timestampfile, sizeof(timestampfile), "%s/%s/%s:%s", - dirparent, user_name, p, runas_pw->pw_name); + } + debug_return_bool(false); +} + +/* + * Find matching record to update or append a new one. + * Returns true if the entry was written successfully, else false. + */ +static bool +ts_update_record(int fd, struct timestamp_entry *entry, off_t timestamp_hint) +{ + struct timestamp_entry cur; + ssize_t nwritten; + off_t old_eof = (off_t)-1; + debug_decl(ts_update_record, SUDO_DEBUG_AUTH) + + /* First try the hint if one is given. */ + if (timestamp_hint != (off_t)-1) { + if (lseek(fd, timestamp_hint, SEEK_SET) != -1) { + if (read(fd, &cur, sizeof(cur)) == sizeof(cur)) { + if (ts_match_record(entry, &cur)) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "found existing time stamp record using hint"); + goto found_it; + } + } + } + } + + /* Search for matching record. */ + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "searching for time stamp record"); + lseek(fd, (off_t)0, SEEK_SET); + if (ts_find_record(fd, entry, &cur)) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "found existing time stamp record"); +found_it: + /* back up over old record */ + lseek(fd, (off_t)0 - (off_t)cur.size, SEEK_CUR); + } else { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "appending new time stamp record"); + old_eof = lseek(fd, (off_t)0, SEEK_CUR); + } + + /* Overwrite existing record or append to end. */ + nwritten = write(fd, entry, sizeof(struct timestamp_entry)); + if ((size_t)nwritten == sizeof(struct timestamp_entry)) + debug_return_bool(true); + + log_warning(nwritten == -1 ? USE_ERRNO : 0, + N_("unable to write to %s"), timestamp_file); + + /* Truncate on partial write to be safe. */ + if (nwritten > 0 && old_eof != (off_t)-1) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "short write, truncating partial time stamp record"); + if (ftruncate(fd, old_eof) != 0) { + warning(U_("unable to truncate time stamp file to %lld bytes"), + (long long)old_eof); + } + } + + debug_return_bool(false); +} + +/* + * Create a directory and any missing parent directories with the + * specified mode. + * Returns true on success. + * 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) +{ + struct stat sb; + gid_t parent_gid = 0; + char *slash = path; + bool rval = false; + debug_decl(ts_mkdirs, SUDO_DEBUG_AUTH) + + while ((slash = strchr(slash + 1, '/')) != NULL) { + *slash = '\0'; + if (stat(path, &sb) != 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "mkdir %s, mode 0%o", path, parent_mode); + if (mkdir(path, parent_mode) != 0) { + if (!quiet) + warning(U_("unable to mkdir %s"), path); + goto done; + } + ignore_result(chown(path, (uid_t)-1, parent_gid)); + } else if (!S_ISDIR(sb.st_mode)) { + if (!quiet) { + warningx(U_("%s exists but is not a directory (0%o)"), + path, (unsigned int) sb.st_mode); + } + goto done; } else { - len = snprintf(timestampfile, sizeof(timestampfile), "%s/%s/%s", - dirparent, user_name, p); + /* Inherit gid of parent dir for ownership. */ + parent_gid = sb.st_gid; } - if (len <= 0 || (size_t)len >= sizeof(timestampfile)) - goto bad; - } else if (def_targetpw) { - len = snprintf(timestampfile, sizeof(timestampfile), "%s/%s/%s", - dirparent, user_name, runas_pw->pw_name); - if (len <= 0 || (size_t)len >= sizeof(timestampfile)) - goto bad; + *slash = '/'; + } + /* Create final path component. */ + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "mkdir %s, mode 0%o", path, mode); + if (mkdir(path, mode) != 0 && errno != EEXIST) { + if (!quiet) + warning(U_("unable to mkdir %s"), path); + goto done; + } + ignore_result(chown(path, owner, parent_gid)); + rval = true; +done: + debug_return_bool(rval); +} + +/* + * Check that path is owned by timestamp_uid and not writable by + * group or other. If path is missing and make_it is true, create + * the directory and its parent dirs. + * Returns true on success or false on failure, setting errno. + */ +static bool +ts_secure_dir(char *path, bool make_it, bool quiet) +{ + struct stat sb; + bool rval = false; + debug_decl(ts_secure_dir, SUDO_DEBUG_AUTH) + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "checking %s", path); + switch (sudo_secure_dir(path, timestamp_uid, -1, &sb)) { + case SUDO_PATH_SECURE: + rval = true; + break; + case SUDO_PATH_MISSING: + if (make_it && ts_mkdirs(path, timestamp_uid, 0700, 0711, quiet)) { + rval = true; + break; + } + errno = ENOENT; + break; + case SUDO_PATH_BAD_TYPE: + errno = ENOTDIR; + if (!quiet) + warning("%s", path); + break; + case SUDO_PATH_WRONG_OWNER: + if (!quiet) { + warningx(U_("%s is owned by uid %u, should be %u"), + path, (unsigned int) sb.st_uid, + (unsigned int) timestamp_uid); + } + errno = EACCES; + break; + case SUDO_PATH_GROUP_WRITABLE: + if (!quiet) + warningx(U_("%s is group writable"), path); + errno = EACCES; + break; + } + debug_return_bool(rval); +} + +/* + * Fills in the timestamp_file[] global variable. + * Returns the length of timestamp_file. + */ +int +build_timestamp(struct passwd *pw) +{ + int len; + debug_decl(build_timestamp, SUDO_DEBUG_AUTH) + + len = snprintf(timestamp_file, sizeof(timestamp_file), "%s/%s", + def_timestampdir, user_name); + if (len <= 0 || (size_t)len >= sizeof(timestamp_file)) { + log_fatal(0, N_("timestamp path too long: %s/%s"), + def_timestampdir, user_name); } - sudo_debug_printf(SUDO_DEBUG_INFO, "using timestamp file %s", timestampfile); debug_return_int(len); -bad: - log_fatal(0, N_("timestamp path too long: %s"), - *timestampfile ? timestampfile : timestampdir); - /* NOTREACHED */ - debug_return_int(-1); } /* * Update the time on the timestamp file/dir or create it if necessary. + * Returns true on success or false on failure. */ bool update_timestamp(struct passwd *pw) { + struct timestamp_entry entry; + bool rval = false; + int fd; debug_decl(update_timestamp, SUDO_DEBUG_AUTH) + /* Check/create parent directories as needed. */ + if (!ts_secure_dir(def_timestampdir, true, false)) + goto done; + + /* Fill in time stamp. */ + memcpy(&entry, ×tamp_key, sizeof(struct timestamp_entry)); + clock_gettime(SUDO_CLOCK_MONOTONIC, &entry.ts); + + /* Open time stamp file and lock it for exclusive access. */ if (timestamp_uid != 0) set_perms(PERM_TIMESTAMP); - if (*timestampfile) { - /* - * Store tty info in timestamp file - */ - int fd = open(timestampfile, O_WRONLY|O_CREAT, 0600); - if (fd == -1) - log_warning(USE_ERRNO, N_("unable to open %s"), timestampfile); - else { - lock_file(fd, SUDO_LOCK); - if (write(fd, &tty_info, sizeof(tty_info)) != sizeof(tty_info)) - log_warning(USE_ERRNO, N_("unable to write to %s"), timestampfile); - close(fd); - } - } else { - if (touch(-1, timestampdir, NULL) == -1) { - if (mkdir(timestampdir, 0700) == -1) { - log_warning(USE_ERRNO, N_("unable to mkdir %s"), - timestampdir); - } - } - } + fd = open(timestamp_file, O_RDWR|O_CREAT, 0600); if (timestamp_uid != 0) restore_perms(); - debug_return_bool(true); + if (fd == -1) { + log_warning(USE_ERRNO, N_("unable to open %s"), timestamp_file); + goto done; + } + + /* Update record or append a new one. */ + lock_file(fd, SUDO_LOCK); + ts_update_record(fd, &entry, timestamp_hint); + close(fd); + + rval = true; + +done: + debug_return_bool(rval); } /* * Check the timestamp file and directory and return their status. + * Returns one of TS_CURRENT, TS_OLD, TS_MISSING, TS_NOFILE, TS_ERROR. */ -static int -timestamp_status_internal(bool removing) +int +timestamp_status(struct passwd *pw) { - struct stat sb; - struct timeval boottime, mtime; - time_t now; - char *dirparent = def_timestampdir; + struct timestamp_entry entry; + struct timespec diff, timeout; int status = TS_ERROR; /* assume the worst */ - debug_decl(timestamp_status_internal, SUDO_DEBUG_AUTH) + struct stat sb; + int fd = -1; + debug_decl(timestamp_status, SUDO_DEBUG_AUTH) - if (timestamp_uid != 0) - set_perms(PERM_TIMESTAMP); + /* Reset time stamp offset hint. */ + timestamp_hint = (off_t)-1; + + /* Zero timeout means ignore time stamp files. */ + if (def_timestamp_timeout == 0) { + status = TS_OLD; /* XXX - could also be TS_MISSING */ + goto done; + } + + /* Ignore time stamp files in an insecure directory. */ + if (!ts_secure_dir(def_timestampdir, false, false)) { + if (errno != ENOENT) { + status = TS_ERROR; + goto done; + } + status = TS_MISSING; /* not insecure, just missing */ + } /* - * Sanity check dirparent and make it if it doesn't already exist. - * We start out assuming the worst (that the dir is not sane) and - * if it is ok upgrade the status to ``no timestamp file''. - * Note that we don't check the parent(s) of dirparent for - * sanity since the sudo dir is often just located in /tmp. + * Create a key used for matching entries in the time stamp file. + * The actual time stamp in the key is used below as the time "now". */ - if (lstat(dirparent, &sb) == 0) { - if (!S_ISDIR(sb.st_mode)) - log_warning(0, N_("%s exists but is not a directory (0%o)"), - dirparent, (unsigned int) sb.st_mode); - else if (sb.st_uid != timestamp_uid) - log_warning(0, N_("%s owned by uid %u, should be uid %u"), - dirparent, (unsigned int) sb.st_uid, - (unsigned int) timestamp_uid); - else if ((sb.st_mode & 0000022)) - log_warning(0, - N_("%s writable by non-owner (0%o), should be mode 0700"), - dirparent, (unsigned int) sb.st_mode); - else { - if ((sb.st_mode & 0000777) != 0700) - (void) chmod(dirparent, 0700); - status = TS_MISSING; - } - } else if (errno != ENOENT) { - log_warning(USE_ERRNO, N_("unable to stat %s"), dirparent); + memset(×tamp_key, 0, sizeof(timestamp_key)); + timestamp_key.version = TS_VERSION; + timestamp_key.size = sizeof(timestamp_key); + timestamp_key.type = TS_GLOBAL; /* may be overriden below */ + if (pw != NULL) { + timestamp_key.auth_uid = pw->pw_uid; } else { - /* No dirparent, try to make one. */ - if (!removing) { - if (mkdir(dirparent, S_IRWXU)) - log_warning(USE_ERRNO, N_("unable to mkdir %s"), - dirparent); - else - status = TS_MISSING; + timestamp_key.flags = TS_ANYUID; + } + timestamp_key.sid = user_sid; + if (def_timestampdir) { + if (user_ttypath != NULL && stat(user_ttypath, &sb) == 0) { + /* tty-based time stamp */ + timestamp_key.type = TS_TTY; + timestamp_key.u.ttydev = sb.st_rdev; + } else { + /* ppid-based time stamp */ + timestamp_key.type = TS_PPID; + timestamp_key.u.ppid = getppid(); } } - if (status == TS_ERROR) + clock_gettime(SUDO_CLOCK_MONOTONIC, ×tamp_key.ts); + + /* If the time stamp dir is missing there is nothing to do. */ + if (status == TS_MISSING) goto done; - /* - * Sanity check the user's ticket dir. We start by downgrading - * the status to TS_ERROR. If the ticket dir exists and is sane - * this will be upgraded to TS_OLD. If the dir does not exist, - * it will be upgraded to TS_MISSING. - */ - status = TS_ERROR; /* downgrade status again */ - if (lstat(timestampdir, &sb) == 0) { - if (!S_ISDIR(sb.st_mode)) { - if (S_ISREG(sb.st_mode)) { - /* convert from old style */ - if (unlink(timestampdir) == 0) - status = TS_MISSING; - } else - log_warning(0, N_("%s exists but is not a directory (0%o)"), - timestampdir, (unsigned int) sb.st_mode); - } else if (sb.st_uid != timestamp_uid) - log_warning(0, N_("%s owned by uid %u, should be uid %u"), - timestampdir, (unsigned int) sb.st_uid, - (unsigned int) timestamp_uid); - else if ((sb.st_mode & 0000022)) - log_warning(0, - N_("%s writable by non-owner (0%o), should be mode 0700"), - timestampdir, (unsigned int) sb.st_mode); - else { - if ((sb.st_mode & 0000777) != 0700) - (void) chmod(timestampdir, 0700); - status = TS_OLD; /* do date check later */ - } - } else if (errno != ENOENT) { - log_warning(USE_ERRNO, N_("unable to stat %s"), timestampdir); - } else + /* Open time stamp file and lock it for exclusive access. */ + if (timestamp_uid != 0) + set_perms(PERM_TIMESTAMP); + fd = open(timestamp_file, O_RDWR); + if (timestamp_uid != 0) + restore_perms(); + if (fd == -1) { status = TS_MISSING; + goto done; + } + lock_file(fd, SUDO_LOCK); - /* - * If there is no user ticket dir, AND we are in tty ticket mode, - * AND we are not just going to remove it, create the user ticket dir. - */ - if (status == TS_MISSING && *timestampfile && !removing) { - if (mkdir(timestampdir, S_IRWXU) == -1) { - status = TS_ERROR; - log_warning(USE_ERRNO, N_("unable to mkdir %s"), timestampdir); + /* Ignore and clear time stamp file if mtime predates boot time. */ + if (fstat(fd, &sb) == 0) { + struct timeval boottime, mtime; + + mtim_get(&sb, &mtime); + if (get_boottime(&boottime) && sudo_timevalcmp(&mtime, &boottime, <)) { + ignore_result(ftruncate(fd, (off_t)0)); + status = TS_MISSING; + goto done; } } - /* - * Sanity check the tty ticket file if it exists. - */ - if (*timestampfile && status != TS_ERROR) { - if (status != TS_MISSING) - status = TS_NOFILE; /* dir there, file missing */ - if (lstat(timestampfile, &sb) == 0) { - if (!S_ISREG(sb.st_mode)) { - status = TS_ERROR; - log_warning(0, N_("%s exists but is not a regular file (0%o)"), - timestampfile, (unsigned int) sb.st_mode); - } else { - /* If bad uid or file mode, complain and kill the bogus file. */ - if (sb.st_uid != timestamp_uid) { - log_warning(0, - N_("%s owned by uid %u, should be uid %u"), - timestampfile, (unsigned int) sb.st_uid, - (unsigned int) timestamp_uid); - (void) unlink(timestampfile); - } else if ((sb.st_mode & 0000022)) { - log_warning(0, - N_("%s writable by non-owner (0%o), should be mode 0600"), - timestampfile, (unsigned int) sb.st_mode); - (void) unlink(timestampfile); - } else { - /* If not mode 0600, fix it. */ - if ((sb.st_mode & 0000777) != 0600) - (void) chmod(timestampfile, 0600); - - /* - * Check for stored tty info. If the file is zero-sized - * it is an old-style timestamp with no tty info in it. - * If removing, we don't care about the contents. - * The actual mtime check is done later. - */ - if (removing) { - status = TS_OLD; - } else if (sb.st_size != 0) { - struct sudo_tty_info info; - int fd = open(timestampfile, O_RDONLY, 0644); - if (fd != -1) { - if (read(fd, &info, sizeof(info)) == sizeof(info) && - memcmp(&info, &tty_info, sizeof(info)) == 0) { - status = TS_OLD; - } - close(fd); - } - } - } - } - } else if (errno != ENOENT) { - log_warning(USE_ERRNO, N_("unable to stat %s"), timestampfile); - status = TS_ERROR; - } + /* Read existing record, if any. */ + if (!ts_find_record(fd, ×tamp_key, &entry)) { + status = TS_MISSING; + goto done; } - /* - * If the file/dir exists and we are not removing it, check its mtime. - */ - if (status == TS_OLD && !removing) { - mtim_get(&sb, &mtime); - if (timevalisset(&mtime)) { - /* Negative timeouts only expire manually (sudo -k). */ - if (def_timestamp_timeout < 0) { - status = TS_CURRENT; - } else { - time(&now); - if (def_timestamp_timeout && - now - mtime.tv_sec < 60 * def_timestamp_timeout) { - /* - * Check for bogus time on the stampfile. The clock may - * have been set back or user could be trying to spoof us. - */ - if (mtime.tv_sec > now + 60 * def_timestamp_timeout * 2) { - time_t tv_sec = (time_t)mtime.tv_sec; - log_warning(0, - N_("timestamp too far in the future: %20.20s"), - 4 + ctime(&tv_sec)); - if (*timestampfile) - (void) unlink(timestampfile); - else - (void) rmdir(timestampdir); - status = TS_MISSING; - } else if (get_boottime(&boottime) && - timevalcmp(&mtime, &boottime, <)) { - status = TS_OLD; - } else { - status = TS_CURRENT; - } - } - } + /* Set record position hint for use by update_timestamp() */ + timestamp_hint = lseek(fd, (off_t)0, SEEK_CUR); + if (timestamp_hint != (off_t)-1) + timestamp_hint -= entry.size; + + if (ISSET(entry.flags, TS_DISABLED)) { + status = TS_OLD; /* disabled via sudo -k */ + goto done; + } + + if (entry.type != TS_GLOBAL && entry.sid != timestamp_key.sid) { + status = TS_OLD; /* belongs to different session */ + goto done; + } + + /* Negative timeouts only expire manually (sudo -k). */ + if (def_timestamp_timeout < 0) { + status = TS_CURRENT; + goto done; + } + + /* Compare stored time stamp with current time. */ + sudo_timespecsub(×tamp_key.ts, &entry.ts, &diff); + timeout.tv_sec = 60 * def_timestamp_timeout; + timeout.tv_nsec = ((60.0 * def_timestamp_timeout) - (double)timeout.tv_sec) + * 1000000000.0; + if (sudo_timespeccmp(&diff, &timeout, <)) { + status = TS_CURRENT; +#ifdef CLOCK_MONOTONIC + /* A monotonic clock should never run backwards. */ + if (diff.tv_sec < 0) { + log_warning(0, N_("ignoring time stamp from the future")); + status = TS_OLD; + SET(entry.flags, TS_DISABLED); + ts_update_record(fd, &entry, timestamp_hint); + } +#else + /* Check for bogus (future) time in the stampfile. */ + sudo_timespecsub(&entry.ts, ×tamp_key.ts, &diff); + timeout.tv_sec *= 2; + if (sudo_timespeccmp(&diff, &timeout, >)) { + time_t tv_sec = (time_t)entry.ts.tv_sec; + log_warning(0, + N_("time stamp too far in the future: %20.20s"), + 4 + ctime(&tv_sec)); + status = TS_OLD; + SET(entry.flags, TS_DISABLED); + ts_update_record(fd, &entry, timestamp_hint); } +#endif /* CLOCK_MONOTONIC */ + } else { + status = TS_OLD; } done: - if (timestamp_uid != 0) - restore_perms(); + if (fd != -1) + close(fd); debug_return_int(status); } -int -timestamp_status(struct passwd *pw) -{ - return timestamp_status_internal(false); -} - /* - * Remove the timestamp ticket file/dir. + * Remove the timestamp entry or file if unlink_it is set. */ void -remove_timestamp(bool remove) +remove_timestamp(bool unlink_it) { - struct timeval tv; - char *path; - int status; + struct timestamp_entry entry; + int fd = -1; debug_decl(remove_timestamp, SUDO_DEBUG_AUTH) if (build_timestamp(NULL) == -1) debug_return; - status = timestamp_status_internal(true); - if (status != TS_MISSING && status != TS_ERROR) { - path = *timestampfile ? timestampfile : timestampdir; - if (remove) { - if (*timestampfile) - status = unlink(timestampfile); - else - status = rmdir(timestampdir); - if (status == -1 && errno != ENOENT) { - log_warning(0, - N_("unable to remove %s, will reset to the Unix epoch"), - path); - remove = false; - } - } - if (!remove) { - timevalclear(&tv); - if (touch(-1, path, &tv) == -1 && errno != ENOENT) - fatal(U_("unable to reset %s to the Unix epoch"), path); + /* For "sudo -K" simply unlink the time stamp file. */ + if (unlink_it) { + (void) unlink(timestamp_file); + debug_return; + } + + /* + * Create a key used for matching entries in the time stamp file. + */ + memset(×tamp_key, 0, sizeof(timestamp_key)); + timestamp_key.version = TS_VERSION; + timestamp_key.size = sizeof(timestamp_key); + timestamp_key.type = TS_GLOBAL; /* may be overriden below */ + timestamp_key.flags = TS_ANYUID; + if (def_timestampdir) { + struct stat sb; + if (user_ttypath != NULL && stat(user_ttypath, &sb) == 0) { + /* tty-based time stamp */ + timestamp_key.type = TS_TTY; + timestamp_key.u.ttydev = sb.st_rdev; + } else { + /* ppid-based time stamp */ + timestamp_key.type = TS_PPID; + timestamp_key.u.ppid = getppid(); } } + /* Open time stamp file and lock it for exclusive access. */ + if (timestamp_uid != 0) + set_perms(PERM_TIMESTAMP); + fd = open(timestamp_file, O_RDWR); + if (timestamp_uid != 0) + restore_perms(); + if (fd == -1) + goto done; + lock_file(fd, SUDO_LOCK); + + /* + * Find matching entries and invalidate them. + */ + while (ts_find_record(fd, ×tamp_key, &entry)) { + /* Set record position hint for use by update_timestamp() */ + timestamp_hint = lseek(fd, (off_t)0, SEEK_CUR); + if (timestamp_hint != (off_t)-1) + timestamp_hint -= (off_t)entry.size; + /* Disable the entry. */ + SET(entry.flags, TS_DISABLED); + ts_update_record(fd, &entry, timestamp_hint); + } + close(fd); + +done: debug_return; } /* - * Lecture status is currently implied by the timestamp status but - * may be stored separately in a future release. + * Returns true if the user has already been lectured. + */ +bool +already_lectured(int unused) +{ + char status_file[PATH_MAX]; + struct stat sb; + int len; + debug_decl(already_lectured, SUDO_DEBUG_AUTH) + + if (ts_secure_dir(def_lecture_status_dir, false, true)) { + len = snprintf(status_file, sizeof(status_file), "%s/%s", + def_lecture_status_dir, user_name); + if (len <= 0 || (size_t)len >= sizeof(status_file)) { + log_fatal(0, N_("lecture status path too long: %s/%s"), + def_lecture_status_dir, user_name); + } + debug_return_bool(stat(status_file, &sb) == 0); + } + debug_return_bool(false); +} + +/* + * Create the lecture status file. + * Returns true on success or false on failure. */ bool set_lectured(void) { - return true; + char lecture_status[PATH_MAX]; + int len, fd = -1; + debug_decl(set_lectured, SUDO_DEBUG_AUTH) + + len = snprintf(lecture_status, sizeof(lecture_status), "%s/%s", + def_lecture_status_dir, user_name); + if (len <= 0 || (size_t)len >= sizeof(lecture_status)) { + log_fatal(0, N_("lecture status path too long: %s/%s"), + def_lecture_status_dir, user_name); + } + + /* Sanity check lecture dir and create if missing. */ + if (!ts_secure_dir(def_lecture_status_dir, true, false)) + goto done; + + /* Create lecture file. */ + if (timestamp_uid != 0) + set_perms(PERM_TIMESTAMP); + fd = open(lecture_status, O_WRONLY|O_CREAT|O_TRUNC, 0600); + if (timestamp_uid != 0) + restore_perms(); + if (fd != -1) + close(fd); + +done: + debug_return_bool(fd != -1 ? true : false); } diff --git a/plugins/sudoers/timestr.c b/plugins/sudoers/timestr.c index 9b89a1da8..ef925312b 100644 --- a/plugins/sudoers/timestr.c +++ b/plugins/sudoers/timestr.c @@ -44,21 +44,24 @@ get_timestr(time_t tstamp, int log_year) static char buf[128]; struct tm *timeptr; - timeptr = localtime(&tstamp); - - /* strftime() does not guarantee to NUL-terminate so we must check. */ - buf[sizeof(buf) - 1] = '\0'; - if (strftime(buf, sizeof(buf), log_year ? "%h %e %T %Y" : "%h %e %T", - timeptr) != 0 && buf[sizeof(buf) - 1] == '\0') - return buf; + if ((timeptr = localtime(&tstamp)) != NULL) { + /* strftime() does not guarantee to NUL-terminate so we must check. */ + buf[sizeof(buf) - 1] = '\0'; + if (strftime(buf, sizeof(buf), log_year ? "%h %e %T %Y" : "%h %e %T", + timeptr) != 0 && buf[sizeof(buf) - 1] == '\0') + return buf; + } #endif /* HAVE_STRFTIME */ - s = ctime(&tstamp) + 4; /* skip day of the week */ - if (log_year) - s[20] = '\0'; /* avoid the newline */ - else - s[15] = '\0'; /* don't care about year */ + 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; } diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index e31badf10..074e54a99 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -148,7 +148,7 @@ extern FILE *yyin, *yyout; /* Undo effects of setting up yytext. */ \ *yy_cp = yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ - yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ + yy_cp = yy_bp + n - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) @@ -4147,18 +4147,21 @@ _push_include(char *path, bool isdir) /* push current state onto stack */ if (idepth >= istacksize) { + struct include_stack *new_istack; + if (idepth > MAX_SUDOERS_DEPTH) { sudoerserror(N_("too many levels of includes")); debug_return_bool(false); } istacksize += SUDOERS_STACK_INCREMENT; - istack = (struct include_stack *) realloc(istack, + new_istack = (struct include_stack *) realloc(istack, sizeof(*istack) * istacksize); - if (istack == NULL) { + if (new_istack == NULL) { warning(NULL); sudoerserror(NULL); debug_return_bool(false); } + istack = new_istack; } SLIST_INIT(&istack[idepth].more); if (isdir) { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index aa459d905..438bb12a7 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -888,18 +888,21 @@ _push_include(char *path, bool isdir) /* push current state onto stack */ if (idepth >= istacksize) { + struct include_stack *new_istack; + if (idepth > MAX_SUDOERS_DEPTH) { sudoerserror(N_("too many levels of includes")); debug_return_bool(false); } istacksize += SUDOERS_STACK_INCREMENT; - istack = (struct include_stack *) realloc(istack, + new_istack = (struct include_stack *) realloc(istack, sizeof(*istack) * istacksize); - if (istack == NULL) { + if (new_istack == NULL) { warning(NULL); sudoerserror(NULL); debug_return_bool(false); } + istack = new_istack; } SLIST_INIT(&istack[idepth].more); if (isdir) { diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 841322bf3..79d8df360 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -79,7 +79,6 @@ #include "sudoers.h" #include "parse.h" #include "redblack.h" -#include "gettext.h" #include "sudoers_version.h" #include "sudo_conf.h" #include <gram.h> @@ -442,16 +441,15 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno) goto done; } - /* Set modified bit if use changed the file. */ + /* Set modified bit if the user changed the file. */ modified = true; mtim_get(&sb, &tv); - if (orig_size == sb.st_size && timevalcmp(&orig_mtim, &tv, ==)) { + if (orig_size == sb.st_size && sudo_timevalcmp(&orig_mtim, &tv, ==)) { /* * If mtime and size match but the user spent no measurable * time in the editor we can't tell if the file was changed. */ - timevalsub(&tv1, &tv2); - if (timevalisset(&tv2)) + if (sudo_timevalcmp(&tv1, &tv2, !=)) modified = false; } diff --git a/plugins/sudoers/visudo_json.c b/plugins/sudoers/visudo_json.c index 9ebfd51e4..432d5a58d 100644 --- a/plugins/sudoers/visudo_json.c +++ b/plugins/sudoers/visudo_json.c @@ -40,7 +40,6 @@ #include "sudoers.h" #include "parse.h" -#include "gettext.h" #include <gram.h> /* @@ -230,21 +229,41 @@ printstr_json(FILE *fp, const char *pre, const char *str, const char *post, } /* - * Print struct sudo_command in JSON format, with specified indentation. + * Print sudo command member in JSON format, with specified indentation. * If last_one is false, a comma will be printed before the newline * that closes the object. */ static void -print_command_json(FILE *fp, struct sudo_command *c, int indent, bool last_one) +print_command_json(FILE *fp, struct member *m, int indent, bool last_one) { + struct sudo_command *c = (struct sudo_command *)m->name; struct json_value value; const char *digest_name; debug_decl(print_command_json, SUDO_DEBUG_UTIL) printstr_json(fp, "{", NULL, NULL, indent); - if (c->digest != NULL) { + if (m->negated || c->digest != NULL) { putc('\n', fp); indent += 4; + } else { + putc(' ', fp); + indent = 0; + } + + /* Print command with optional command line args. */ + if (c->args != NULL) { + printstr_json(fp, "\"", "command", "\": ", indent); + printstr_json(fp, "\"", c->cmnd, " ", 0); + printstr_json(fp, NULL, c->args, "\"", 0); + } else { + value.type = JSON_STRING; + value.u.string = c->cmnd; + print_pair_json(fp, NULL, "command", &value, NULL, indent); + } + + /* Optional digest. */ + if (c->digest != NULL) { + fputs(",\n", fp); switch (c->digest->digest_type) { case SUDO_DIGEST_SHA224: digest_name = "sha224"; @@ -264,21 +283,18 @@ print_command_json(FILE *fp, struct sudo_command *c, int indent, bool last_one) } value.type = JSON_STRING; value.u.string = c->digest->digest_str; - print_pair_json(fp, NULL, digest_name, &value, ",\n", indent); - } else { - putc(' ', fp); - indent = 0; + print_pair_json(fp, NULL, digest_name, &value, NULL, indent); } - if (c->args != NULL) { - printstr_json(fp, "\"", "command", "\": ", indent); - printstr_json(fp, "\"", c->cmnd, " ", 0); - printstr_json(fp, NULL, c->args, "\"", 0); - } else { - value.type = JSON_STRING; - value.u.string = c->cmnd; - print_pair_json(fp, NULL, "command", &value, NULL, indent); + + /* Command may be negated. */ + if (m->negated) { + fputs(",\n", fp); + value.type = JSON_BOOL; + value.u.boolean = true; + print_pair_json(fp, NULL, "negated", &value, NULL, indent); } - if (c->digest != NULL) { + + if (indent != 0) { indent -= 4; putc('\n', fp); print_indent(fp, indent); @@ -392,7 +408,7 @@ print_member_json(FILE *fp, struct member *m, enum word_type word_type, typestr = "networkaddr"; break; case COMMAND: - print_command_json(fp, (struct sudo_command *)m->name, indent, last_one); + print_command_json(fp, m, indent, last_one); debug_return; case WORD: switch (word_type) { @@ -446,7 +462,21 @@ print_member_json(FILE *fp, struct member *m, enum word_type word_type, default: fatalx("unexpected member type %d", m->type); } - print_pair_json(fp, "{ ", typestr, &value, " }", indent); + + if (m->negated) { + print_indent(fp, indent); + fputs("{\n", fp); + indent += 4; + print_pair_json(fp, NULL, typestr, &value, ",\n", indent); + value.type = JSON_BOOL; + value.u.boolean = true; + print_pair_json(fp, NULL, "negated", &value, "\n", indent); + indent -= 4; + print_indent(fp, indent); + putc('}', fp); + } else { + print_pair_json(fp, "{ ", typestr, &value, " }", indent); + } if (!last_one) putc(',', fp); putc('\n', fp); @@ -604,6 +634,7 @@ print_defaults_json(FILE *fp, int indent, bool need_comma) debug_return_bool(need_comma); fprintf(fp, "%s\n%*s\"Defaults\": [\n", need_comma ? "," : "", indent, ""); + indent += 4; TAILQ_FOREACH_SAFE(def, &defaults, entries, next) { type = get_defaults_type(def); @@ -614,7 +645,6 @@ print_defaults_json(FILE *fp, int indent, bool need_comma) } /* Found it, print object container and binding (if any). */ - indent += 4; fprintf(fp, "%*s{\n", indent, ""); indent += 4; print_binding_json(fp, def->binding, def->type, indent); @@ -780,7 +810,7 @@ print_cmndspec_json(FILE *fp, struct cmndspec *cs, struct cmndspec **nextp, if (cs->tags.nopasswd != UNSPEC || cs->tags.noexec != UNSPEC || cs->tags.setenv != UNSPEC || cs->tags.log_input != UNSPEC || cs->tags.log_output != UNSPEC) { - fprintf(fp, "%*s\"Options\": {\n", indent, ""); + fprintf(fp, "%*s\"Options\": [\n", indent, ""); indent += 4; if (cs->tags.nopasswd != UNSPEC) { value.type = JSON_BOOL; @@ -788,39 +818,39 @@ print_cmndspec_json(FILE *fp, struct cmndspec *cs, struct cmndspec **nextp, last_one = cs->tags.noexec == UNSPEC && cs->tags.setenv == UNSPEC && cs->tags.log_input == UNSPEC && cs->tags.log_output == UNSPEC; - print_pair_json(fp, NULL, "authenticate", &value, - last_one ? "\n" : ",\n", indent); + print_pair_json(fp, "{ ", "authenticate", &value, + last_one ? " }\n" : " },\n", indent); } if (cs->tags.noexec != UNSPEC) { value.type = JSON_BOOL; value.u.boolean = cs->tags.noexec; last_one = cs->tags.setenv == UNSPEC && cs->tags.log_input == UNSPEC && cs->tags.log_output == UNSPEC; - print_pair_json(fp, NULL, "noexec", &value, - last_one ? "\n" : ",\n", indent); + print_pair_json(fp, "{ ", "noexec", &value, + last_one ? " }\n" : " },\n", indent); } if (cs->tags.setenv != UNSPEC) { value.type = JSON_BOOL; value.u.boolean = cs->tags.setenv; last_one = cs->tags.log_input == UNSPEC && cs->tags.log_output == UNSPEC; - print_pair_json(fp, NULL, "setenv", &value, - last_one ? "\n" : ",\n", indent); + print_pair_json(fp, "{ ", "setenv", &value, + last_one ? " }\n" : " },\n", indent); } if (cs->tags.log_input != UNSPEC) { value.type = JSON_BOOL; value.u.boolean = cs->tags.log_input; last_one = cs->tags.log_output == UNSPEC; - print_pair_json(fp, NULL, "log_input", &value, - last_one ? "\n" : ",\n", indent); + print_pair_json(fp, "{ ", "log_input", &value, + last_one ? " }\n" : " },\n", indent); } if (cs->tags.log_output != UNSPEC) { value.type = JSON_BOOL; value.u.boolean = cs->tags.log_output; - print_pair_json(fp, NULL, "log_output", &value, "\n", indent); + print_pair_json(fp, "{ ", "log_output", &value, " }\n", indent); } indent -= 4; - fprintf(fp, "%*s},\n", indent, ""); + fprintf(fp, "%*s],\n", indent, ""); } #ifdef HAVE_SELINUX @@ -984,7 +1014,7 @@ export_sudoers(const char *sudoers_path, const char *export_path, { bool ok = false, need_comma = false; const int indent = 4; - FILE *export_fp; + FILE *export_fp = stdout; debug_decl(export_sudoers, SUDO_DEBUG_UTIL) if (strcmp(sudoers_path, "-") == 0) { @@ -995,13 +1025,12 @@ export_sudoers(const char *sudoers_path, const char *export_path, warning(U_("unable to open %s"), sudoers_path); goto done; } - if (strcmp(export_path, "-") == 0) { - export_fp = stdout; - export_path = "stdout"; - } else if ((export_fp = fopen(export_path, "w")) == NULL) { - if (!quiet) - warning(U_("unable to open %s"), export_path); - goto done; + if (strcmp(export_path, "-") != 0) { + if ((export_fp = fopen(export_path, "w")) == NULL) { + if (!quiet) + warning(U_("unable to open %s"), export_path); + goto done; + } } init_parser(sudoers_path, quiet); if (sudoersparse() && !parse_error) { @@ -1037,8 +1066,9 @@ export_sudoers(const char *sudoers_path, const char *export_path, /* Close JSON output. */ fputs("\n}\n", export_fp); - fclose(export_fp); done: + if (export_fp != stdout) + fclose(export_fp); debug_return_bool(ok); } diff --git a/plugins/system_group/Makefile.in b/plugins/system_group/Makefile.in index 0ab968c4d..8b8caa7fd 100644 --- a/plugins/system_group/Makefile.in +++ b/plugins/system_group/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -55,6 +55,9 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -126,6 +129,9 @@ install-plugin: install-dirs system_group.la uninstall: -rm -f $(DESTDIR)$(plugindir)/system_group.so +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + check: clean: diff --git a/src/Makefile.in b/src/Makefile.in index d418971a6..4e0019399 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -55,6 +55,9 @@ PIE_LDFLAGS = @PIE_LDFLAGS@ SSP_CFLAGS = @SSP_CFLAGS@ SSP_LDFLAGS = @SSP_LDFLAGS@ +# cppcheck options, usually set in the top-level Makefile +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -76,6 +79,11 @@ install_gid = 0 shlib_ext = @SHLIB_EXT@ shlib_mode = @SHLIB_MODE@ +# Optional init script and rc.d link +INIT_DIR=@INIT_DIR@ +INIT_SCRIPT=@INIT_SCRIPT@ +RC_LINK=@RC_LINK@ + TEST_PROGS = check_ttyname TEST_LIBS = @LIBS@ @LIBINTL@ $(LT_LIBS) TEST_LDFLAGS = @LDFLAGS@ @@ -118,8 +126,8 @@ Makefile: $(srcdir)/Makefile.in .c.lo: $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< -sudo: $(OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) +sudo: $(OBJS) $(LT_LIBS) @STATIC_SUDOERS@ + $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @STATIC_SUDOERS@ libsudo_noexec.la: sudo_noexec.lo $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) -o $@ sudo_noexec.lo -avoid-version -rpath $(noexecdir) @@ -132,12 +140,21 @@ check_ttyname: $(CHECK_TTYNAME_OBJS) $(top_builddir)/common/libsudo_util.la $(LI pre-install: -install: install-binaries @INSTALL_NOEXEC@ +install: install-binaries install-rc @INSTALL_NOEXEC@ install-dirs: $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir) \ $(DESTDIR)$(libexecdir)/sudo $(DESTDIR)$(noexecdir) +install-rc: + @if [ -n "$(INIT_SCRIPT)" ]; then \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(INIT_DIR) \ + `echo $(DESTDIR)$(RC_LINK)|sed 's,/[^/]*$$,,'`; \ + $(INSTALL) -O $(install_uid) -G $(install_gid) -m 0755 $(top_srcdir)/init.d/$(INIT_SCRIPT) $(DESTDIR)$(INIT_DIR)/sudo; \ + rm -f $(DESTDIR)$(RC_LINK); \ + ln -s $(INIT_DIR)/sudo $(DESTDIR)$(RC_LINK); \ + fi + install-binaries: install-dirs $(PROGS) $(INSTALL) -b~ -O $(install_uid) -G $(install_gid) -m 04755 sudo $(DESTDIR)$(bindir)/sudo rm -f $(DESTDIR)$(bindir)/sudoedit @@ -159,6 +176,12 @@ uninstall: -rm -f $(DESTDIR)$(bindir)/sudo $(DESTDIR)$(bindir)/sudoedit \ $(DESTDIR)$(libexecdir)/sudo/sesh \ $(DESTDIR)$(noexecdir)/$(noexecfile) + @if [ -n "$(INIT_SCRIPT)" ]; then \ + rm -f $(DESTDIR)$(RC_LINK) $(DESTDIR)$(INIT_DIR)/sudo; \ + fi + +cppcheck: + cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I. -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c check: $(TEST_PROGS) ./check_ttyname @@ -245,8 +268,9 @@ locale_stub.o: $(srcdir)/locale_stub.c $(incdir)/fatal.h $(incdir)/gettext.h \ $(incdir)/missing.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/locale_stub.c net_ifs.o: $(srcdir)/net_ifs.c $(incdir)/alloc.h $(incdir)/fatal.h \ - $(incdir)/gettext.h $(incdir)/missing.h $(incdir)/sudo_debug.h \ - $(top_builddir)/config.h + $(incdir)/gettext.h $(incdir)/missing.h $(incdir)/queue.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(top_builddir)/config.h $(top_srcdir)/compat/stdbool.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/net_ifs.c openbsd.o: $(srcdir)/openbsd.c $(incdir)/alloc.h $(incdir)/fatal.h \ $(incdir)/fileops.h $(incdir)/gettext.h $(incdir)/missing.h \ diff --git a/src/env_hooks.c b/src/env_hooks.c index 487cc5a9a..06010782e 100644 --- a/src/env_hooks.c +++ b/src/env_hooks.c @@ -76,6 +76,8 @@ getenv_unhooked(const char *name) return rpl_getenv(name); } +__dso_public char *getenv(const char *); + char * getenv(const char *name) { diff --git a/src/exec_common.c b/src/exec_common.c index 83dfcd23b..1a54dd9c3 100644 --- a/src/exec_common.c +++ b/src/exec_common.c @@ -138,7 +138,7 @@ disable_execute(char *const envp[]) * ala execvp(3) if we get ENOEXEC. */ int -sudo_execve(const char *path, char *const argv[], char *const envp[], int noexec) +sudo_execve(const char *path, char *const argv[], char *const envp[], bool noexec) { /* Modify the environment as needed to disable further execve(). */ if (noexec) diff --git a/src/exec_pty.c b/src/exec_pty.c index 18c92cb65..d2975d54a 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -115,11 +115,8 @@ pty_cleanup(void) { debug_decl(cleanup, SUDO_DEBUG_EXEC); - if (!TAILQ_EMPTY(&io_plugins) && io_fds[SFD_USERTTY] != -1) { - check_foreground(); - if (foreground) - term_restore(io_fds[SFD_USERTTY], 0); - } + if (!TAILQ_EMPTY(&io_plugins) && io_fds[SFD_USERTTY] != -1) + term_restore(io_fds[SFD_USERTTY], 0); #ifdef HAVE_SELINUX selinux_restore_tty(); #endif @@ -367,11 +364,8 @@ suspend_parent(int signo) del_io_events(); /* Restore original tty mode before suspending. */ - if (ttymode != TERM_COOKED) { - do { - n = term_restore(io_fds[SFD_USERTTY], 0); - } while (!n && errno == EINTR); - } + if (ttymode != TERM_COOKED) + term_restore(io_fds[SFD_USERTTY], 0); if (sig2str(signo, signame) == -1) snprintf(signame, sizeof(signame), "%d", signo); @@ -815,14 +809,8 @@ pty_close(struct command_status *cstat) } /* Restore terminal settings. */ - if (io_fds[SFD_USERTTY] != -1) { - check_foreground(); - if (foreground) { - do { - n = term_restore(io_fds[SFD_USERTTY], 0); - } while (!n && errno == EINTR); - } - } + if (io_fds[SFD_USERTTY] != -1) + term_restore(io_fds[SFD_USERTTY], 0); /* If child was signalled, write the reason to stdout like the shell. */ if (cstat->type == CMD_WSTATUS && WIFSIGNALED(cstat->val)) { diff --git a/src/locale_stub.c b/src/locale_stub.c index 91bc71dd7..66c653cb3 100644 --- a/src/locale_stub.c +++ b/src/locale_stub.c @@ -21,9 +21,11 @@ #include <stdio.h> #include <stdlib.h> +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "fatal.h" -#include "gettext.h" #ifdef HAVE_LIBINTL_H /* No need to swap locales in the front end. */ diff --git a/src/net_ifs.c b/src/net_ifs.c index 69b20eb01..c37a774de 100644 --- a/src/net_ifs.c +++ b/src/net_ifs.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2007-2013 + * Copyright (c) 1996, 1998-2005, 2007-2014 * Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any @@ -55,6 +55,11 @@ struct rtentry; #ifdef HAVE_STRINGS_H # include <strings.h> #endif /* HAVE_STRINGS_H */ +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ #ifdef HAVE_UNISTD_H # include <unistd.h> #endif /* HAVE_UNISTD_H */ @@ -79,14 +84,15 @@ struct rtentry; # include <ifaddrs.h> #endif +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" +#include "sudo_conf.h" #include "sudo_debug.h" -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" - /* Minix apparently lacks IFF_LOOPBACK */ #ifndef IFF_LOOPBACK # define IFF_LOOPBACK 0 @@ -115,7 +121,7 @@ get_net_ifs(char **addrinfo) char *cp; debug_decl(get_net_ifs, SUDO_DEBUG_NETIF) - if (getifaddrs(&ifaddrs)) + if (!sudo_conf_probe_interfaces() || getifaddrs(&ifaddrs) != 0) debug_return_int(0); /* Allocate space for the interfaces info string. */ @@ -221,6 +227,9 @@ get_net_ifs(char **addrinfo) #endif /* _ISC */ debug_decl(get_net_ifs, SUDO_DEBUG_NETIF) + if (!sudo_conf_probe_interfaces()) + debug_return_int(0); + sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) fatal(U_("unable to open socket")); diff --git a/src/po/ca.mo b/src/po/ca.mo Binary files differnew file mode 100644 index 000000000..6c7f2bff3 --- /dev/null +++ b/src/po/ca.mo diff --git a/src/po/ca.po b/src/po/ca.po new file mode 100644 index 000000000..7e6ffa13d --- /dev/null +++ b/src/po/ca.po @@ -0,0 +1,785 @@ +# translation of gawk.po to Catalan +# This file is put in the public domain. +# Walter Garcia-Fontes <walter.garcia@upf.edu>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: sudo 1.8.9b2\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2013-12-11 13:41-0700\n" +"PO-Revision-Date: 2014-03-06 19:40+0100\n" +"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n" +"Language-Team: Catalan <ca@dodds.net>\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: common/aix.c:93 common/aix.c:150 +msgid "unable to open userdb" +msgstr "no s'ha pogut obrir userdb" + +#: common/aix.c:153 +#, c-format +msgid "unable to switch to registry \"%s\" for %s" +msgstr "no s'ha pogut passar al registre \"%s\" per a %s" + +#: common/aix.c:170 +msgid "unable to restore registry" +msgstr "no s'ha pogut restaurar el registre" + +#: common/alloc.c:81 +msgid "internal error, tried to emalloc(0)" +msgstr "error intern, s'ha intentat emalloc(0)" + +#: common/alloc.c:98 +msgid "internal error, tried to emalloc2(0)" +msgstr "error intern, s'ha intentat emalloc2(0)" + +#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:185 +#, c-format +msgid "internal error, %s overflow" +msgstr "error intern, sobreeiximent de %s" + +#: common/alloc.c:119 +msgid "internal error, tried to ecalloc(0)" +msgstr "error intern, s'ha intentat ecalloc(0)" + +#: common/alloc.c:141 +msgid "internal error, tried to erealloc(0)" +msgstr "error intern, s'ha intentat erealloc(0)" + +#: common/alloc.c:160 +msgid "internal error, tried to erealloc3(0)" +msgstr "error intern, s'ha intentat erealloc3(0)" + +#: common/alloc.c:183 +msgid "internal error, tried to erecalloc(0)" +msgstr "error intern, s'ha intentat erecalloc(0)" + +#: common/atoid.c:78 common/atoid.c:106 common/atomode.c:54 +#: compat/strtonum.c:65 compat/strtonum.c:183 +msgid "invalid value" +msgstr "valor no vàlid" + +#: common/atoid.c:85 common/atoid.c:113 common/atomode.c:60 +#: compat/strtonum.c:68 compat/strtonum.c:195 +msgid "value too large" +msgstr "valor massa gran" + +#: common/atoid.c:91 common/atomode.c:60 compat/strtonum.c:68 +#: compat/strtonum.c:189 +msgid "value too small" +msgstr "valor massa petit" + +#: common/fatal.c:158 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: common/fatal.c:161 common/fatal.c:165 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: common/gidlist.c:80 src/load_plugins.c:63 src/load_plugins.c:76 +#: src/sudo.c:558 src/sudo.c:577 src/sudo.c:599 src/sudo.c:608 src/sudo.c:617 +#: src/sudo.c:632 src/sudo.c:679 src/sudo.c:689 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: common/sudo_conf.c:177 +#, c-format +msgid "unsupported group source `%s' in %s, line %d" +msgstr "font `%s' de grup no suportada a %s, línia %d" + +#: common/sudo_conf.c:191 +#, c-format +msgid "invalid max groups `%s' in %s, line %d" +msgstr "grups `%s' max no vàlids a %s, línia %d" + +#: common/sudo_conf.c:391 +#, c-format +msgid "unable to stat %s" +msgstr "no es pot obrir %s" + +#: common/sudo_conf.c:394 +#, c-format +msgid "%s is not a regular file" +msgstr "%s no és un fitxer regular" + +#: common/sudo_conf.c:397 +#, c-format +msgid "%s is owned by uid %u, should be %u" +msgstr "%s és propietat de l'uid %u, hauria de ser %u" + +#: common/sudo_conf.c:401 +#, c-format +msgid "%s is world writable" +msgstr "%s és escrivible per tothom" + +#: common/sudo_conf.c:404 +#, c-format +msgid "%s is group writable" +msgstr "%s és escrivible pel grup" + +#: common/sudo_conf.c:414 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 +#, c-format +msgid "unable to open %s" +msgstr "no s'ha pogut obrir %s" + +#: compat/strsignal.c:50 +msgid "Unknown signal" +msgstr "Senyal desconegut" + +#: src/exec.c:133 src/exec_pty.c:744 +msgid "policy plugin failed session initialization" +msgstr "el connector de política ha fallat la inicialització de la sessió" + +#: src/exec.c:138 src/exec_pty.c:760 src/exec_pty.c:1272 src/tgetpass.c:221 +msgid "unable to fork" +msgstr "no s'ha pogut bifurcar" + +#: src/exec.c:309 src/exec.c:317 src/exec.c:841 src/exec_pty.c:507 +#: src/exec_pty.c:512 src/exec_pty.c:570 src/exec_pty.c:577 src/exec_pty.c:870 +#: src/exec_pty.c:880 src/exec_pty.c:925 src/exec_pty.c:932 +#: src/exec_pty.c:1334 src/exec_pty.c:1341 src/exec_pty.c:1348 +msgid "unable to add event to queue" +msgstr "no s'ha pogut afegir un esdeveniment a la cua" + +#: src/exec.c:394 +msgid "unable to create sockets" +msgstr "no s'ha pogut crear el sòcol" + +#: src/exec.c:477 +msgid "error in event loop" +msgstr "error al bucle d'esdeveniment" + +#: src/exec.c:492 +msgid "unable to restore tty label" +msgstr "no s'ha pogut restaurar l'etiqueta tty" + +#: src/exec_common.c:73 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "no s'ha pogut remoure PRIV_PROC_EXEC de PRIV_LIMIT" + +#: src/exec_pty.c:184 +msgid "unable to allocate pty" +msgstr "no s'ha pogut assignar pty" + +#: src/exec_pty.c:682 src/exec_pty.c:691 src/exec_pty.c:699 +#: src/exec_pty.c:1192 src/exec_pty.c:1269 src/signal.c:126 src/tgetpass.c:218 +msgid "unable to create pipe" +msgstr "no s'ha pogut crear un conducte" + +#: src/exec_pty.c:735 +msgid "unable to set terminal to raw mode" +msgstr "no s'ha pogut configurar la terminal en mode en brut" + +#: src/exec_pty.c:1091 +msgid "error reading from signal pipe" +msgstr "error en llegir del conducte del senyal" + +#: src/exec_pty.c:1124 +msgid "error reading from pipe" +msgstr "error en llegir del conducte" + +#: src/exec_pty.c:1149 +msgid "error reading from socketpair" +msgstr "error en llegir del parell de sòcols" + +#: src/exec_pty.c:1158 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "tipus de resposta inesperada al canal posterior: %d" + +#: src/exec_pty.c:1248 +msgid "unable to set controlling tty" +msgstr "no s'ha pogut configurar la tty controladora" + +#: src/load_plugins.c:61 src/load_plugins.c:74 src/load_plugins.c:91 +#: src/load_plugins.c:144 src/load_plugins.c:150 src/load_plugins.c:156 +#: src/load_plugins.c:197 src/load_plugins.c:204 src/load_plugins.c:211 +#: src/load_plugins.c:217 +#, 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'" + +#: src/load_plugins.c:93 +#, c-format +msgid "%s%s: %s" +msgstr "%s%s: %s" + +#: src/load_plugins.c:152 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s ha de ser propietat de l'uid %d" + +#: src/load_plugins.c:158 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "%s ha de ser escrivible únicament pel propietari" + +#: src/load_plugins.c:199 +#, c-format +msgid "unable to load %s: %s" +msgstr "no s'ha pogut carregar %s: %s" + +#: src/load_plugins.c:206 +#, c-format +msgid "unable to find symbol `%s' in %s" +msgstr "no s'ha pogut trobar el símbol `%s' a %s" + +#: src/load_plugins.c:213 +#, c-format +msgid "unknown policy type %d found in %s" +msgstr "s'ha trobat un tipus desconegut de política %d a %s" + +#: src/load_plugins.c:219 +#, c-format +msgid "incompatible plugin major version %d (expected %d) found in %s" +msgstr "s'ha trobat una versió major %d incompatible de connector (s'esperava %d) a %s" + +#: src/load_plugins.c:228 +#, 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" + +#: src/load_plugins.c:230 +msgid "only a single policy plugin may be specified" +msgstr "sols es pot especificar un únic connector de política" + +#: src/load_plugins.c:233 +#, 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" + +#: src/load_plugins.c:248 +#, 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" + +#: src/load_plugins.c:319 +#, 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:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 +#: src/net_ifs.c:297 src/net_ifs.c:321 +msgid "load_interfaces: overflow detected" +msgstr "load_interfaces: s'ha detectat un sobreeiximent" + +#: src/net_ifs.c:226 +msgid "unable to open socket" +msgstr "no s'ha pogut obrir el sòcol" + +#: src/parse_args.c:246 +#, c-format +msgid "the argument to -C must be a number greater than or equal to 3" +msgstr "l'argument per a -C ha de ser un número més gran o igual a 3" + +#: src/parse_args.c:408 +msgid "you may not specify both the `-i' and `-s' options" +msgstr "no podeu especificar a l'hora les opcions `-i' i `-s'" + +#: src/parse_args.c:412 +msgid "you may not specify both the `-i' and `-E' options" +msgstr "no podeu especificar a l'hora les opcons `-i' i `-E'" + +#: src/parse_args.c:422 +msgid "the `-E' option is not valid in edit mode" +msgstr "l'opció `-E' no és vàlida al mode editar" + +#: src/parse_args.c:424 +msgid "you may not specify environment variables in edit mode" +msgstr "no podeu especificar variables d'entorn al mode editar" + +#: src/parse_args.c:432 +msgid "the `-U' option may only be used with the `-l' option" +msgstr "l'opció `-U' sols es pot usar amb l'opció `-l'" + +#: src/parse_args.c:436 +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:519 +msgid "sudoedit is not supported on this platform" +msgstr "aquesta plataforma no dóna suport a sudoedit" + +#: src/parse_args.c:592 +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:606 +#, c-format +msgid "" +"%s - edit files as another user\n" +"\n" +msgstr "" +"%s - edita fitxers com un altre usuari\n" +"\n" + +#: src/parse_args.c:608 +#, c-format +msgid "" +"%s - execute a command as another user\n" +"\n" +msgstr "" +"%s - executa una ordre com un altre usuari\n" +"\n" + +#: src/parse_args.c:613 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Opcions:\n" + +#: src/parse_args.c:615 +msgid "use a helper program for password prompting" +msgstr "usa un programa auxiliar per a la pregunta de la contrasenya" + +#: src/parse_args.c:618 +msgid "use specified BSD authentication type" +msgstr "usa el tipus d'autentificació BSD especificat" + +#: src/parse_args.c:621 +msgid "run command in the background" +msgstr "executa l'ordre en el segon pla" + +#: src/parse_args.c:623 +msgid "close all file descriptors >= num" +msgstr "tanca tots els descriptors de fitxer >= num" + +#: src/parse_args.c:626 +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:629 +msgid "preserve user environment when running command" +msgstr "preserva l'entorn de l'usuari quan s'executi l'ordre" + +#: src/parse_args.c:631 +msgid "edit files instead of running a command" +msgstr "edita els fitxers en comptes d'executar una ordre" + +#: src/parse_args.c:633 +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:635 +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:637 +msgid "display help message and exit" +msgstr "mostra el missatge d'ajuda i surt" + +#: src/parse_args.c:639 +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:641 +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:643 +msgid "remove timestamp file completely" +msgstr "suprimeix completament el fitxer de marca de temps" + +#: src/parse_args.c:645 +msgid "invalidate timestamp file" +msgstr "fitxer de marca de temps no vàlid" + +#: src/parse_args.c:647 +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:649 +msgid "non-interactive mode, no prompts are used" +msgstr "mode no interactiu, no es preguntarà res" + +#: src/parse_args.c:651 +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:653 +msgid "use the specified password prompt" +msgstr "usa la pregunta específica de contrasenya" + +#: src/parse_args.c:656 +msgid "create SELinux security context with specified role" +msgstr "crea un context de seguretat SELinux amb el rol especificat" + +#: src/parse_args.c:659 +msgid "read password from standard input" +msgstr "llegeix la contrasenya des de l'entrada estàndard" + +#: src/parse_args.c:661 +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:664 +msgid "create SELinux security context with specified type" +msgstr "crea el context de seguretat SELinux amb el tipus especificat" + +#: src/parse_args.c:667 +msgid "in list mode, display privileges for user" +msgstr "en mode llista, mostra els privilegis per a l'usuari" + +#: src/parse_args.c:669 +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:671 +msgid "display version information and exit" +msgstr "mostra la informació de versió i surt" + +#: src/parse_args.c:673 +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:675 +msgid "stop processing command line arguments" +msgstr "deixa de processar els arguments de línia d'ordres" + +#: src/selinux.c:77 +msgid "unable to open audit system" +msgstr "no s'ha pogut obrir el sistema d'auditoria" + +#: src/selinux.c:85 +msgid "unable to send audit message" +msgstr "no s'ha pogut enviar el missatge d'auditoria" + +#: src/selinux.c:113 +#, c-format +msgid "unable to fgetfilecon %s" +msgstr "no s'ha pogut fgetfilecon %s" + +#: src/selinux.c:118 +#, c-format +msgid "%s changed labels" +msgstr "%s ha canviat les etiquetes" + +#: src/selinux.c:123 +#, c-format +msgid "unable to restore context for %s" +msgstr "no s'ha pogut restaurar el context per a %s" + +#: src/selinux.c:163 +#, 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:172 +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:179 +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:186 +msgid "unable to set new tty context" +msgstr "no s'ha pogut establir el nou context tty" + +#: src/selinux.c:252 +#, c-format +msgid "you must specify a role for type %s" +msgstr "heu d'especificar un rol per al tipus %s" + +#: src/selinux.c:258 +#, 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:276 +#, c-format +msgid "failed to set new role %s" +msgstr "no s'ha pogut establir el nou rol %s" + +#: src/selinux.c:280 +#, c-format +msgid "failed to set new type %s" +msgstr "no s'ha pogut establir el nou tipus %s" + +#: src/selinux.c:289 +#, c-format +msgid "%s is not a valid context" +msgstr "%s no és un context vàlid" + +#: src/selinux.c:324 +msgid "failed to get old_context" +msgstr "no s'ha pogut obtenir old_context" + +#: src/selinux.c:330 +msgid "unable to determine enforcing mode." +msgstr "no s'ha pogut determinar el mode de fer complir" + +#: src/selinux.c:342 +#, c-format +msgid "unable to set tty context to %s" +msgstr "no s'ha pogut establir el context tty a %s" + +#: src/selinux.c:381 +#, c-format +msgid "unable to set exec context to %s" +msgstr "no s'ha pogut establir el context exec a %s" + +#: src/selinux.c:388 +#, 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" + +#: src/sesh.c:57 +msgid "requires at least one argument" +msgstr "es requereix almenys un argument" + +#: src/sesh.c:78 src/sudo.c:1088 +#, c-format +msgid "unable to execute %s" +msgstr "no s'ha pogut executar %s" + +#: src/solaris.c:88 +msgid "resource control limit has been reached" +msgstr "s'ha assolit el límit de control de recursos" + +#: src/solaris.c:91 +#, c-format +msgid "user \"%s\" is not a member of project \"%s\"" +msgstr "l'usuari \"%s\" no és un membre del projecte \"%s\"" + +#: src/solaris.c:95 +msgid "the invoking task is final" +msgstr "la tasca invocant és final" + +#: src/solaris.c:98 +#, c-format +msgid "could not join project \"%s\"" +msgstr "no es pot fer la incorporació al projecte \"%s\"" + +#: src/solaris.c:103 +#, c-format +msgid "no resource pool accepting default bindings exists for project \"%s\"" +msgstr "no hi ha vinculacions predeterminades d'acceptació de conjunt de recursos per al projecte \"%s\"" + +#: src/solaris.c:107 +#, c-format +msgid "specified resource pool does not exist for project \"%s\"" +msgstr "no existeix el conjunt de recursos especifica per al projecte \"%s\"" + +#: src/solaris.c:111 +#, c-format +msgid "could not bind to default resource pool for project \"%s\"" +msgstr "no s'ha pogut vincular al conjunt de recursos predeterminats per al projecte \"%s\"" + +#: src/solaris.c:117 +#, c-format +msgid "setproject failed for project \"%s\"" +msgstr "ha fallat setproject per al projecte \"%s\"" + +#: src/solaris.c:119 +#, c-format +msgid "warning, resource control assignment failed for project \"%s\"" +msgstr "advertiment, l'assignació de control de recursos ha fallat per al projecte \"%s\"" + +#: src/sudo.c:196 +#, c-format +msgid "Sudo version %s\n" +msgstr "Versió de sudo %s\n" + +#: src/sudo.c:198 +#, c-format +msgid "Configure options: %s\n" +msgstr "Opcions de configuració: %s\n" + +#: src/sudo.c:203 +msgid "fatal error, unable to load plugins" +msgstr "error fatal, no s'han pogut carregar els connectors" + +#: src/sudo.c:211 +msgid "unable to initialize policy plugin" +msgstr "no s'ha pogut inicialitzar el connector de polítiques" + +#: src/sudo.c:267 +#, c-format +msgid "error initializing I/O plugin %s" +msgstr "no se pogut iniciliatzar el connector %s entrada/sortida" + +#: src/sudo.c:293 +#, c-format +msgid "unexpected sudo mode 0x%x" +msgstr "mode 0x%x inesperat de sudo" + +#: src/sudo.c:413 +msgid "unable to get group vector" +msgstr "no s'ha pogut obtenir el vector de grup" + +#: src/sudo.c:465 +#, c-format +msgid "unknown uid %u: who are you?" +msgstr "uid %u desconegut: qui sou?" + +#: src/sudo.c:762 +#, 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:765 +#, 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:771 +#, 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:897 +#, c-format +msgid "unknown login class %s" +msgstr "classe d'inici de sessió %s desconeguda" + +#: src/sudo.c:910 +msgid "unable to set user context" +msgstr "no s'ha pogut establir el context d'usuari" + +#: src/sudo.c:924 +msgid "unable to set supplementary group IDs" +msgstr "no s'han pogut establir els IDs de grup suplementaris" + +#: src/sudo.c:931 +#, 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:937 +#, 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:944 +msgid "unable to set process priority" +msgstr "no s'ha pogut establir la prioritat del procés" + +#: src/sudo.c:952 +#, c-format +msgid "unable to change root to %s" +msgstr "no s'ha pogut canviar l'usuari primari a %s" + +#: src/sudo.c:965 src/sudo.c:971 src/sudo.c:977 +#, 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:994 +#, c-format +msgid "unable to change directory to %s" +msgstr "no s'ha pogut canviar el directori a %s" + +#: src/sudo.c:1051 +#, c-format +msgid "unexpected child termination condition: %d" +msgstr "condició de terminació del fill inesperada: %d" + +#: src/sudo.c:1108 +#, 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:1121 +#, 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:1133 +#, 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:1145 +#, 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:110 +#, 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:142 +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:170 src/sudo_edit.c:270 +#, c-format +msgid "%s: not a regular file" +msgstr "%s: no és un fitxer regular" + +#: src/sudo_edit.c:204 src/sudo_edit.c:306 +#, c-format +msgid "%s: short write" +msgstr "%s: escriptura breu" + +#: src/sudo_edit.c:271 +#, c-format +msgid "%s left unmodified" +msgstr "%s s'ha deixat sense modificar" + +#: src/sudo_edit.c:284 +#, c-format +msgid "%s unchanged" +msgstr "%s sense canviar" + +#: src/sudo_edit.c:296 src/sudo_edit.c:317 +#, c-format +msgid "unable to write to %s" +msgstr "no s'ha pogut escriure a %s" + +#: src/sudo_edit.c:297 src/sudo_edit.c:315 src/sudo_edit.c:318 +#, 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:314 +msgid "unable to read temporary file" +msgstr "no s'ha pogut llegir el fitxer temporal" + +#: src/tgetpass.c:90 +msgid "no tty present and no askpass program specified" +msgstr "no hi ha un tty present i no s'ha especificat un programa askpass" + +#: src/tgetpass.c:99 +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:232 +#, c-format +msgid "unable to set gid to %u" +msgstr "no s'ha pogut establir el gid a %u" + +#: src/tgetpass.c:236 +#, c-format +msgid "unable to set uid to %u" +msgstr "no s'ha pogut establir el uid a %u" + +#: src/tgetpass.c:241 +#, c-format +msgid "unable to run %s" +msgstr "no s'ha pogut executar %s" + +#: src/utmp.c:278 +msgid "unable to save stdin" +msgstr "no s'ha pogut desar el stdin" + +#: src/utmp.c:280 +msgid "unable to dup2 stdin" +msgstr "no s'ha pogut fer dup2 stdin" + +#: src/utmp.c:283 +msgid "unable to restore stdin" +msgstr "no s'ha pogut restaurar stdin" diff --git a/src/po/de.mo b/src/po/de.mo Binary files differindex 88578afa1..565c55bb0 100644 --- a/src/po/de.mo +++ b/src/po/de.mo diff --git a/src/po/de.po b/src/po/de.po index 3d47e49a9..8e6da6eb8 100644 --- a/src/po/de.po +++ b/src/po/de.po @@ -1,14 +1,14 @@ # German translation for sudo. # This file is distributed under the same license as the sudo package. -# Jakob Kramer <jakob.kramer@gmx.de>, 2012, 2013. +# Jakob Kramer <jakob.kramer@gmx.de>, 2012, 2013, 2014. # Mario Blättermann <mario.blaettermann@gmail.com>, 2012. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.8b3\n" +"Project-Id-Version: sudo 1.8.9b2\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-09-03 14:44-0600\n" -"PO-Revision-Date: 2013-10-23 23:00+0200\n" +"POT-Creation-Date: 2013-12-11 13:41-0700\n" +"PO-Revision-Date: 2014-03-07 22:25+0100\n" "Last-Translator: Jakob Kramer <jakob.kramer@gmx.de>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -17,8 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: common/aix.c:150 -#, c-format +#: common/aix.c:93 common/aix.c:150 msgid "unable to open userdb" msgstr "Nutzerdatenbank konnte nicht geöffnet werden" @@ -28,7 +27,6 @@ msgid "unable to switch to registry \"%s\" for %s" msgstr "Es konnte nicht zur Registrierungsdatenbank »%s« von %s gewechselt werden" #: common/aix.c:170 -#, c-format msgid "unable to restore registry" msgstr "Registrierungsdatenbank konnte nicht wiederhergestellt werden" @@ -40,7 +38,7 @@ msgstr "Interner Fehler: Es wurde versucht, emalloc(0) auszuführen" msgid "internal error, tried to emalloc2(0)" msgstr "Interner Fehler: Es wurde versucht, emalloc2(0) auszuführen" -#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:186 +#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:185 #, c-format msgid "internal error, %s overflow" msgstr "Interner Fehler: %s-Überlauf" @@ -57,77 +55,78 @@ msgstr "Interner Fehler: Es wurde versucht, erealloc(0) auszuführen" msgid "internal error, tried to erealloc3(0)" msgstr "Interner Fehler: Es wurde versucht, erealloc3(0) auszuführen" -#: common/alloc.c:184 +#: common/alloc.c:183 msgid "internal error, tried to erecalloc(0)" msgstr "Interner Fehler: Es wurde versucht, erecalloc(0) auszuführen" -#: common/atoid.c:77 common/atoid.c:99 src/sudo.c:561 src/sudo.c:586 -#: src/sudo.c:694 src/sudo.c:710 +#: common/atoid.c:78 common/atoid.c:106 common/atomode.c:54 +#: compat/strtonum.c:65 compat/strtonum.c:183 msgid "invalid value" msgstr "ungültiger Wert" -#: common/atoid.c:84 src/sudo.c:565 src/sudo.c:590 src/sudo.c:698 -#: src/sudo.c:714 -msgid "value out of range" -msgstr "Wert liegt außerhalb des Bereichs" - -#: common/atoid.c:105 +#: common/atoid.c:85 common/atoid.c:113 common/atomode.c:60 +#: compat/strtonum.c:68 compat/strtonum.c:195 msgid "value too large" msgstr "Wert zu groß" -#: common/fatal.c:154 +#: common/atoid.c:91 common/atomode.c:60 compat/strtonum.c:68 +#: compat/strtonum.c:189 +msgid "value too small" +msgstr "Wert zu klein" + +#: common/fatal.c:158 #, c-format msgid "%s: %s: %s\n" msgstr "%s: %s: %s\n" -#: common/fatal.c:157 common/fatal.c:161 +#: common/fatal.c:161 common/fatal.c:165 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: common/gidlist.c:80 src/load_plugins.c:72 src/sudo.c:561 src/sudo.c:565 -#: src/sudo.c:586 src/sudo.c:590 src/sudo.c:613 src/sudo.c:622 src/sudo.c:631 -#: src/sudo.c:646 src/sudo.c:694 src/sudo.c:698 src/sudo.c:710 src/sudo.c:714 +#: common/gidlist.c:80 src/load_plugins.c:63 src/load_plugins.c:76 +#: src/sudo.c:558 src/sudo.c:577 src/sudo.c:599 src/sudo.c:608 src/sudo.c:617 +#: src/sudo.c:632 src/sudo.c:679 src/sudo.c:689 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: common/sudo_conf.c:176 +#: common/sudo_conf.c:177 #, c-format msgid "unsupported group source `%s' in %s, line %d" msgstr "Nicht unterstützte Gruppenquelle »%s« in %s, Zeile %d" -#: common/sudo_conf.c:190 +#: common/sudo_conf.c:191 #, c-format msgid "invalid max groups `%s' in %s, line %d" msgstr "Ungültige Maximalzahl an Gruppen »%s« in %s, Zeile %d" -#: common/sudo_conf.c:394 +#: common/sudo_conf.c:391 #, c-format msgid "unable to stat %s" msgstr "stat konnte nicht auf %s angewandt werden" -#: common/sudo_conf.c:397 +#: common/sudo_conf.c:394 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: common/sudo_conf.c:400 +#: common/sudo_conf.c:397 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s gehört Benutzer mit UID %u, sollte allerdings %u gehören" -#: common/sudo_conf.c:404 +#: common/sudo_conf.c:401 #, c-format msgid "%s is world writable" msgstr "%s kann von allen verändert werden" -#: common/sudo_conf.c:407 +#: common/sudo_conf.c:404 #, c-format msgid "%s is group writable" msgstr "%s kann von der Gruppe verändert werden" -#: common/sudo_conf.c:417 src/selinux.c:196 src/selinux.c:209 src/sudo.c:329 +#: common/sudo_conf.c:414 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 #, c-format msgid "unable to open %s" msgstr "%s konnte nicht geöffnet werden" @@ -136,152 +135,144 @@ msgstr "%s konnte nicht geöffnet werden" msgid "Unknown signal" msgstr "Unbekanntes Signal" -#: src/exec.c:127 src/exec_pty.c:685 -#, c-format +#: src/exec.c:133 src/exec_pty.c:744 msgid "policy plugin failed session initialization" msgstr "Regelwerks-Plugin konnte Sitzung nicht initialisieren" -#: src/exec.c:132 src/exec_pty.c:701 src/exec_pty.c:1066 src/tgetpass.c:221 -#, c-format +#: src/exec.c:138 src/exec_pty.c:760 src/exec_pty.c:1272 src/tgetpass.c:221 msgid "unable to fork" msgstr "Es konnte nicht geforkt werden" -#: src/exec.c:259 -#, c-format +#: src/exec.c:309 src/exec.c:317 src/exec.c:841 src/exec_pty.c:507 +#: src/exec_pty.c:512 src/exec_pty.c:570 src/exec_pty.c:577 src/exec_pty.c:870 +#: src/exec_pty.c:880 src/exec_pty.c:925 src/exec_pty.c:932 +#: src/exec_pty.c:1334 src/exec_pty.c:1341 src/exec_pty.c:1348 +msgid "unable to add event to queue" +msgstr "Ereignis konnte nicht zur Warteschlange hinzugefügt werden" + +#: src/exec.c:394 msgid "unable to create sockets" msgstr "Sockets konnten nicht hergestellt werden" -#: src/exec.c:347 src/exec_pty.c:1130 src/exec_pty.c:1268 -#, c-format -msgid "select failed" -msgstr "»select« schlug fehl" +#: src/exec.c:477 +msgid "error in event loop" +msgstr "Fehler in Ereignisschleife" -#: src/exec.c:449 -#, c-format +#: src/exec.c:492 msgid "unable to restore tty label" msgstr "TTY-Kennzeichnung konnte nicht wiederhergestellt werden" -#: src/exec_common.c:70 -#, c-format +#: src/exec_common.c:73 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:183 -#, c-format +#: src/exec_pty.c:184 msgid "unable to allocate pty" msgstr "PTY konnte nicht vergeben werden" -#: src/exec_pty.c:623 src/exec_pty.c:632 src/exec_pty.c:640 src/exec_pty.c:986 -#: src/exec_pty.c:1063 src/signal.c:126 src/tgetpass.c:218 -#, c-format +#: src/exec_pty.c:682 src/exec_pty.c:691 src/exec_pty.c:699 +#: src/exec_pty.c:1192 src/exec_pty.c:1269 src/signal.c:126 src/tgetpass.c:218 msgid "unable to create pipe" msgstr "Weiterleitung konnte nicht erstellt werden" -#: src/exec_pty.c:676 -#, c-format +#: src/exec_pty.c:735 msgid "unable to set terminal to raw mode" msgstr "Terminal konnte nicht in den Rohmodus gesetzt werden" -#: src/exec_pty.c:1042 -#, c-format -msgid "unable to set controlling tty" -msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" - -#: src/exec_pty.c:1139 -#, c-format +#: src/exec_pty.c:1091 msgid "error reading from signal pipe" msgstr "Fehler beim Lesen der Signal-Pipe" -#: src/exec_pty.c:1160 -#, c-format +#: src/exec_pty.c:1124 msgid "error reading from pipe" msgstr "Fehler beim Lesen der Pipe" -#: src/exec_pty.c:1176 -#, c-format +#: src/exec_pty.c:1149 msgid "error reading from socketpair" msgstr "Fehler beim Lesen des Socket-Paars" -#: src/exec_pty.c:1180 +#: src/exec_pty.c:1158 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "Unerwarteter Antworttyp auf Rückmeldungskanal: %d" -#: src/load_plugins.c:70 src/load_plugins.c:79 src/load_plugins.c:132 -#: src/load_plugins.c:138 src/load_plugins.c:144 src/load_plugins.c:185 -#: src/load_plugins.c:192 src/load_plugins.c:199 src/load_plugins.c:205 +#: src/exec_pty.c:1248 +msgid "unable to set controlling tty" +msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" + +#: src/load_plugins.c:61 src/load_plugins.c:74 src/load_plugins.c:91 +#: src/load_plugins.c:144 src/load_plugins.c:150 src/load_plugins.c:156 +#: src/load_plugins.c:197 src/load_plugins.c:204 src/load_plugins.c:211 +#: src/load_plugins.c:217 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "Fehler in %s, Zeile %d, während Plugin »%s« geladen wurde" -#: src/load_plugins.c:81 +#: src/load_plugins.c:93 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:140 +#: src/load_plugins.c:152 #, c-format msgid "%s must be owned by uid %d" msgstr "%s muss Benutzer mit UID %d gehören" -#: src/load_plugins.c:146 +#: src/load_plugins.c:158 #, c-format msgid "%s must be only be writable by owner" msgstr "%s darf nur vom Besitzer beschreibbar sein" -#: src/load_plugins.c:187 +#: src/load_plugins.c:199 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "dlopen konnte nicht auf %s ausgeführt werden: %s" +msgid "unable to load %s: %s" +msgstr "»%s« konnte nicht geladen werden: %s" -#: src/load_plugins.c:194 +#: src/load_plugins.c:206 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "Symbol »%s« konnte in %s nicht gefunden werden" -#: src/load_plugins.c:201 +#: src/load_plugins.c:213 #, c-format msgid "unknown policy type %d found in %s" msgstr "Unbekannter Regelwerktyp %d wurde in %s gefunden" -#: src/load_plugins.c:207 +#: src/load_plugins.c:219 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "Inkompatible Hauptversion %d des Regelwerks (%d erwartet) wurde in %s gefunden" -#: src/load_plugins.c:216 +#: src/load_plugins.c:228 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "Regelwerks-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:218 -#, c-format +#: src/load_plugins.c:230 msgid "only a single policy plugin may be specified" msgstr "Nur ein einziges Regelwerks-Plugin kann geladen werden" -#: src/load_plugins.c:221 +#: src/load_plugins.c:233 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "Doppelt vorhandenes Regelswerks-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:236 +#: src/load_plugins.c:248 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "Doppelt vorhandenes E/A-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:313 +#: src/load_plugins.c:319 #, c-format 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:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 #: src/net_ifs.c:297 src/net_ifs.c:321 -#, c-format msgid "load_interfaces: overflow detected" msgstr "load_interfaces: Überlauf entdeckt" #: src/net_ifs.c:226 -#, c-format msgid "unable to open socket" msgstr "Socket konnte nicht geöffnet werden" @@ -291,42 +282,34 @@ 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ößergleich 3 sein" #: src/parse_args.c:408 -#, c-format 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:412 -#, c-format 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:422 -#, c-format msgid "the `-E' option is not valid in edit mode" msgstr "Die Option »-E« ist im Bearbeiten-Modus ungültig" #: src/parse_args.c:424 -#, c-format msgid "you may not specify environment variables in edit mode" msgstr "Im Bearbeiten-Modus können keine Umgebungsvariablen gesetzt werden" #: src/parse_args.c:432 -#, c-format 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:436 -#, c-format 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:519 -#, c-format msgid "sudoedit is not supported on this platform" msgstr "sudoedit ist auf dieser Plattform nicht verfügbar" #: src/parse_args.c:592 -#, c-format 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" @@ -466,12 +449,10 @@ msgid "stop processing command line arguments" msgstr "Aufhören, die Befehlszeilenargumente zu verarbeiten" #: src/selinux.c:77 -#, c-format msgid "unable to open audit system" msgstr "Das Audit-System konnte nicht geöffnet werden" #: src/selinux.c:85 -#, c-format msgid "unable to send audit message" msgstr "Die Audit-Nachricht konnte nicht verschickt werden" @@ -496,21 +477,18 @@ msgid "unable to open %s, not relabeling tty" msgstr "%s konnte nicht geöffnet werden, TTY wird nicht neu gekennzeichnet" #: src/selinux.c:172 -#, c-format msgid "unable to get current tty context, not relabeling tty" msgstr "" "Aktueller TTY-Kontext konnte nicht festgestellt werden, TTY wird nicht neu\n" "gekennzeichnet." #: src/selinux.c:179 -#, c-format msgid "unable to get new tty context, not relabeling tty" msgstr "" "Neuer TTY-Kontext konnte nicht festgestellt werden, TTY wird nicht neu\n" "gekennzeichnet." #: src/selinux.c:186 -#, c-format msgid "unable to set new tty context" msgstr "Neuer TTY-Kontext konnte nicht festgestellt werden" @@ -540,12 +518,10 @@ msgid "%s is not a valid context" msgstr "%s ist kein gültiger Kontext" #: src/selinux.c:324 -#, c-format msgid "failed to get old_context" msgstr "»old_context« konnte nicht wiedergeholt werden" #: src/selinux.c:330 -#, c-format msgid "unable to determine enforcing mode." msgstr "»Enforcing«-Modus konnte nicht bestimmt werden." @@ -565,17 +541,15 @@ msgid "unable to set key creation context to %s" msgstr "Kontext der Schüsselerstellung konnte nicht auf %s festgelegt werden." #: src/sesh.c:57 -#, c-format msgid "requires at least one argument" msgstr "Benötigt mindestens ein Argument" -#: src/sesh.c:78 src/sudo.c:1114 +#: src/sesh.c:78 src/sudo.c:1088 #, c-format msgid "unable to execute %s" msgstr "%s konnte nicht ausgeführt werden" #: src/solaris.c:88 -#, c-format msgid "resource control limit has been reached" msgstr "Limit der Ressourcenkontrolle wurde erreicht" @@ -585,7 +559,6 @@ msgid "user \"%s\" is not a member of project \"%s\"" msgstr "Benutzer »%s« ist kein Mitglied des Projekts »%s«" #: src/solaris.c:95 -#, c-format msgid "the invoking task is final" msgstr "Der aufrufende Prozess ist fertig" @@ -630,116 +603,110 @@ msgid "Configure options: %s\n" msgstr "Optionen für »configure«: %s\n" #: src/sudo.c:203 -#, c-format msgid "fatal error, unable to load plugins" msgstr "Schwerwiegender Fehler, Plugins konnten nicht geladen werden" #: src/sudo.c:211 -#, c-format msgid "unable to initialize policy plugin" msgstr "Regelwerks-Plugin konnte nicht initialisiert werden" -#: src/sudo.c:268 +#: src/sudo.c:267 #, c-format msgid "error initializing I/O plugin %s" msgstr "E/A-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:294 +#: src/sudo.c:293 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "Unerwarteter sudo-Modus 0x%x" -#: src/sudo.c:414 -#, c-format +#: src/sudo.c:413 msgid "unable to get group vector" msgstr "Gruppenvektor konnte nicht geholt werden" -#: src/sudo.c:466 +#: src/sudo.c:465 #, c-format msgid "unknown uid %u: who are you?" msgstr "Unbekannte UID %u: Wer sind Sie?" -#: src/sudo.c:788 +#: src/sudo.c:762 #, 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:791 +#: src/sudo.c:765 #, 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:797 +#: src/sudo.c:771 #, 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:923 +#: src/sudo.c:897 #, c-format msgid "unknown login class %s" msgstr "Unbekannte Anmeldungsklasse %s" -#: src/sudo.c:936 -#, c-format +#: src/sudo.c:910 msgid "unable to set user context" msgstr "Nutzerkontext konnte nicht gesetzt werden" -#: src/sudo.c:950 -#, c-format +#: src/sudo.c:924 msgid "unable to set supplementary group IDs" msgstr "Zusätzliche Gruppenkennungen konnten nicht gesetzt werden" -#: src/sudo.c:957 +#: src/sudo.c:931 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "Effektive GID konnte nicht zu »runas«-GID %u gesetzt werden" -#: src/sudo.c:963 +#: src/sudo.c:937 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID konnte nicht zu »runas«-GID %u gesetzt werden" -#: src/sudo.c:970 -#, c-format +#: src/sudo.c:944 msgid "unable to set process priority" msgstr "Prozesspriorität konnte nicht gesetzt werden" -#: src/sudo.c:978 +#: src/sudo.c:952 #, c-format msgid "unable to change root to %s" msgstr "Wurzelordner konnte nicht zu %s geändert werden" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:965 src/sudo.c:971 src/sudo.c:977 #, 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:1020 +#: src/sudo.c:994 #, c-format msgid "unable to change directory to %s" msgstr "In Ordner »%s« konnte nicht gewechselt werden" -#: src/sudo.c:1077 +#: src/sudo.c:1051 #, c-format msgid "unexpected child termination condition: %d" msgstr "Unerwartete Abbruchsbedingung eines Unterprozesses: %d" -#: src/sudo.c:1134 +#: src/sudo.c:1108 #, 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:1147 +#: src/sudo.c:1121 #, 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:1159 +#: src/sudo.c:1133 #, 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:1171 +#: src/sudo.c:1145 #, 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" @@ -750,7 +717,6 @@ msgid "unable to change uid to root (%u)" msgstr "UID konnte nicht zu Root (%u) geändert werden" #: src/sudo_edit.c:142 -#, c-format msgid "plugin error: missing file list for sudoedit" msgstr "Plugin-Fehler: Fehlende Dateiliste für sudoedit" @@ -785,17 +751,14 @@ msgid "contents of edit session left in %s" msgstr "Bearbeitungssitzung wurden in %s gelassen" #: src/sudo_edit.c:314 -#, c-format msgid "unable to read temporary file" msgstr "Temporäre Datei konnte nicht gelesen werden" #: src/tgetpass.c:90 -#, c-format msgid "no tty present and no askpass program specified" msgstr "Kein TTY vorhanden und kein »askpass«-Programm angegeben" #: src/tgetpass.c:99 -#, c-format msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "Kein »askpass«-Programm angegeben, es wird versucht, SUDO_ASKPASS zu setzen" @@ -815,16 +778,19 @@ msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" #: src/utmp.c:278 -#, c-format msgid "unable to save stdin" msgstr "Standardeingabe konnte nicht gespeichert werden" #: src/utmp.c:280 -#, c-format msgid "unable to dup2 stdin" msgstr "dup2 konnte nicht auf die Standardeingabe angewandt werden" #: src/utmp.c:283 -#, c-format msgid "unable to restore stdin" msgstr "Standardeingabe konnte nicht wiederhergestellt werden" + +#~ msgid "value out of range" +#~ msgstr "Wert liegt außerhalb des Bereichs" + +#~ msgid "select failed" +#~ msgstr "»select« schlug fehl" diff --git a/src/po/sr.mo b/src/po/sr.mo Binary files differindex f44c94f40..09bea6cd2 100644 --- a/src/po/sr.mo +++ b/src/po/sr.mo diff --git a/src/po/sr.po b/src/po/sr.po index ebe5a2b87..666b921f6 100644 --- a/src/po/sr.po +++ b/src/po/sr.po @@ -1,22 +1,21 @@ # Language sudo-1 translations for sudo package. # This file is put in the public domain. -# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013. +# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.8b3\n" +"Project-Id-Version: sudo-1.8.9b2\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-09-03 14:44-0600\n" -"PO-Revision-Date: 2013-10-03 11:25+0200\n" +"POT-Creation-Date: 2013-12-11 13:41-0700\n" +"PO-Revision-Date: 2014-01-14 10:36+0200\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" -"Language-Team: Serbian <gnu@prevod.org>\n" +"Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: common/aix.c:150 -#, c-format +#: common/aix.c:93 common/aix.c:150 msgid "unable to open userdb" msgstr "не могу да отворим корисничку базу података" @@ -26,7 +25,6 @@ msgid "unable to switch to registry \"%s\" for %s" msgstr "не могу да се пребацим на регистар „%s“ за %s" #: common/aix.c:170 -#, c-format msgid "unable to restore registry" msgstr "не могу да повратим регистар" @@ -38,7 +36,7 @@ msgstr "унутрашња грешка, покушах да обавим „ema msgid "internal error, tried to emalloc2(0)" msgstr "унутрашња грешка, покушах да обавим „emalloc2(0)“" -#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:186 +#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:185 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење функције „%s“" @@ -55,77 +53,78 @@ msgstr "унутрашња грешка, покушах да обавим „ere msgid "internal error, tried to erealloc3(0)" msgstr "унутрашња грешка, покушах да обавим „erealloc3(0)“" -#: common/alloc.c:184 +#: common/alloc.c:183 msgid "internal error, tried to erecalloc(0)" msgstr "унутрашња грешка, покушах да обавим „erecalloc(0)“" -#: common/atoid.c:77 common/atoid.c:99 src/sudo.c:561 src/sudo.c:586 -#: src/sudo.c:694 src/sudo.c:710 +#: common/atoid.c:78 common/atoid.c:106 common/atomode.c:54 +#: compat/strtonum.c:65 compat/strtonum.c:183 msgid "invalid value" msgstr "неисправна вредност" -#: common/atoid.c:84 src/sudo.c:565 src/sudo.c:590 src/sudo.c:698 -#: src/sudo.c:714 -msgid "value out of range" -msgstr "вредност је изван опсега" - -#: common/atoid.c:105 +#: common/atoid.c:85 common/atoid.c:113 common/atomode.c:60 +#: compat/strtonum.c:68 compat/strtonum.c:195 msgid "value too large" msgstr "вредност је превелика" -#: common/fatal.c:154 +#: common/atoid.c:91 common/atomode.c:60 compat/strtonum.c:68 +#: compat/strtonum.c:189 +msgid "value too small" +msgstr "вредност је премала" + +#: common/fatal.c:158 #, c-format msgid "%s: %s: %s\n" msgstr "%s: %s: %s\n" -#: common/fatal.c:157 common/fatal.c:161 +#: common/fatal.c:161 common/fatal.c:165 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" -#: common/gidlist.c:80 src/load_plugins.c:72 src/sudo.c:561 src/sudo.c:565 -#: src/sudo.c:586 src/sudo.c:590 src/sudo.c:613 src/sudo.c:622 src/sudo.c:631 -#: src/sudo.c:646 src/sudo.c:694 src/sudo.c:698 src/sudo.c:710 src/sudo.c:714 +#: common/gidlist.c:80 src/load_plugins.c:63 src/load_plugins.c:76 +#: src/sudo.c:558 src/sudo.c:577 src/sudo.c:599 src/sudo.c:608 src/sudo.c:617 +#: src/sudo.c:632 src/sudo.c:679 src/sudo.c:689 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: common/sudo_conf.c:176 +#: common/sudo_conf.c:177 #, c-format msgid "unsupported group source `%s' in %s, line %d" msgstr "неподржани извор групе „%s“ у „%s“, %d. ред" -#: common/sudo_conf.c:190 +#: common/sudo_conf.c:191 #, c-format msgid "invalid max groups `%s' in %s, line %d" msgstr "неисправне највеће групе „%s“ у „%s“, %d. ред" -#: common/sudo_conf.c:394 +#: common/sudo_conf.c:391 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: common/sudo_conf.c:397 +#: common/sudo_conf.c:394 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: common/sudo_conf.c:400 +#: common/sudo_conf.c:397 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: common/sudo_conf.c:404 +#: common/sudo_conf.c:401 #, c-format msgid "%s is world writable" msgstr "%s је светски уписив" -#: common/sudo_conf.c:407 +#: common/sudo_conf.c:404 #, c-format msgid "%s is group writable" msgstr "%s је групно уписив" -#: common/sudo_conf.c:417 src/selinux.c:196 src/selinux.c:209 src/sudo.c:329 +#: common/sudo_conf.c:414 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 #, c-format msgid "unable to open %s" msgstr "не могу да отворим %s" @@ -134,152 +133,144 @@ msgstr "не могу да отворим %s" msgid "Unknown signal" msgstr "Непознати сигнал" -#: src/exec.c:127 src/exec_pty.c:685 -#, c-format +#: src/exec.c:133 src/exec_pty.c:744 msgid "policy plugin failed session initialization" msgstr "није успело покретање сесије прикључка политике" -#: src/exec.c:132 src/exec_pty.c:701 src/exec_pty.c:1066 src/tgetpass.c:221 -#, c-format +#: src/exec.c:138 src/exec_pty.c:760 src/exec_pty.c:1272 src/tgetpass.c:221 msgid "unable to fork" msgstr "не могу да поделим" -#: src/exec.c:259 -#, c-format +#: src/exec.c:309 src/exec.c:317 src/exec.c:841 src/exec_pty.c:507 +#: src/exec_pty.c:512 src/exec_pty.c:570 src/exec_pty.c:577 src/exec_pty.c:870 +#: src/exec_pty.c:880 src/exec_pty.c:925 src/exec_pty.c:932 +#: src/exec_pty.c:1334 src/exec_pty.c:1341 src/exec_pty.c:1348 +msgid "unable to add event to queue" +msgstr "не могу да додам догађај у ред" + +#: src/exec.c:394 msgid "unable to create sockets" msgstr "не могу да направим утичнице" -#: src/exec.c:347 src/exec_pty.c:1130 src/exec_pty.c:1268 -#, c-format -msgid "select failed" -msgstr "избор није успео" +#: src/exec.c:477 +msgid "error in event loop" +msgstr "грешка у петљи догађаја" -#: src/exec.c:449 -#, c-format +#: src/exec.c:492 msgid "unable to restore tty label" msgstr "не могу да повратим tty натпис" -#: src/exec_common.c:70 -#, c-format +#: src/exec_common.c:73 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не могу да уклоним PRIV_PROC_EXEC из PRIV_LIMIT" -#: src/exec_pty.c:183 -#, c-format +#: src/exec_pty.c:184 msgid "unable to allocate pty" msgstr "не могу да доделим pty" -#: src/exec_pty.c:623 src/exec_pty.c:632 src/exec_pty.c:640 src/exec_pty.c:986 -#: src/exec_pty.c:1063 src/signal.c:126 src/tgetpass.c:218 -#, c-format +#: src/exec_pty.c:682 src/exec_pty.c:691 src/exec_pty.c:699 +#: src/exec_pty.c:1192 src/exec_pty.c:1269 src/signal.c:126 src/tgetpass.c:218 msgid "unable to create pipe" msgstr "не могу да направим спојку" -#: src/exec_pty.c:676 -#, c-format +#: src/exec_pty.c:735 msgid "unable to set terminal to raw mode" msgstr "не могу да подесим терминал у сирови режим" -#: src/exec_pty.c:1042 -#, c-format -msgid "unable to set controlling tty" -msgstr "не могу да подесим контролисање tty" - -#: src/exec_pty.c:1139 -#, c-format +#: src/exec_pty.c:1091 msgid "error reading from signal pipe" msgstr "грешка у читању из спојке сигнала" -#: src/exec_pty.c:1160 -#, c-format +#: src/exec_pty.c:1124 msgid "error reading from pipe" msgstr "грешка у читању из спојке" -#: src/exec_pty.c:1176 -#, c-format +#: src/exec_pty.c:1149 msgid "error reading from socketpair" msgstr "грешка у читању из пара прикључка" -#: src/exec_pty.c:1180 +#: src/exec_pty.c:1158 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "неочекивана врста одговора на повратном каналу: %d" -#: src/load_plugins.c:70 src/load_plugins.c:79 src/load_plugins.c:132 -#: src/load_plugins.c:138 src/load_plugins.c:144 src/load_plugins.c:185 -#: src/load_plugins.c:192 src/load_plugins.c:199 src/load_plugins.c:205 +#: src/exec_pty.c:1248 +msgid "unable to set controlling tty" +msgstr "не могу да подесим контролисање tty" + +#: src/load_plugins.c:61 src/load_plugins.c:74 src/load_plugins.c:91 +#: src/load_plugins.c:144 src/load_plugins.c:150 src/load_plugins.c:156 +#: src/load_plugins.c:197 src/load_plugins.c:204 src/load_plugins.c:211 +#: src/load_plugins.c:217 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "грешка у „%s“, %d. ред приликом учитавања прикључка „%s“" -#: src/load_plugins.c:81 +#: src/load_plugins.c:93 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:140 +#: src/load_plugins.c:152 #, c-format msgid "%s must be owned by uid %d" msgstr "%s мора бити у власништву уида %d" -#: src/load_plugins.c:146 +#: src/load_plugins.c:158 #, c-format msgid "%s must be only be writable by owner" msgstr "%s мора бити уписив само од стране власника" -#: src/load_plugins.c:187 +#: src/load_plugins.c:199 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "не могу да дл-отворим %s: %s" +msgid "unable to load %s: %s" +msgstr "не могу да учитам %s: %s" -#: src/load_plugins.c:194 +#: src/load_plugins.c:206 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "не могу да пронађем симбол „%s“ у %s" -#: src/load_plugins.c:201 +#: src/load_plugins.c:213 #, c-format msgid "unknown policy type %d found in %s" msgstr "непозната врста сигурности %d је пронађена у %s" -#: src/load_plugins.c:207 +#: src/load_plugins.c:219 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "пронађено је несагласно главно издање прикључка %d (очекивано је %d) у „%s“" -#: src/load_plugins.c:216 +#: src/load_plugins.c:228 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "занемарујем прикључак сигурности „%s“ у %s, %d. ред" -#: src/load_plugins.c:218 -#, c-format +#: src/load_plugins.c:230 msgid "only a single policy plugin may be specified" msgstr "може бити наведен само један прикључак сигурности" -#: src/load_plugins.c:221 +#: src/load_plugins.c:233 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "занемарујем удвостручен прикључак сигурности „%s“ у %s, %d. ред" -#: src/load_plugins.c:236 +#: src/load_plugins.c:248 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "занемарујем удвостручени У/И прикључак „%s“ у %s, %d. ред" -#: src/load_plugins.c:313 +#: src/load_plugins.c:319 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "прикључак сигурности %s не садржи метод провере_сигурности" #: src/net_ifs.c:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 #: src/net_ifs.c:297 src/net_ifs.c:321 -#, c-format msgid "load_interfaces: overflow detected" msgstr "учитај_сучеља: откривено је прекорачење" #: src/net_ifs.c:226 -#, c-format msgid "unable to open socket" msgstr "не могу да отворим утичницу" @@ -289,42 +280,34 @@ msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент уз -C мора бити број већи или једнак 3" #: src/parse_args.c:408 -#, c-format msgid "you may not specify both the `-i' and `-s' options" msgstr "не можете да наведете обе опције „-i“ и „-s“" #: src/parse_args.c:412 -#, c-format msgid "you may not specify both the `-i' and `-E' options" msgstr "не можете да наведете обе опције „-i“ и „-E“" #: src/parse_args.c:422 -#, c-format msgid "the `-E' option is not valid in edit mode" msgstr "опција „-E“ није исправна у режиму уређивања" #: src/parse_args.c:424 -#, c-format msgid "you may not specify environment variables in edit mode" msgstr "не можете да одредите променљиве окружења у режиму уређивања" #: src/parse_args.c:432 -#, c-format msgid "the `-U' option may only be used with the `-l' option" msgstr "опција „-U“ може бити коришћена само са опцијом „-l“" #: src/parse_args.c:436 -#, c-format msgid "the `-A' and `-S' options may not be used together" msgstr "опције „-A“ и „-S“ не могу бити коришћене заједно" #: src/parse_args.c:519 -#, c-format msgid "sudoedit is not supported on this platform" msgstr "„sudoedit“ није подржано на овој платформи" #: src/parse_args.c:592 -#, c-format msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Само једна од опција -e, -h, -i, -K, -l, -s, -v или -V може бити наведена" @@ -464,12 +447,10 @@ msgid "stop processing command line arguments" msgstr "зауставља обрађивање аргумената линије наредби" #: src/selinux.c:77 -#, c-format msgid "unable to open audit system" msgstr "не могу да отворим аудит систем" #: src/selinux.c:85 -#, c-format msgid "unable to send audit message" msgstr "не могу да пошаљем аудит поруку" @@ -494,17 +475,14 @@ msgid "unable to open %s, not relabeling tty" msgstr "не могу да отворим %s, није тту за поновно натписивање" #: src/selinux.c:172 -#, c-format msgid "unable to get current tty context, not relabeling tty" msgstr "не могу да добавим текући тту контекст, није тту за поновно натписивање" #: src/selinux.c:179 -#, c-format msgid "unable to get new tty context, not relabeling tty" msgstr "не могу да добавим нови тту контекст, није тту за поновно натписивање" #: src/selinux.c:186 -#, c-format msgid "unable to set new tty context" msgstr "не могу да подесим нови тту контекст" @@ -534,12 +512,10 @@ msgid "%s is not a valid context" msgstr "%s није исправан контекст" #: src/selinux.c:324 -#, c-format msgid "failed to get old_context" msgstr "нисам успео да добавим стари_контекст" #: src/selinux.c:330 -#, c-format msgid "unable to determine enforcing mode." msgstr "не могу да одредим режим присиљавања." @@ -559,17 +535,15 @@ msgid "unable to set key creation context to %s" msgstr "не могу да подесим контекст стварања кључа за %s" #: src/sesh.c:57 -#, c-format msgid "requires at least one argument" msgstr "захтева барем један аргумент" -#: src/sesh.c:78 src/sudo.c:1114 +#: src/sesh.c:78 src/sudo.c:1088 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим %s" #: src/solaris.c:88 -#, c-format msgid "resource control limit has been reached" msgstr "ограничење контроле ресурса је достигнуто" @@ -579,7 +553,6 @@ msgid "user \"%s\" is not a member of project \"%s\"" msgstr "корисник „%s“ није члан пројекта „%s“" #: src/solaris.c:95 -#, c-format msgid "the invoking task is final" msgstr "задатак призивања је завршни" @@ -624,116 +597,110 @@ msgid "Configure options: %s\n" msgstr "Опције подешавања: %s\n" #: src/sudo.c:203 -#, c-format msgid "fatal error, unable to load plugins" msgstr "кобна грешка, не могу да учитам прикључке" #: src/sudo.c:211 -#, c-format msgid "unable to initialize policy plugin" msgstr "не могу да започнем прикључак сигурности" -#: src/sudo.c:268 +#: src/sudo.c:267 #, c-format msgid "error initializing I/O plugin %s" msgstr "грешка приликом покретања У/И прикључка %s" -#: src/sudo.c:294 +#: src/sudo.c:293 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неочекивани судо режим 0x%x" -#: src/sudo.c:414 -#, c-format +#: src/sudo.c:413 msgid "unable to get group vector" msgstr "не могу да добавим вектор групе" -#: src/sudo.c:466 +#: src/sudo.c:465 #, c-format msgid "unknown uid %u: who are you?" msgstr "непознати уид %u: ко сте ви?" -#: src/sudo.c:788 +#: src/sudo.c:762 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s мора бити власништвo уида %d и треба да има подешен бит „setuid“" -#: src/sudo.c:791 +#: src/sudo.c:765 #, 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:797 +#: src/sudo.c:771 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "стварни уид није %d, већ сетуид администратор инсталиран судоом?" -#: src/sudo.c:923 +#: src/sudo.c:897 #, c-format msgid "unknown login class %s" msgstr "непозната класа пријаве %s" -#: src/sudo.c:936 -#, c-format +#: src/sudo.c:910 msgid "unable to set user context" msgstr "не могу да подесим кориснички контекст" -#: src/sudo.c:950 -#, c-format +#: src/sudo.c:924 msgid "unable to set supplementary group IDs" msgstr "не могу да подесим додатне ИБ-ове групе" -#: src/sudo.c:957 +#: src/sudo.c:931 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не могу да подесим ефективан гид да се покрене_као гид %u" -#: src/sudo.c:963 +#: src/sudo.c:937 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не могу да подесим гид да се покрене као гид %u" -#: src/sudo.c:970 -#, c-format +#: src/sudo.c:944 msgid "unable to set process priority" msgstr "не могу да подесим приоритет процеса" -#: src/sudo.c:978 +#: src/sudo.c:952 #, c-format msgid "unable to change root to %s" msgstr "не могу да променим администратора на %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:965 src/sudo.c:971 src/sudo.c:977 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не могу да се пребацим у покрени_као уид (%u, %u)" -#: src/sudo.c:1020 +#: src/sudo.c:994 #, c-format msgid "unable to change directory to %s" msgstr "не могу да променим директоријум у %s" -#: src/sudo.c:1077 +#: src/sudo.c:1051 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочекивани услов завршетка потпроцеса: %d" -#: src/sudo.c:1134 +#: src/sudo.c:1108 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "прикључак сигурности %s не садржи метод „check_policy“" -#: src/sudo.c:1147 +#: src/sudo.c:1121 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "прикључак сигурности %s не подржава привилегије исписивања" -#: src/sudo.c:1159 +#: src/sudo.c:1133 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "прикључак сигурности %s не подржава опцију -v" -#: src/sudo.c:1171 +#: src/sudo.c:1145 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "прикључак сигурности %s не подржава опције -k/-K" @@ -744,7 +711,6 @@ msgid "unable to change uid to root (%u)" msgstr "не могу да променим уид у администратора (%u)" #: src/sudo_edit.c:142 -#, c-format msgid "plugin error: missing file list for sudoedit" msgstr "грешка прикључка: недостаје датотеа списка за уређивање судоа" @@ -779,17 +745,14 @@ msgid "contents of edit session left in %s" msgstr "садржај сесије уређивања је остао у %s" #: src/sudo_edit.c:314 -#, c-format msgid "unable to read temporary file" msgstr "не могу да прочитам привремену датотеку" #: src/tgetpass.c:90 -#, c-format msgid "no tty present and no askpass program specified" msgstr "тту не постоји и није наведен програм за пропуштање" #: src/tgetpass.c:99 -#, c-format msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "није наведен програм за пропуштање, покушајте да подесите SUDO_ASKPASS" @@ -809,16 +772,19 @@ msgid "unable to run %s" msgstr "не могу да покренем %s" #: src/utmp.c:278 -#, c-format msgid "unable to save stdin" msgstr "не могу да сачувам стандардни улаз" #: src/utmp.c:280 -#, c-format msgid "unable to dup2 stdin" msgstr "не могу да дуп2 стандардни улаз" #: src/utmp.c:283 -#, c-format msgid "unable to restore stdin" msgstr "не могу да повратим стандардни улаз" + +#~ msgid "value out of range" +#~ msgstr "вредност је изван опсега" + +#~ msgid "select failed" +#~ msgstr "избор није успео" diff --git a/src/selinux.c b/src/selinux.c index f519ea14a..f81884a83 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -407,7 +407,7 @@ selinux_execve(const char *path, char *const argv[], char *const envp[], memcpy(&nargv[2], &argv[1], argc * sizeof(char *)); /* copies NULL */ /* sesh will handle noexec for us. */ - sudo_execve(sesh, nargv, envp, 0); + sudo_execve(sesh, nargv, envp, false); serrno = errno; free(nargv); errno = serrno; diff --git a/src/sesh.c b/src/sesh.c index b9cfd76c6..c00748887 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -31,10 +31,11 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" -#include "gettext.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_exec.h" @@ -46,7 +47,7 @@ int main(int argc, char *argv[], char *envp[]) { char *cp, *cmnd; - int noexec = 0; + bool login_shell, noexec = false; debug_decl(main, SUDO_DEBUG_MAIN) setlocale(LC_ALL, ""); @@ -59,6 +60,9 @@ main(int argc, char *argv[], char *envp[]) /* Read sudo.conf. */ sudo_conf_read(NULL); + /* If the first char of argv[0] is '-', we are running as a login shell. */ + login_shell = argv[0][0] == '-'; + /* If argv[0] ends in -noexec, pass the flag to sudo_execve() */ if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) noexec = strcmp(cp, "-noexec") == 0; @@ -69,7 +73,7 @@ main(int argc, char *argv[], char *envp[]) cmnd = estrdup(argv[0]); /* If invoked as a login shell, modify argv[0] accordingly. */ - if (argv[-1][0] == '-') { + if (login_shell) { if ((cp = strrchr(argv[0], '/')) == NULL) cp = argv[0]; *cp = '-'; diff --git a/src/sudo.h b/src/sudo.h index b123e2d59..5730f5ea8 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -30,6 +30,8 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" #include "fatal.h" @@ -37,7 +39,6 @@ #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_util.h" -#include "gettext.h" #ifdef HAVE_PRIV_SET # include <priv.h> diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 0489dec22..6d2542dc4 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -274,13 +274,12 @@ sudo_edit(struct command_details *command_details) continue; } mtim_get(&sb, &tv); - if (tf[i].osize == sb.st_size && timevalcmp(&tf[i].omtim, &tv, ==)) { + if (tf[i].osize == sb.st_size && sudo_timevalcmp(&tf[i].omtim, &tv, ==)) { /* * If mtime and size match but the user spent no measurable * time in the editor we can't tell if the file was changed. */ - timevalsub(&tv1, &tv2); - if (timevalisset(&tv2)) { + if (sudo_timevalcmp(&tv1, &tv2, !=)) { warningx(U_("%s unchanged"), tf[i].ofile); unlink(tf[i].tfile); close(tfd); diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 4fbb77acf..9be208e36 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -53,7 +53,7 @@ /* exec.c */ struct sudo_event_base; -int sudo_execve(const char *path, char *const argv[], char *const envp[], int noexec); +int sudo_execve(const char *path, char *const argv[], char *const envp[], bool noexec); extern volatile pid_t cmnd_pid; /* exec_pty.c */ @@ -12,7 +12,7 @@ limited root privileges to users and log root activity. \ The basic philosophy is to give as few privileges as possible but \ still allow people to get their work done." vendor="Todd C. Miller" - copyright="(c) 1993-1996,1998-2013 Todd C. Miller" + copyright="(c) 1993-1996,1998-2014 Todd C. Miller" sudoedit_man=`echo ${pp_destdir}$mandir/*/sudoedit.*|sed "s:^${pp_destdir}::"` sudoedit_man_target=`basename $sudoedit_man | sed 's/edit//'` @@ -225,7 +225,7 @@ still allow people to get their work done." # OS-level directories that should generally exist but might not. extradirs=`echo ${pp_destdir}/${mandir}/[mc]* | sed "s#${pp_destdir}/##g"` - extradirs="$extradirs `dirname $docdir` `dirname $timedir`" + extradirs="$extradirs `dirname $docdir` `dirname $rundir` `dirname $vardir`" test -d ${pp_destdir}${localedir} && extradirs="$extradirs $localedir" test -d ${pp_destdir}/etc/pam.d && extradirs="${extradirs} /etc/pam.d" for dir in $bindir $sbindir $libexecdir $includedir $extradirs; do @@ -266,7 +266,8 @@ still allow people to get their work done." $libexecdir/sudo/sesh 0755 optional,ignore-others $libexecdir/sudo/* $shlib_mode optional $sudoersdir/sudoers.d/ 0750 $sudoers_uid:$sudoers_gid - $timedir/ 0700 root: + $rundir/ 0711 root: + $vardir/ 0711 root: ignore-others $docdir/ 0755 $docdir/sudoers2ldif 0755 optional,ignore-others %if [deb] @@ -290,6 +291,23 @@ still allow people to get their work done." /usr/bin/sudoreplay 0755 root: symlink $bindir/sudoreplay /usr/sbin/visudo 0755 root: symlink $sbindir/visudo %endif +%if [rpm] + /etc/rc.d/init.d/sudo 0755 root: optional +%endif +%if [aix] + /etc/rc.d/ ignore + /etc/rc.d/rc2.d/ ignore + /etc/rc.d/rc2.d/** ignore + /etc/rc.d/init.d/ ignore + /etc/rc.d/init.d/sudo 0755 root: +%endif +%if [sd] + /sbin/ ignore + /sbin/rc2.d/ ignore + /sbin/rc2.d/** ignore + /sbin/init.d/ ignore + /sbin/init.d/sudo 0755 root: +%endif %files [!aix] $sudoedit_man 0644 symlink,ignore-others $sudoedit_man_target @@ -364,7 +382,34 @@ still allow people to get their work done." exit 0; ' -%preun [deb] +%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 + rm -f /etc/rc.d/rc2.d/S90sudo + ln -s /etc/rc.d/init.d/sudo /etc/rc.d/rc2.d/S90sudo + fi + ;; + esac + +%post [aix] + # Create /etc/rc.d/rc2.d/S90sudo link if /etc/rc.d exists + if [ -d /etc/rc.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 + +%post [sd] + # Create /sbin/rc2.d/S900sudo link + rm -f /sbin/rc2.d/S900sudo + ln -s /sbin/init.d/sudo /sbin/rc2.d/S900sudo + +%preun + # Remove the time stamp dir and its contents + # We currently leave the lecture status files installed + rm -rf %{rundir}/ts +%if [deb] set -e # Remove the /etc/ldap/ldap.conf -> /etc/sudo-ldap.conf symlink if @@ -373,3 +418,20 @@ still allow people to get their work done." X"`readlink /etc/sudo-ldap.conf 2>/dev/null`" = X"/etc/ldap/ldap.conf"; then rm -f /etc/sudo-ldap.conf fi +%endif +%if [rpm] + case "%{pp_rpm_distro}" in + aix*) + # Remove /etc/rc.d/rc2.d/S90sudo link + rm -f /etc/rc.d/rc2.d/S90sudo + ;; + esac +%endif +%if [aix] + # Remove /etc/rc.d/rc2.d/S90sudo link + rm -f /etc/rc.d/rc2.d/S90sudo +%endif +%if [sd] + # Remove /sbin/rc2.d/S900sudo link + rm -f /sbin/rc2.d/S900sudo +%endif diff --git a/zlib/Makefile.in b/zlib/Makefile.in index ab2342c36..cbc0ee017 100644 --- a/zlib/Makefile.in +++ b/zlib/Makefile.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com> +# Copyright (c) 2011-2014 Todd C. Miller <Todd.Miller@courtesan.com> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -74,6 +74,8 @@ install-plugin: uninstall: +cppcheck: + check: clean: |