summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <Todd.Miller@courtesan.com>2014-03-07 14:52:58 -0700
committerTodd C. Miller <Todd.Miller@courtesan.com>2014-03-07 14:52:58 -0700
commitf5e3743ab5890acdd5060c1e522214503c8c8cc0 (patch)
tree1e287b1ac0a5b1fc386d5210e6d46095fd60dede
parentc5991e9dbc14f876fbfb8f1ae42c430568d8bef5 (diff)
parentb57a867e3fb4e6a8465f2b5940c9014327824df2 (diff)
downloadsudo-f5e3743ab5890acdd5060c1e522214503c8c8cc0.tar.gz
Merge sudo 1.8.10 from trunkSUDO_1_8_10
-rw-r--r--.hgignore2
-rw-r--r--INSTALL24
-rw-r--r--MANIFEST13
-rw-r--r--Makefile.in43
-rw-r--r--NEWS53
-rw-r--r--common/Makefile.in36
-rw-r--r--common/aix.c6
-rw-r--r--common/alloc.c6
-rw-r--r--common/atoid.c2
-rw-r--r--common/atomode.c2
-rw-r--r--common/event.c12
-rw-r--r--common/event_select.c8
-rw-r--r--common/fatal.c6
-rw-r--r--common/gidlist.c2
-rw-r--r--common/regress/atofoo/atofoo_test.c178
-rw-r--r--common/regress/sudo_conf/conf_test.c4
-rw-r--r--common/regress/sudo_parseln/parseln_test.c3
-rw-r--r--common/regress/tailq/hltq_test.c3
-rw-r--r--common/sudo_conf.c27
-rw-r--r--common/sudo_debug.c7
-rw-r--r--common/sudo_dso.c9
-rw-r--r--common/term.c141
-rw-r--r--compat/Makefile.in11
-rw-r--r--compat/clock_gettime.c80
-rw-r--r--compat/getaddrinfo.c3
-rw-r--r--compat/inet_pton.c258
-rw-r--r--compat/strsignal.c6
-rw-r--r--compat/strtonum.c6
-rw-r--r--config.h.in44
-rwxr-xr-xconfigure334
-rw-r--r--configure.ac186
-rw-r--r--doc/CONTRIBUTORS2
-rw-r--r--doc/LICENSE18
-rw-r--r--doc/Makefile.in4
-rw-r--r--doc/UPGRADE30
-rw-r--r--doc/sudo.cat12
-rw-r--r--doc/sudo.conf.cat17
-rw-r--r--doc/sudo.conf.man.in59
-rw-r--r--doc/sudo.conf.mdoc.in23
-rw-r--r--doc/sudo.man.in72
-rw-r--r--doc/sudo.mdoc.in104
-rw-r--r--doc/sudo_plugin.cat2
-rw-r--r--doc/sudo_plugin.man.in278
-rw-r--r--doc/sudo_plugin.mdoc.in34
-rw-r--r--doc/sudoers.cat153
-rw-r--r--doc/sudoers.ldap.cat6
-rw-r--r--doc/sudoers.ldap.man.in86
-rw-r--r--doc/sudoers.ldap.mdoc.in23
-rw-r--r--doc/sudoers.man.in519
-rw-r--r--doc/sudoers.mdoc.in227
-rw-r--r--doc/sudoreplay.cat2
-rw-r--r--doc/sudoreplay.man.in40
-rw-r--r--doc/sudoreplay.mdoc.in22
-rw-r--r--doc/visudo.cat4
-rw-r--r--doc/visudo.man.in28
-rw-r--r--doc/visudo.mdoc.in12
-rw-r--r--include/Makefile.in4
-rw-r--r--include/missing.h47
-rw-r--r--include/sudo_conf.h3
-rw-r--r--include/sudo_util.h125
-rw-r--r--init.d/aix.sh.in25
-rw-r--r--init.d/hpux.sh.in27
-rw-r--r--m4/sudo.m433
-rwxr-xr-xmkdep.pl4
-rwxr-xr-xmkpkg2
-rw-r--r--pathnames.h.in16
-rw-r--r--plugins/group_file/Makefile.in8
-rw-r--r--plugins/group_file/plugin_test.c2
-rw-r--r--plugins/sample/Makefile.in13
-rw-r--r--plugins/sample/sample_plugin.c1
-rw-r--r--plugins/sudoers/Makefile.in33
-rw-r--r--plugins/sudoers/audit.c6
-rw-r--r--plugins/sudoers/auth/secureware.c2
-rw-r--r--plugins/sudoers/bsm_audit.c4
-rw-r--r--plugins/sudoers/check.c38
-rw-r--r--plugins/sudoers/check.h41
-rw-r--r--plugins/sudoers/def_data.c8
-rw-r--r--plugins/sudoers/def_data.h180
-rw-r--r--plugins/sudoers/def_data.in6
-rw-r--r--plugins/sudoers/defaults.c6
-rw-r--r--plugins/sudoers/getdate.c25
-rw-r--r--plugins/sudoers/getdate.y21
-rw-r--r--plugins/sudoers/interfaces.c6
-rw-r--r--plugins/sudoers/iolog.c8
-rw-r--r--plugins/sudoers/iolog_path.c3
-rw-r--r--plugins/sudoers/ldap.c78
-rw-r--r--plugins/sudoers/linux_audit.c4
-rw-r--r--plugins/sudoers/locale.c4
-rw-r--r--plugins/sudoers/logging.c22
-rw-r--r--plugins/sudoers/logwrap.c1
-rw-r--r--plugins/sudoers/match.c5
-rw-r--r--plugins/sudoers/match_addr.c22
-rw-r--r--plugins/sudoers/po/cs.mobin0 -> 37235 bytes
-rw-r--r--plugins/sudoers/po/cs.po1725
-rw-r--r--plugins/sudoers/po/da.mobin35880 -> 35763 bytes
-rw-r--r--plugins/sudoers/po/da.po418
-rw-r--r--plugins/sudoers/po/de.mobin38973 -> 38821 bytes
-rw-r--r--plugins/sudoers/po/de.po402
-rw-r--r--plugins/sudoers/po/eo.mobin36176 -> 36068 bytes
-rw-r--r--plugins/sudoers/po/eo.po444
-rw-r--r--plugins/sudoers/po/fi.mobin38757 -> 38596 bytes
-rw-r--r--plugins/sudoers/po/fi.po421
-rw-r--r--plugins/sudoers/po/it.mobin37711 -> 37563 bytes
-rw-r--r--plugins/sudoers/po/it.po405
-rw-r--r--plugins/sudoers/po/pl.mobin38258 -> 38091 bytes
-rw-r--r--plugins/sudoers/po/pl.po400
-rw-r--r--plugins/sudoers/po/pt_BR.mobin38358 -> 38244 bytes
-rw-r--r--plugins/sudoers/po/pt_BR.po424
-rw-r--r--plugins/sudoers/po/sr.mobin0 -> 48641 bytes
-rw-r--r--plugins/sudoers/po/sr.po1718
-rw-r--r--plugins/sudoers/po/sudoers.pot386
-rw-r--r--plugins/sudoers/po/uk.mobin50713 -> 50630 bytes
-rw-r--r--plugins/sudoers/po/uk.po423
-rw-r--r--plugins/sudoers/po/vi.mobin41729 -> 41804 bytes
-rw-r--r--plugins/sudoers/po/vi.po486
-rw-r--r--plugins/sudoers/regress/iolog_path/check_iolog_path.c2
-rw-r--r--plugins/sudoers/regress/parser/check_fill.c5
-rw-r--r--plugins/sudoers/set_perms.c2
-rw-r--r--plugins/sudoers/sssd.c2
-rw-r--r--plugins/sudoers/sudoers.c9
-rw-r--r--plugins/sudoers/sudoers.h8
-rw-r--r--plugins/sudoers/sudoreplay.c16
-rw-r--r--plugins/sudoers/timestamp.c805
-rw-r--r--plugins/sudoers/timestr.c27
-rw-r--r--plugins/sudoers/toke.c9
-rw-r--r--plugins/sudoers/toke.l7
-rw-r--r--plugins/sudoers/visudo.c8
-rw-r--r--plugins/sudoers/visudo_json.c110
-rw-r--r--plugins/system_group/Makefile.in8
-rw-r--r--src/Makefile.in36
-rw-r--r--src/env_hooks.c2
-rw-r--r--src/exec_common.c2
-rw-r--r--src/exec_pty.c24
-rw-r--r--src/locale_stub.c4
-rw-r--r--src/net_ifs.c19
-rw-r--r--src/po/ca.mobin0 -> 17748 bytes
-rw-r--r--src/po/ca.po785
-rw-r--r--src/po/de.mobin18345 -> 18423 bytes
-rw-r--r--src/po/de.po238
-rw-r--r--src/po/sr.mobin22380 -> 22473 bytes
-rw-r--r--src/po/sr.po240
-rw-r--r--src/selinux.c2
-rw-r--r--src/sesh.c10
-rw-r--r--src/sudo.h3
-rw-r--r--src/sudo_edit.c5
-rw-r--r--src/sudo_exec.h2
-rw-r--r--sudo.pp70
-rw-r--r--zlib/Makefile.in4
148 files changed, 10136 insertions, 4105 deletions
diff --git a/.hgignore b/.hgignore
index 718d8872d..95b10cf22 100644
--- a/.hgignore
+++ b/.hgignore
@@ -22,6 +22,8 @@ Makefile$
^doc/.*\.mdoc\.sed$
^doc/varsub$
+^init.d/*.sh$
+
^pathnames\.h$
^src/sudo$
^src/sesh$
diff --git a/INSTALL b/INSTALL
index eb66c30e6..7dad0e7d0 100644
--- a/INSTALL
+++ b/INSTALL
@@ -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
diff --git a/MANIFEST b/MANIFEST
index 7d52bf5e5..6ef1633ca 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -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) \
diff --git a/NEWS b/NEWS
index 0bddba305..939831510 100644
--- a/NEWS
+++ b/NEWS
@@ -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
diff --git a/configure b/configure
index fb419a953..dc8b34b97 100755
--- a/configure
+++ b/configure
@@ -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
diff --git a/mkdep.pl b/mkdep.pl
index e6c1fa588..97610e71d 100755
--- a/mkdep.pl
+++ b/mkdep.pl
@@ -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;
diff --git a/mkpkg b/mkpkg
index f85a86f3b..703f61449 100755
--- a/mkpkg
+++ b/mkpkg
@@ -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
new file mode 100644
index 000000000..8562f55e7
--- /dev/null
+++ b/plugins/sudoers/po/cs.mo
Binary files differ
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
index f58830726..e19ec1170 100644
--- a/plugins/sudoers/po/da.mo
+++ b/plugins/sudoers/po/da.mo
Binary files differ
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
index eb5dc2eb7..b1d751ef5 100644
--- a/plugins/sudoers/po/de.mo
+++ b/plugins/sudoers/po/de.mo
Binary files differ
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
index b4a445bc0..100bf7e79 100644
--- a/plugins/sudoers/po/eo.mo
+++ b/plugins/sudoers/po/eo.mo
Binary files differ
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
index c250363de..a80317b9c 100644
--- a/plugins/sudoers/po/fi.mo
+++ b/plugins/sudoers/po/fi.mo
Binary files differ
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
index ed34d0cb7..2e2c0bcf5 100644
--- a/plugins/sudoers/po/it.mo
+++ b/plugins/sudoers/po/it.mo
Binary files differ
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
index e506668cf..acb446b27 100644
--- a/plugins/sudoers/po/pl.mo
+++ b/plugins/sudoers/po/pl.mo
Binary files differ
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
index 653e231e6..11074e66e 100644
--- a/plugins/sudoers/po/pt_BR.mo
+++ b/plugins/sudoers/po/pt_BR.mo
Binary files differ
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
new file mode 100644
index 000000000..47ef4c316
--- /dev/null
+++ b/plugins/sudoers/po/sr.mo
Binary files differ
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
index a1bc084ac..8954b2563 100644
--- a/plugins/sudoers/po/uk.mo
+++ b/plugins/sudoers/po/uk.mo
Binary files differ
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
index 9ccb9deba..5fb89ea1c 100644
--- a/plugins/sudoers/po/vi.mo
+++ b/plugins/sudoers/po/vi.mo
Binary files differ
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, &timestamp_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(&timestamp_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, &timestamp_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, &timestamp_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(&timestamp_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, &timestamp_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(&timestamp_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, &timestamp_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
new file mode 100644
index 000000000..6c7f2bff3
--- /dev/null
+++ b/src/po/ca.mo
Binary files differ
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
index 88578afa1..565c55bb0 100644
--- a/src/po/de.mo
+++ b/src/po/de.mo
Binary files differ
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
index f44c94f40..09bea6cd2 100644
--- a/src/po/sr.mo
+++ b/src/po/sr.mo
Binary files differ
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 */
diff --git a/sudo.pp b/sudo.pp
index fc4fa795b..83f36ac97 100644
--- a/sudo.pp
+++ b/sudo.pp
@@ -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: