From 9547755c3fa7c47ac1546868bfae6be33a30ebac Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 30 Dec 2020 07:09:35 -0700 Subject: [PATCH 01/31] Fix deregistration of a callback that is not at the head of the list. The SLIST_FOREACH_PREVPTR macro doesn't work the way I thought it did. Just store our own prev pointer and use that instead. --- lib/util/fatal.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/util/fatal.c b/lib/util/fatal.c index 2b9bdd075b..a12879ea20 100644 --- a/lib/util/fatal.c +++ b/lib/util/fatal.c @@ -278,18 +278,19 @@ sudo_fatal_callback_register_v1(sudo_fatal_callback_t func) int sudo_fatal_callback_deregister_v1(sudo_fatal_callback_t func) { - struct sudo_fatal_callback *cb, **prev; + struct sudo_fatal_callback *cb, *prev = NULL; /* Search for callback and remove if found, dupes are not allowed. */ - SLIST_FOREACH_PREVPTR(cb, prev, &callbacks, entries) { + SLIST_FOREACH(cb, &callbacks, entries) { if (cb->func == func) { - if (cb == SLIST_FIRST(&callbacks)) + if (prev == NULL) SLIST_REMOVE_HEAD(&callbacks, entries); else - SLIST_REMOVE_AFTER(*prev, entries); + SLIST_REMOVE_AFTER(prev, entries); free(cb); return 0; } + prev = cb; } return -1; From 8ea19e294ba30268c9b0878fd30c9050cae4da47 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 2 Jan 2021 10:32:21 -0700 Subject: [PATCH 02/31] Regen now that ldap.c and sssd.c no longer need gram.h --- plugins/sudoers/Makefile.in | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index b1d4ad3957..e6373bf0c2 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -1662,10 +1662,9 @@ kerb5.i: $(authdir)/kerb5.c $(authdir)/sudo_auth.h $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< kerb5.plog: kerb5.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(authdir)/kerb5.c --i-file $< --output-file $@ -ldap.lo: $(srcdir)/ldap.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ +ldap.lo: $(srcdir)/ldap.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.h $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ @@ -1673,10 +1672,9 @@ ldap.lo: $(srcdir)/ldap.c $(devdir)/def_data.h $(devdir)/gram.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/ldap.c -ldap.i: $(srcdir)/ldap.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ +ldap.i: $(srcdir)/ldap.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.h $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ @@ -2308,10 +2306,9 @@ solaris_audit.i: $(srcdir)/solaris_audit.c $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< solaris_audit.plog: solaris_audit.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/solaris_audit.c --i-file $< --output-file $@ -sssd.lo: $(srcdir)/sssd.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ +sssd.lo: $(srcdir)/sssd.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.h $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ @@ -2319,10 +2316,9 @@ sssd.lo: $(srcdir)/sssd.c $(devdir)/def_data.h $(devdir)/gram.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sssd.c -sssd.i: $(srcdir)/sssd.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ +sssd.i: $(srcdir)/sssd.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.h $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ From 86178333853296e12b7ecfff748a28667f269150 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 2 Jan 2021 10:43:34 -0700 Subject: [PATCH 03/31] Minor fixes pointed out by cppcheck. Also add compareBoolExpressionWithInt to suppression list. --- Makefile.in | 2 +- lib/eventlog/Makefile.in | 2 +- lib/iolog/Makefile.in | 2 +- lib/logsrv/Makefile.in | 2 +- lib/util/Makefile.in | 2 +- logsrvd/Makefile.in | 2 +- plugins/audit_json/Makefile.in | 2 +- plugins/group_file/Makefile.in | 2 +- plugins/group_file/plugin_test.c | 2 +- plugins/python/Makefile.in | 2 +- plugins/sample/Makefile.in | 2 +- plugins/sample_approval/Makefile.in | 2 +- plugins/sudoers/Makefile.in | 2 +- plugins/sudoers/parse.h | 2 +- plugins/system_group/Makefile.in | 2 +- src/Makefile.in | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Makefile.in b/Makefile.in index d6b73a596b..aff53459bb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -94,7 +94,7 @@ XGETTEXT_OPTS = -F -k_ -kN_ -kU_ --copyright-holder="Todd C. Miller" \ --flag sudo_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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # Default splint options when run from the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/eventlog/Makefile.in b/lib/eventlog/Makefile.in index 08272d8d27..4774d0006e 100644 --- a/lib/eventlog/Makefile.in +++ b/lib/eventlog/Makefile.in @@ -62,7 +62,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/iolog/Makefile.in b/lib/iolog/Makefile.in index 20a840d5eb..caa3ce8704 100644 --- a/lib/iolog/Makefile.in +++ b/lib/iolog/Makefile.in @@ -64,7 +64,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 2d031efa57..02958be32a 100644 --- a/lib/logsrv/Makefile.in +++ b/lib/logsrv/Makefile.in @@ -56,7 +56,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 834d8a4ef0..7c22009642 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -92,7 +92,7 @@ SSP_LDFLAGS = @SSP_LDFLAGS@ SHLIB_VERSION = 0:0:0 # cppcheck options, usually set in the top-level Makefile -CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/logsrvd/Makefile.in b/logsrvd/Makefile.in index 2be6709819..5c174c2642 100644 --- a/logsrvd/Makefile.in +++ b/logsrvd/Makefile.in @@ -79,7 +79,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/audit_json/Makefile.in b/plugins/audit_json/Makefile.in index bd98cba5e0..db2b458048 100644 --- a/plugins/audit_json/Makefile.in +++ b/plugins/audit_json/Makefile.in @@ -69,7 +69,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/group_file/Makefile.in b/plugins/group_file/Makefile.in index f528233074..2ee66c9735 100644 --- a/plugins/group_file/Makefile.in +++ b/plugins/group_file/Makefile.in @@ -72,7 +72,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/group_file/plugin_test.c b/plugins/group_file/plugin_test.c index 701d665046..3d94e6817d 100644 --- a/plugins/group_file/plugin_test.c +++ b/plugins/group_file/plugin_test.c @@ -108,7 +108,7 @@ group_plugin_load(char *plugin_info) if (SUDO_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) { fprintf(stderr, - "%s: incompatible group plugin major version %d, expected %d\n", + "%s: incompatible group plugin major version %u, expected %d\n", path, SUDO_API_VERSION_GET_MAJOR(group_plugin->version), GROUP_API_VERSION_MAJOR); return -1; diff --git a/plugins/python/Makefile.in b/plugins/python/Makefile.in index cab41a189d..6e69972fe5 100644 --- a/plugins/python/Makefile.in +++ b/plugins/python/Makefile.in @@ -76,7 +76,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sample/Makefile.in b/plugins/sample/Makefile.in index 25a51ddb2a..60750d634f 100644 --- a/plugins/sample/Makefile.in +++ b/plugins/sample/Makefile.in @@ -71,7 +71,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sample_approval/Makefile.in b/plugins/sample_approval/Makefile.in index 86894a6252..789d397a8f 100644 --- a/plugins/sample_approval/Makefile.in +++ b/plugins/sample_approval/Makefile.in @@ -69,7 +69,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index e6373bf0c2..12721377d4 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -101,7 +101,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index 6bd2c1ebdd..a3390bc26f 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -318,7 +318,7 @@ void free_userspec(struct userspec *us); void free_userspecs(struct userspec_list *usl); void free_default(struct defaults *def, struct member_list **binding); void free_defaults(struct defaults_list *defs); -void init_parse_tree(struct sudoers_parse_tree *parse_tree, const char *shost, const char *lhost); +void init_parse_tree(struct sudoers_parse_tree *parse_tree, const char *lhost, const char *shost); void free_parse_tree(struct sudoers_parse_tree *parse_tree); void reparent_parse_tree(struct sudoers_parse_tree *new_tree); diff --git a/plugins/system_group/Makefile.in b/plugins/system_group/Makefile.in index f52518970c..3ac8ef623f 100644 --- a/plugins/system_group/Makefile.in +++ b/plugins/system_group/Makefile.in @@ -72,7 +72,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/src/Makefile.in b/src/Makefile.in index 7fbd86c7da..82c9f0efa4 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -77,7 +77,7 @@ 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 -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks From f6452c7caf9261d8cef476e8ced22b5e57e3bcd3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 2 Jan 2021 10:43:34 -0700 Subject: [PATCH 04/31] Avoid potential use after free with eventlog-only connections. Coverity CID 215884. --- logsrvd/logsrvd.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index d01c62eff6..66b84c2967 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -735,7 +735,7 @@ shutdown_cb(int unused, int what, void *v) static void server_shutdown(struct sudo_event_base *base) { - struct connection_closure *closure; + struct connection_closure *closure, *next; struct sudo_event *ev; struct timespec tv = { 0, 0 }; debug_decl(server_shutdown, SUDO_DEBUG_UTIL); @@ -745,7 +745,7 @@ server_shutdown(struct sudo_event_base *base) debug_return; } - TAILQ_FOREACH(closure, &connections, entries) { + TAILQ_FOREACH_SAFE(closure, &connections, entries, next) { closure->state = SHUTDOWN; sudo_ev_del(base, closure->read_ev); if (closure->log_io) { @@ -761,13 +761,15 @@ server_shutdown(struct sudo_event_base *base) } } - /* We need a timed event to exit even if clients time out. */ - ev = sudo_ev_alloc(-1, SUDO_EV_TIMEOUT, shutdown_cb, base); - if (ev != NULL) { - tv.tv_sec = SHUTDOWN_TIMEO; - if (sudo_ev_add(base, ev, &tv, false) == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to add shutdown event"); + if (!TAILQ_EMPTY(&connections)) { + /* We need a timed event to exit even if clients time out. */ + ev = sudo_ev_alloc(-1, SUDO_EV_TIMEOUT, shutdown_cb, base); + if (ev != NULL) { + tv.tv_sec = SHUTDOWN_TIMEO; + if (sudo_ev_add(base, ev, &tv, false) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to add shutdown event"); + } } } From 267b9a8a237f32fe291967bafe70f7c82f194d45 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 2 Jan 2021 10:43:34 -0700 Subject: [PATCH 05/31] Cannot do direct exec of a command when SELinux RBAC is enabled. --- src/exec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/exec.c b/src/exec.c index fb98f1c20c..3c4e749c17 100644 --- a/src/exec.c +++ b/src/exec.c @@ -345,7 +345,7 @@ direct_exec_allowed(struct command_details *details) debug_decl(direct_exec_allowed, SUDO_DEBUG_EXEC); /* Assumes sudo_needs_pty() was already checked. */ - if (ISSET(details->flags, CD_SET_TIMEOUT|CD_SUDOEDIT) || + if (ISSET(details->flags, CD_RBAC_ENABLED|CD_SET_TIMEOUT|CD_SUDOEDIT) || policy_plugin.u.policy->close != NULL) debug_return_bool(false); From 06bfbecd64e91153662c02731e7cef9e5a80621d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 2 Jan 2021 10:43:34 -0700 Subject: [PATCH 06/31] Add emulation of pread(3) and pwrite(3) for systems without them. This makes it possible to remove some ugly #ifdefs and only affects very old systems. --- MANIFEST | 2 ++ configure | 58 ++++++++++++++++++++++++++++++++++++++----- configure.ac | 10 +++++++- include/sudo_compat.h | 10 ++++++++ lib/util/Makefile.in | 12 +++++++++ lib/util/pread.c | 48 +++++++++++++++++++++++++++++++++++ lib/util/pwrite.c | 48 +++++++++++++++++++++++++++++++++++ scripts/mkdep.pl | 2 +- 8 files changed, 182 insertions(+), 8 deletions(-) create mode 100644 lib/util/pread.c create mode 100644 lib/util/pwrite.c diff --git a/MANIFEST b/MANIFEST index a04ca98261..623e9c452a 100644 --- a/MANIFEST +++ b/MANIFEST @@ -182,8 +182,10 @@ lib/util/nanosleep.c lib/util/openat.c lib/util/parseln.c lib/util/pipe2.c +lib/util/pread.c lib/util/progname.c lib/util/pw_dup.c +lib/util/pwrite.c lib/util/reallocarray.c lib/util/regress/fnmatch/fnm_test.c lib/util/regress/fnmatch/fnm_test.in diff --git a/configure b/configure index 192a22af14..7ea34399a6 100755 --- a/configure +++ b/configure @@ -2928,8 +2928,6 @@ as_fn_append ac_header_list " sys/statvfs.h" as_fn_append ac_func_list " fexecve" as_fn_append ac_func_list " killpg" as_fn_append ac_func_list " nl_langinfo" -as_fn_append ac_func_list " pread" -as_fn_append ac_func_list " pwrite" as_fn_append ac_func_list " faccessat" as_fn_append ac_func_list " wordexp" as_fn_append ac_func_list " getauxval" @@ -19437,10 +19435,6 @@ done - - - - case "$host_os" in hpux*) if test X"$ac_cv_func_pread" = X"yes"; then @@ -19466,6 +19460,58 @@ done fi ;; esac +for ac_func in pread +do : + ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" +if test "x$ac_cv_func_pread" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PREAD 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" pread.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS pread.$ac_objext" + ;; +esac + + + for _sym in sudo_pread; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + +fi +done + +for ac_func in pwrite +do : + ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" +if test "x$ac_cv_func_pwrite" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PWRITE 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" pwrite.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS pwrite.$ac_objext" + ;; +esac + + + for _sym in sudo_pwrite; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + +fi +done + for ac_func in cfmakeraw do : ac_fn_c_check_func "$LINENO" "cfmakeraw" "ac_cv_func_cfmakeraw" diff --git a/configure.ac b/configure.ac index 8af315d9da..7c1503fdd2 100644 --- a/configure.ac +++ b/configure.ac @@ -2641,7 +2641,7 @@ dnl dnl Function checks dnl AC_FUNC_GETGROUPS -AC_CHECK_FUNCS_ONCE([fexecve killpg nl_langinfo pread pwrite faccessat wordexp getauxval fseeko]) +AC_CHECK_FUNCS_ONCE([fexecve killpg nl_langinfo faccessat wordexp getauxval fseeko]) case "$host_os" in hpux*) if test X"$ac_cv_func_pread" = X"yes"; then @@ -2654,6 +2654,14 @@ case "$host_os" in fi ;; esac +AC_CHECK_FUNCS([pread], [], [ + AC_LIBOBJ(pread) + SUDO_APPEND_COMPAT_EXP(sudo_pread) +]) +AC_CHECK_FUNCS([pwrite], [], [ + AC_LIBOBJ(pwrite) + SUDO_APPEND_COMPAT_EXP(sudo_pwrite) +]) AC_CHECK_FUNCS([cfmakeraw], [], [ AC_LIBOBJ(cfmakeraw) SUDO_APPEND_COMPAT_EXP(sudo_cfmakeraw) diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 019a8206ed..095dd04d0c 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -595,6 +595,16 @@ sudo_dso_public int sudo_pipe2(int fildes[2], int flags); # undef pipe2 # define pipe2(_a, _b) sudo_pipe2((_a), (_b)) #endif /* HAVE_PIPE2 */ +#ifndef HAVE_PREAD +sudo_dso_public int sudo_pread(int fd, void *buf, size_t nbytes, off_t offset); +# undef pread +# define pread(_a, _b, _c, _d) sudo_pread((_a), (_b), (_c), (_d)) +#endif /* HAVE_PREAD */ +#ifndef HAVE_PWRITE +sudo_dso_public int sudo_pwrite(int fd, const void *buf, size_t nbytes, off_t offset); +# undef pwrite +# define pwrite(_a, _b, _c, _d) sudo_pwrite((_a), (_b), (_c), (_d)) +#endif /* HAVE_PWRITE */ #ifndef HAVE_UNLINKAT sudo_dso_public int sudo_unlinkat(int dfd, const char *path, int flag); # undef unlinkat diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 7c22009642..a94bfc36b0 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -985,6 +985,12 @@ pipe2.i: $(srcdir)/pipe2.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< pipe2.plog: pipe2.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/pipe2.c --i-file $< --output-file $@ +pread.lo: $(srcdir)/pread.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/pread.c +pread.i: $(srcdir)/pread.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +pread.plog: pread.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/pread.c --i-file $< --output-file $@ progname.lo: $(srcdir)/progname.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h @@ -1011,6 +1017,12 @@ pw_dup.i: $(srcdir)/pw_dup.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< pw_dup.plog: pw_dup.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/pw_dup.c --i-file $< --output-file $@ +pwrite.lo: $(srcdir)/pwrite.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/pwrite.c +pwrite.i: $(srcdir)/pwrite.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +pwrite.plog: pwrite.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/pwrite.c --i-file $< --output-file $@ reallocarray.lo: $(srcdir)/reallocarray.c $(incdir)/sudo_compat.h \ $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/reallocarray.c diff --git a/lib/util/pread.c b/lib/util/pread.c new file mode 100644 index 0000000000..9328c543a3 --- /dev/null +++ b/lib/util/pread.c @@ -0,0 +1,48 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#include +#include + +#include "sudo_compat.h" + +#if !defined(HAVE_PREAD) && !defined(HAVE_PREAD64) +ssize_t +sudo_pread(int fd, void *buf, size_t nbytes, off_t offset) +{ + ssize_t nread; + off_t old_offset; + + old_offset = lseek(fd, (off_t)0, SEEK_CUR); + if (old_offset == -1 || lseek(fd, offset, SEEK_SET) == -1) + return -1; + + nread = read(fd, buf, nbytes); + if (lseek(fd, old_offset, SEEK_SET) == -1) + return -1; + + return nread; +} +#endif /* !HAVE_PREAD && !HAVE_PREAD64 */ diff --git a/lib/util/pwrite.c b/lib/util/pwrite.c new file mode 100644 index 0000000000..48f8cbf8e3 --- /dev/null +++ b/lib/util/pwrite.c @@ -0,0 +1,48 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#include +#include + +#include "sudo_compat.h" + +#if !defined(HAVE_PWRITE) && !defined(HAVE_PWRITE64) +ssize_t +sudo_pwrite(int fd, const void *buf, size_t nbytes, off_t offset) +{ + ssize_t nwritten; + off_t old_offset; + + old_offset = lseek(fd, (off_t)0, SEEK_CUR); + if (old_offset == -1 || lseek(fd, offset, SEEK_SET) == -1) + return -1; + + nwritten = write(fd, buf, nbytes); + if (lseek(fd, old_offset, SEEK_SET) == -1) + return -1; + + return nwritten; +} +#endif /* HAVE_PWRITE && !HAVE_PWRITE64 */ diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 042342109d..1d7d53de1b 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -116,7 +116,7 @@ sub mkdep { # 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:\@DIGEST\@:digest.lo digest_openssl.lo digest_gcrypt.lo:; - $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo cfmakeraw.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; + $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo cfmakeraw.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pread.lo pwrite.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; # Parse OBJS lines my %objs; From 6e1986e91577f4ec3b8dc1787becda86d7f1ed36 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 2 Jan 2021 10:43:34 -0700 Subject: [PATCH 07/31] Remove #ifdefs around code using pread(3) and pwrite(3). --- lib/iolog/iolog_fileio.c | 3 +-- plugins/sudoers/match_command.c | 6 +----- plugins/sudoers/timestamp.c | 19 ------------------- 3 files changed, 2 insertions(+), 26 deletions(-) diff --git a/lib/iolog/iolog_fileio.c b/lib/iolog/iolog_fileio.c index 85db9193dc..34600cb8f7 100644 --- a/lib/iolog/iolog_fileio.c +++ b/lib/iolog/iolog_fileio.c @@ -591,11 +591,10 @@ iolog_open(struct iolog_file *iol, int dfd, int iofd, const char *mode) iol->compressed = iolog_compress; } else { /* check for gzip magic number */ - if (read(fd, magic, sizeof(magic)) == ssizeof(magic)) { + if (pread(fd, magic, sizeof(magic), 0) == ssizeof(magic)) { if (magic[0] == gzip_magic[0] && magic[1] == gzip_magic[1]) iol->compressed = true; } - (void)lseek(fd, 0, SEEK_SET); } (void)fcntl(fd, F_SETFD, FD_CLOEXEC); #ifdef HAVE_ZLIB_H diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index 8ad7514a73..ff8e8dc92d 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -115,14 +115,10 @@ is_script(int fd) char magic[2]; debug_decl(is_script, SUDOERS_DEBUG_MATCH); - if (read(fd, magic, 2) == 2) { + if (pread(fd, magic, 2, 0) == 2) { if (magic[0] == '#' && magic[1] == '!') ret = true; } - if (lseek(fd, (off_t)0, SEEK_SET) == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, - "unable to rewind script fd"); - } debug_return_int(ret); } diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 14ffe551e2..ace568e5a4 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -307,17 +307,7 @@ ts_write(int fd, const char *fname, struct timestamp_entry *entry, off_t offset) nwritten = write(fd, entry, entry->size); } else { old_eof = offset; -#ifdef HAVE_PWRITE nwritten = pwrite(fd, entry, entry->size, offset); -#else - if (lseek(fd, offset, SEEK_SET) == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, - "unable to seek to %lld", (long long)offset); - nwritten = -1; - } else { - nwritten = write(fd, entry, entry->size); - } -#endif } if ((size_t)nwritten != entry->size) { if (nwritten == -1) { @@ -577,16 +567,7 @@ ts_read(struct ts_cookie *cookie, struct timestamp_entry *entry) } /* Seek to the record position and read it. */ -#ifdef HAVE_PREAD nread = pread(cookie->fd, entry, sizeof(*entry), cookie->pos); -#else - if (lseek(cookie->fd, cookie->pos, SEEK_SET) == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, - "unable to seek to %lld", (long long)cookie->pos); - goto done; - } - nread = read(cookie->fd, entry, sizeof(*entry)); -#endif if (nread != sizeof(*entry)) { /* short read, should not happen */ sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, From 7f34b8bbbd1609b160ad0aeac836f169216c7e25 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 3 Jan 2021 14:29:38 -0700 Subject: [PATCH 08/31] Make sure lecture file is a regular file before reading it. --- plugins/sudoers/check.c | 62 ++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/plugins/sudoers/check.c b/plugins/sudoers/check.c index 181b5ed439..4a7bb5eddf 100644 --- a/plugins/sudoers/check.c +++ b/plugins/sudoers/check.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -231,11 +232,12 @@ check_user(int validated, int mode) static bool display_lecture(int status) { - FILE *fp; - char buf[BUFSIZ]; - ssize_t nread; struct sudo_conv_message msg; struct sudo_conv_reply repl; + char buf[BUFSIZ]; + struct stat sb; + ssize_t nread; + int fd; debug_decl(lecture, SUDOERS_DEBUG_AUTH); if (def_lecture == never || @@ -245,24 +247,46 @@ display_lecture(int status) memset(&msg, 0, sizeof(msg)); memset(&repl, 0, sizeof(repl)); - if (def_lecture_file && (fp = fopen(def_lecture_file, "r")) != NULL) { - while ((nread = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) != 0) { - buf[nread] = '\0'; - msg.msg_type = SUDO_CONV_ERROR_MSG|SUDO_CONV_PREFER_TTY; - msg.msg = buf; - sudo_conv(1, &msg, &repl, NULL); + if (def_lecture_file) { + fd = open(def_lecture_file, O_RDONLY|O_NONBLOCK); + if (fd != -1 && fstat(fd, &sb) == 0) { + if (S_ISREG(sb.st_mode)) { + (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); + while ((nread = read(fd, buf, sizeof(buf) - 1)) > 0) { + buf[nread] = '\0'; + msg.msg_type = SUDO_CONV_ERROR_MSG|SUDO_CONV_PREFER_TTY; + msg.msg = buf; + sudo_conv(1, &msg, &repl, NULL); + } + close(fd); + if (nread == -1) { + log_warning(SLOG_RAW_MSG, + N_("error reading lecture file %s"), def_lecture_file); + debug_return_bool(false); + } + debug_return_bool(true); + } else { + log_warningx(SLOG_RAW_MSG, + N_("ignoring lecture file %s: not a regular file"), + def_lecture_file); + } + } else { + log_warning(SLOG_RAW_MSG|SLOG_NO_STDERR, N_("unable to open %s"), + def_lecture_file); } - fclose(fp); - } else { - msg.msg_type = SUDO_CONV_ERROR_MSG|SUDO_CONV_PREFER_TTY; - msg.msg = _("\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"); - sudo_conv(1, &msg, &repl, NULL); + if (fd != -1) + close(fd); } + + /* Default sudo lecture. */ + msg.msg_type = SUDO_CONV_ERROR_MSG|SUDO_CONV_PREFER_TTY; + msg.msg = _("\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"); + sudo_conv(1, &msg, &repl, NULL); debug_return_bool(true); } From 4ea6f73060c6b7c7fc24fbff78fc4c89a828e30f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 4 Jan 2021 14:48:42 -0700 Subject: [PATCH 09/31] Fix a crash introduced in 1.9.4 when running "sudo -i" as an unknown user. --- plugins/sudoers/logging.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index e0d46280c4..776f881e5d 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -669,7 +669,7 @@ sudoers_to_eventlog(struct eventlog *evlog, char * const argv[], } if (def_runcwd && strcmp(def_runcwd, "*") != 0) { evlog->runcwd = def_runcwd; - } else if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { + } else if (ISSET(sudo_mode, MODE_LOGIN_SHELL) && runas_pw != NULL) { evlog->runcwd = runas_pw->pw_dir; } else { evlog->runcwd = user_cwd; From 741cf082a358120dcbbe1005bd794bad157e4e10 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 4 Jan 2021 14:48:43 -0700 Subject: [PATCH 10/31] Use debug_return_int() not debug_return_bool() to return -1. Found by PVS Studio. --- plugins/sudoers/sudoers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 670a7d7154..d6eddd000d 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -296,7 +296,7 @@ check_user_runchroot(void) free(def_runchroot); if ((def_runchroot = strdup(user_runchroot)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_bool(-1); + debug_return_int(-1); } debug_return_bool(true); } From 295f099cfcdf14d44e5e14c1be36fb1da4c10dbf Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 10:12:40 -0700 Subject: [PATCH 11/31] Updated translations from translationproject.org --- plugins/sudoers/po/hr.mo | Bin 66386 -> 66396 bytes plugins/sudoers/po/hr.po | 8 +- plugins/sudoers/po/it.mo | Bin 64593 -> 65353 bytes plugins/sudoers/po/it.po | 1445 ++++++++++++++++--------------- plugins/sudoers/po/ko.mo | Bin 65531 -> 67838 bytes plugins/sudoers/po/ko.po | 1723 +++++++++++++++++++------------------ plugins/sudoers/po/sr.mo | Bin 81537 -> 84383 bytes plugins/sudoers/po/sr.po | 1722 +++++++++++++++++++------------------ plugins/sudoers/po/sv.mo | Bin 61285 -> 63549 bytes plugins/sudoers/po/sv.po | 1737 ++++++++++++++++++++------------------ po/ko.mo | Bin 22179 -> 22619 bytes po/ko.po | 253 +++--- po/sr.mo | Bin 26799 -> 27300 bytes po/sr.po | 254 +++--- po/sv.mo | Bin 20271 -> 20604 bytes po/sv.po | 297 ++++--- 16 files changed, 3936 insertions(+), 3503 deletions(-) diff --git a/plugins/sudoers/po/hr.mo b/plugins/sudoers/po/hr.mo index f0fc734899604a4eaf37665a2ac471b0be156318..618c68e0f820610515e8612e619df365ab87ce5f 100644 GIT binary patch delta 4561 zcmXZec~n-%8OQMfmtfQ=iztimiVDako2a-z1dmH-1e(~?s6`WN2{9;|XwQjxZH=~( zQ#}EvFH-yd`T`pom(J9lQDnR(&l!qyiT zwytRQcIUJ<=4`1kt2~V9v(lL3p2mFpi7^w1SN_!)Z)41(RmS+E*J@*$F%&yu@ET(} zU=-@T{@58up%;$BP<#VB;e3q5QjEYoYmB=k@jZzo5*^pl8DB)bSd6`J2L|AIRL6(d z4TIJhGX|3}9Y4h0_>JQobP;>6=Uq(1ID8qq;N10YWBh28lF$sxoCmwG9r1Sl3iaWMsDb{1nYbB;;62pBVm26)g72XgxXn!?nZ_CHf$cZi2eGJ? zj>TyF0QKQ5=z|AP6*!M!_#=j6m%rQh2BZ4FhRV;wp|}Y(@J%Q0?zG94E(N1_FdH?) z^*9jEV<7sL8Iyos>F5J51-#^C!CHdaRF+=n^9-tI<~>2a(jjbVgd0)Cq9g`7~kBd zF`5T&ZsXwLc2r3pU{Cb>)RuApW)bJ%FL4`=M33z@KN{1CS6~jFLzO(L!cI6JRf#ni zfd??1@y$INW3X?foq!vA6Ys~a*nrxSXZRYXd}d3%1mlPgVqa`Tl{lix4)i*zvVTNX zupHB|0sS#@2ldaTkw!y%SArVo2x^9&JMD*}Fr7FDl`lc9>9=ozPFq!xxjKaOBmES_0 zmB?zlC2yggf8}@&UBm%4$jdwO@FR`Li#F?64uc^bNiXX0R7 ziYoaDY=@0F6g~Fa!~(fep`pE6fg0cd_QF78;A`7|GNzLM7&G)7Rr=1~*!MFrM9)!Yt^%pF+q61hOgxD+)Q6|z zFs#NvG~e3iL6}0Ag~YWz+!LdTr{WMSMfE#@nxNMqTY(I8>HaTnX>jjR z9gkxsHsf%7@v!wz=tEqKId~QI;lv~S<->f8#dS`64Eqp2chqie0%}6zP~TmNBN*RY zrqLb4YwZtDCiWzriuzzNM&NGr#%t({5AhXz?mMm|jz>-CKK8@#V|I_nqqc4_>M-v| zZS^B`E0J{E4)i;GiFi3?V?AmQlTO$VPQ^6hRoE9V;YjRw(!MtqRf$EYmDixo!d;BQ z_)~VA*HQgGIz|24(>O^&9WUcR^#7Obn2r9#OHmcsir#n(N8vS0#^}?O67w(!%TWEk zcH%nJgc?y3>T$-Nttn@ye<+E0By>2|qT)L2icRQ)zGt11VkGf+jK&2Ri_qyYRyq{5$FJgGoP$GfC#K^==Xr9yoye~+nDNcKH1y#T)Cwz6TT+W&=y}~9uJ-6l zJOq1Vj^k_$BVL87)IQXA>agY1qbktjd)qGywa_ATXV6$dBUBwwFE(K?hTpK)Edy1$ zS1}D|qAF8`>VE-s3qo$%Ey%(G;^|I&5p{S?gWcj7)ZzU_1NHAs;{y^Z@dix76R16I z^KbjNAQ07I0*=AOs0v+1trZ_hw9>boOQXXG6Wz>iUtac`wD zoW>zk$4>vTA5L{FMBVQV7>SoqXQk}}Tgq_kOPr0dI1e@8r>F&-#&~RUjQP>#Ctxqe zH}h#|#br1Ok7F(dKD0lP(@=+TBhtatpblXJYC;kJwJXiWRN}X>2W~8 znUmjxF5)vzz7d0n+y87U8iD%3%leu6r_(4PF&N8HAH0SB*o1-T^VAxP+Vhd9t(k#3 z)yq+p*o~@G9d<{rXV!2WK%9w*I2Ze2#WT14Yju-^IzGh|j5Z!E6Pk>=9cxhc_Xg^@ zw}(f|mW@Q6g?XqF*P<%X)zhP83!^cPIM?wHs7h3zZq3ooGAzaZ&J~ucix&*dOInkwAC{2D(_{#_4Lf2S@ruBfmw3d_3F_714m?C A-v9sr delta 4549 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 delta 12463 zcmYk?33yFMAII?%l2{^$Sb~t7T|`1+S0vV0O3>)ueRv5 z)KXMcYptzRsj4cqR$H{T_Wk}c<9(gy`TNYwIcLtyf99MdeY)?Tf=B-@=ss7!S$VA5}iKDF3umtr5SPIwJ`VMSS&~Xl9O<%_;o$NS0eH^D% z9mknYf2-;`PF?D?8<_qEJ(YjI+ZjXQ5gpCO;yAOR;{@V+$XJ{YQ3Ke4h4C8<#qUr9 zxr6cO*T`|gFbN~EBgWw{tdEN@1W#iO{()s3x8sy=%xGz-fx4gtw!|KoipxCr zNRpgMSPef%vg_Q$subTO$l>YSuClRd0eW?0~v) z2xR;Z+RBux5@Eg-tL4`=OR<4r+kwQ4>3h%2eUz)pO8=GcgL+p$7gf>Vem=C>CUWldyP8x0y*Q4N7$% z)Xb)%QoPoB7PX0rq_NSk8EWlYBm2+ki;=hl`{I|_1go|(_YK5K)K_3d+=IIRyqkh9 ze1K%dY1GBDsOu>R}c&)G*@+LVWkT=X(i+b<{R3`n~nkA`%y01Id!-c4c zokV5g9%_%cgPvv<6jD)ZH4W9_O4I`mU>yE~8hMp==6rKh3j3on@E_Fo;1n_z=PGJR zYPUCQ-x)Q4vFO63ScB&~dnjmE-a)<%PU&>BcIlW(eJEDPjTn!=pi&pq!DOf!YEKM6 z4fK7~j1Qs)=GW1@&P`Dnd>w=FGmO^zf0TkY%U`HWgmyBi>4zHFT&#^7a0p&SJ*e9= zX26qC_kWJDcnP`0DgG?Wi5ZxHi%{neq3*wfRe8P>*4b>nHmD2oFclZr_OqxZ@q5mk zkHci@9Z{QdB5JL7;0*i+^}y-Rn^bQ_E$tbshJT}$GWrGbUz0);3eh+Wi{b*Tf-6uN z_y$YkO$@<;FPaC0qONO$8b}@{;zzdqtktiJnQ^8o ztGOW)d6S%(sDYfq8h97$Vr)0F7kXlC>Z4HuT8En0Y1G>l*xl@fbPS?C9hK?#x|4sU zWG@Z6;ZJL950kR4sE$XXZur>NPonNC*3Df`aQqyViJvhAEA}=s?uzB9FGTgT87t%W z)_bTu;Bst?_4%A>iAJIZwhZ;)gQ!h*6SX9vnI4nfgl$nB zzlN3YZLESDFcg2lV7!kdvG@R!xiBp6rlB1LrR*hi;dG3}k5CW%7S+LZtbooyGq8%N zdTrFeJD@h-2&)G*ptYz0A3|m925Ml%29bX~AdZ3yQ&A@}tYc6!S%7-L9*n?i7>UKR z9fz;6lZ=|ccvSmJ)c4{5mcjF=f!)QbSSrW#(| zm7<5JnZ=DT^-h>f-HpZY6HLOL*cpFE?VYrdW^W9^a@1#_2EH7Xxt;d>1ym;f!6=^Z z1dTGgzYglc=TS>C8a2bYSROw?oj-_W@i){A{YRUnOF#|0CF%>AgBs{;)b(GWuKyl2 zK%ZC00MB>IQ;5bUs0X}+E}VuMz#3HQzqVdNt)1_yracPvS~W$r4??|;GpwJW25<^p zcoQ{%60ecf(iCDTgkVF|T6RVkPDXXS61C>XP^tR~E8uNZ$0f#?HI6}jxZ0p5l#8MG zj&&m{lgCikT^~dKD^Vy-8gyYYx-cEJ7xa2I!-W`+KVcaR9BXDCiHX#k*!o}$qW&gU z#Kjnn+im@vt=~sYBy=1d>W1p$%Nl?R!xJzknLJGv1`U5^A$H z#acKF)&B>m3~xte?ps^G<)#o$Ly-yQ#&}eUdZ1=H5=-Kns0S@VEy;FNMlM@}Cz^T+ z>TMc;wb6|(+=v?RNz{ODqn6t3Kgks8Vr3foTc@BNxB@khFEA2MqcZXcHLx<1O)6th z9oM(EMcvmOmC-!gJ`;8S5+oyTXA1>wqGPDkT(SC2F+X<0P!Fn(>L}IP4f8XE`AdZP zON5%~UQ}i;qVDsbY9f5Lr!d^FD@>rCffs!Eg#@)Ha%Y$U zPRA0|7o!Hg4wa#UIJ+R9Y@FcB#Afq10{8zpmshX=zjDuGAk@#zH}@A=K>n5b@)Yi3 z4GhHCca61CYuXI;fX-ML`=L^tW7}t70`>P$nL3E^_z?9LR9R^LChU%S-YTquI~S7w zPzt}&pc(qTXZAoCK25y=HpD5Y)a^la_!sK>YKzPgv_w64FzPj1j2ieBRHhD~_R1M7 zg1=)dK3L>7GmTtqeyk>;zI64lF{Ys&JQ=mgwqPqfifXU0#QbvE4wI&Y`FQZ<=8K@MmLUp(sb>m%Zfk`V&$0JY!Sb#1( zjrjwy#;i22T_@D}94v~nu&&H(9n74AVl3|wtqyI{$rPdcAH@(5_7Q#H?*Q z)Pp>jj$1Jni+atMEE#oucYGFK!&E$mH8FUDnQ$#EqE2Vif zq~OQc0dJx@O4(#SGfRr(5HO)uqA2$@1X8KgYg)= z#bhvL3;C~4!w?$uz%`hRKcZ4tYOA@SE9!w$upVwgt?_TDfhTM;4<3XcQ~watui7m#f{h!-RCK&qu5<$6LmqQY!T{px`6F4;B&JFUc^-D<4`l)je4z$ z?l!x-IyRu*4KWMuumUc|aGvjMqfiQez|MFJ-^Z5w z%_h5oN@eT;lbIJWhWY~3z;jOBjmT6~4MyQ$Tc3-%f17Q;Y%TV!S^Ffc z#rZC%na@PszsXHOBR^vs?qeABu#?6V)Qvr@b5I%Dhnm4{Ov9*CrsILA%y>`}+lI>U zkErL|$C_CFJF`dJ?Iw$qoQoRa+qS;ZT;QCx^@muV^R6>yrVUU7&OqJw7Sf@! z9?Rhg)b-a<*ZH3{KLhHbmNo~g=>1J@{wSPb*X=Uczvki1l%WZ9k7Cs6YCd{D)Bpyl9pn0rh%yMD6ks z7>DnpIy`9WSM2%VU(A{|My=^^)C88H2K*y7!?Kr5e_gOH^+~7+es;-iMs}5kL>i(l zo76vpdhi6)06#((9>NH`X$|_-Y{pus*QzV3pP5(%ccA*Yj9UAkE9UyDsPi4&6tp=; zV?}%mQ}APq!<(p%L#~=V@-%7>^h3>fB5LVAL2b^XsHG`*&CIkO>Oq51GoFuH`@N|C z-9J&#i~_EkwMs;t=zwi;G&aY*s5K0@VFua)W2k3f6i!9m_YrDBr%-$6H`IMqZkmDj zMs4n~$aCG!Ituz=97m<-3aaA*znL|QLoLCxwmuXisV_oZ_XSqRtEjcDaLfEm=!B`% z=b~QElc>zyz^WMVyE4c6*P);pbVhBS(WnP*MD5;hQ62n+nql!jOsealHrdP8C8*SY zhuW-xf12MXs-oHlqn2_xs{hm2g6BK;C^W^C+h&uE$5`r1F#!*t*6beE!qRt4rdnf3 z>b)@-^DqdfU@4rBn(>FIJ+dD)kt?VH=x=_vQt6_g3!0-&^s!Drb-WbI;$}?5!`4Tb zM7`Qy#vZ68nT6VPn^6-vkJ@8}|29h(kIB^2|0e(Ha6AnzT#q4m46ETatc@Y}%x^;N zu_5*8SQGbQDn3H3Y2*7Q7Y4^)5t56lE=T6;er|M8rdO@mVV87gIeU@De; z$bYBB?})n;3KJ`d4%9y{-muD(Txb<{;sIwgu!v2 zrtl_>PuUZ%Alb@KyRNxn+kLPHbvC!di{QLZU2nrWj3)|FRwln9a*4;sOBBj*{s5ul z8{!S3r^-Hh|2SCY{ItK!MW5ui@Get6O3Wmt5*KXyd8=4X`%|`l_KEfo%C8X56XDF7 zPecBnWk=A>J&%YJguXxd$723{k=RVUK-4Afb3qM4|7X+~)YtIw@f?M|#Op*k&Tq}{ z?D1Li3r93_zh_x1f9t-y{|ikB=WI z+~izS+fd7@kJxCUKJho_Z`yW|Ner-kx5E0wJNEn;t$#}z^aDdjC7T76r|2J!ImBMB z3A5)WQy!Lo#{8Es74>ziXWM+aj_;O}&UHHY`Z`}wE=#-qd+=bQIx&cL_X7%_=_-!a zlv`pMVhHgOF^Nc`{qYe)C+%(h)5neYgDnroKZy=pv%)rMLe8Bfs?up8qBmt7nfN`yFS(A3C`P%wg7Ru2 zjB;_}Jz_U;fHoZiDeLHr?xFnCjQEjgNaF+I3}qJ&x<`3Gp<@8ikNB4Ona~l$b?=#? zGaVNZlW2>=A()J9@gt%P{hh`Sh@!NYB(n7V-$6mgIZjl^!^A<#X+%M8Doj)%8qw~h z?JMFn%BiShrNLQljpAAzzMS7cOrtyqyWy`yAmz2V8PDteUrIs8MPeW20z?Vh$u)Z} znsZ+hpHt5!W>Vfp6eD&}zf9Dm>`Ul)j=GMb^fMRVCPHo7t7@mb6z%@!rxOkT5VL6e z7a!>)M+M3{z95d<^6OZdj(h0@#{%lP#8rE~6>a4?-^A8+%`VD;v~|bk)VmYYDJOr% zKc@&C(OhtWvLDfjh_UU@TD4hs`gnX2f>k<2j3S<~XR|1mu;nI{-zBC|55^B|`(?`g zD8E4X@iZNA7-!F4r+%AArhX7x6D4(yYZ7pnz0Td0wl9h8Gz8ejbm|)k9fOGxw8z?W zYI~NbOh=)_ZZ$k{{Kj>&i7vKnr1g6&Nc((Z9x;p9`1seBx2R-4(TR#L()I>1gP2IY z*%Rk;o+xj6qCB3mKZ82-xQ%OZ>x_R;5624B+hK2Fr`G==Cv?OTy=*y> zaw6sbU|HL?##)57^~5jK#}maV>sU>BJ8sRdF(`Yzs&{PL7+hl8qjc|2G<-{;aekw> zadl6*Layk%qE2+4=UmG=o^olCo0ZojU4PVNc?Oa^Af0WBj~9QwR7Jtl2x+4tu+J_uW%n3l_*3>?wJsg*WF+ sfRFc`vug``C;jqjfM?9zK>ywYbNckj@qGAKjMwM)X9{`UfA9DIFUVnQE&u=k diff --git a/plugins/sudoers/po/it.po b/plugins/sudoers/po/it.po index 5f977d6c3a..e3a1cae5dd 100644 --- a/plugins/sudoers/po/it.po +++ b/plugins/sudoers/po/it.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.9.3b2\n" +"Project-Id-Version: sudoers-1.9.4b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-14 06:53-0600\n" -"PO-Revision-Date: 2020-09-28 09:10+0200\n" +"POT-Creation-Date: 2020-11-14 06:24-0700\n" +"PO-Revision-Date: 2020-12-03 09:48+0100\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -19,7 +19,7 @@ msgstr "" "X-Generator: Poedit 2.4.1\n" "X-Poedit-SourceCharset: UTF-8\n" -#: confstr.sh:1 +#: confstr.sh:1 gram.y:1077 msgid "syntax error" msgstr "errore di sintassi" @@ -43,70 +43,70 @@ msgstr "*** Informazioni di SICUREZZA per %h ***" msgid "Sorry, try again." msgstr "Riprovare." -#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 -#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 -#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 -#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 -#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 -#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 -#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 -#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 -#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 -#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 -#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 -#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 -#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 -#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 -#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 -#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 -#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 -#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 -#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 -#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 -#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 -#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 -#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 -#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 -#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 -#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 -#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 -#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 -#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 -#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 -#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 -#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 -#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 -#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 -#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 +#: gram.y:220 gram.y:286 gram.y:293 gram.y:300 gram.y:307 gram.y:314 +#: gram.y:334 gram.y:358 gram.y:365 gram.y:372 gram.y:379 gram.y:386 +#: gram.y:455 gram.y:464 gram.y:475 gram.y:510 gram.y:517 gram.y:524 +#: gram.y:531 gram.y:558 gram.y:654 gram.y:661 gram.y:670 gram.y:679 +#: gram.y:696 gram.y:834 gram.y:841 gram.y:849 gram.y:855 gram.y:971 +#: gram.y:978 gram.y:985 gram.y:992 gram.y:999 gram.y:1025 gram.y:1032 +#: gram.y:1039 gram.y:1236 gram.y:1526 lib/eventlog/eventlog.c:280 +#: lib/eventlog/eventlog.c:352 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:817 lib/eventlog/eventlog.c:1062 +#: lib/iolog/iolog_fileio.c:998 lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:305 lib/iolog/iolog_json.c:335 +#: lib/iolog/iolog_json.c:457 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/sendlog.c:480 +#: plugins/sudoers/alias.c:126 plugins/sudoers/alias.c:134 +#: plugins/sudoers/alias.c:153 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/bsdauth.c:143 +#: plugins/sudoers/auth/kerb5.c:118 plugins/sudoers/auth/kerb5.c:144 +#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/cvtsudoers.c:119 +#: plugins/sudoers/cvtsudoers.c:160 plugins/sudoers/cvtsudoers.c:177 +#: plugins/sudoers/cvtsudoers.c:188 plugins/sudoers/cvtsudoers.c:300 +#: plugins/sudoers/cvtsudoers.c:428 plugins/sudoers/cvtsudoers.c:561 +#: plugins/sudoers/cvtsudoers.c:578 plugins/sudoers/cvtsudoers.c:641 +#: plugins/sudoers/cvtsudoers.c:756 plugins/sudoers/cvtsudoers.c:764 +#: plugins/sudoers/cvtsudoers.c:1178 plugins/sudoers/cvtsudoers.c:1182 +#: plugins/sudoers/cvtsudoers.c:1284 plugins/sudoers/cvtsudoers_json.c:76 +#: plugins/sudoers/cvtsudoers_ldif.c:151 plugins/sudoers/cvtsudoers_ldif.c:194 +#: plugins/sudoers/cvtsudoers_ldif.c:235 plugins/sudoers/cvtsudoers_ldif.c:300 +#: plugins/sudoers/cvtsudoers_ldif.c:371 plugins/sudoers/cvtsudoers_ldif.c:421 +#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:440 +#: plugins/sudoers/cvtsudoers_ldif.c:447 plugins/sudoers/cvtsudoers_ldif.c:460 +#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:615 +#: plugins/sudoers/defaults.c:630 plugins/sudoers/defaults.c:923 +#: plugins/sudoers/defaults.c:1098 plugins/sudoers/editor.c:181 +#: plugins/sudoers/env.c:261 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 +#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:596 +#: plugins/sudoers/iolog.c:613 plugins/sudoers/ldap.c:184 +#: plugins/sudoers/ldap.c:422 plugins/sudoers/ldap.c:432 +#: plugins/sudoers/ldap.c:437 plugins/sudoers/ldap.c:441 +#: plugins/sudoers/ldap.c:453 plugins/sudoers/ldap.c:744 +#: plugins/sudoers/ldap.c:908 plugins/sudoers/ldap.c:1281 +#: plugins/sudoers/ldap.c:1709 plugins/sudoers/ldap.c:1746 +#: plugins/sudoers/ldap.c:1827 plugins/sudoers/ldap.c:1962 +#: plugins/sudoers/ldap.c:2063 plugins/sudoers/ldap.c:2079 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 -#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 -#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 -#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 -#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 -#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/log_client.c:105 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:166 +#: plugins/sudoers/logging.c:426 plugins/sudoers/logging.c:446 +#: plugins/sudoers/logging.c:527 plugins/sudoers/match_command.c:281 +#: plugins/sudoers/match_command.c:449 plugins/sudoers/match_command.c:499 +#: plugins/sudoers/match_command.c:573 plugins/sudoers/match_digest.c:93 #: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 #: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 #: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 @@ -119,27 +119,27 @@ msgstr "Riprovare." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 -#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 #: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 #: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 #: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 #: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 #: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 -#: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 -#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 -#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 -#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 -#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 -#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 -#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 -#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 -#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 -#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:407 +#: plugins/sudoers/sssd.c:470 plugins/sudoers/sssd.c:514 +#: plugins/sudoers/sssd.c:561 plugins/sudoers/sssd.c:754 +#: plugins/sudoers/stubs.c:110 plugins/sudoers/stubs.c:118 +#: plugins/sudoers/sudoers.c:300 plugins/sudoers/sudoers.c:326 +#: plugins/sudoers/sudoers.c:370 plugins/sudoers/sudoers.c:381 +#: plugins/sudoers/sudoers.c:391 plugins/sudoers/sudoers.c:433 +#: plugins/sudoers/sudoers.c:794 plugins/sudoers/sudoers.c:927 +#: plugins/sudoers/sudoers.c:961 plugins/sudoers/sudoers.c:1265 +#: plugins/sudoers/sudoreplay.c:552 plugins/sudoers/sudoreplay.c:555 +#: plugins/sudoers/sudoreplay.c:1259 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/sudoreplay.c:1473 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/testsudoers.c:587 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 @@ -147,53 +147,60 @@ msgstr "Riprovare." #: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 #: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 #: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 -#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 +#: plugins/sudoers/visudo.c:1129 toke.l:913 toke.l:1033 toke.l:1091 msgid "unable to allocate memory" msgstr "impossibile allocare memoria" -#: gram.y:550 +#: gram.y:552 msgid "a digest requires a path name" msgstr "un digest richiede il nome di percorso" -#: gram.y:579 +#: gram.y:581 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "i valori per \"CWD\" devono iniziare con un carattere \"/\", \"~\" o \"*\"" -#: gram.y:591 +#: gram.y:593 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "i valori per \"CHROOT\" devono iniziare con un carattere \"/\", \"~\" o \"*\"" #: gram.y:715 +#, c-format +msgid "syntax error, reserved word %s used as an alias name" +msgstr "errore di sintassi, parola riservata %s utilizzata come alias" + +#: gram.y:735 msgid "invalid notbefore value" msgstr "valore notbefore non valido" -#: gram.y:723 +#: gram.y:743 msgid "invalid notafter value" msgstr "valore notafter non valido" -#: gram.y:732 plugins/sudoers/policy.c:330 +#: gram.y:752 plugins/sudoers/policy.c:335 msgid "timeout value too large" msgstr "valore timeout troppo grande" -#: gram.y:734 plugins/sudoers/policy.c:332 +#: gram.y:754 plugins/sudoers/policy.c:337 msgid "invalid timeout value" msgstr "valore timeout non valido" -#: gram.y:1041 -#, c-format -msgid "%s:%d: %s\n" -msgstr "%s:%d: %s\n" - -#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 -#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 -#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 -#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 -#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 -#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 -#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 -#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 +#: gram.y:1079 +#, c-format +msgid "%s:%d:%d: %s\n" +msgstr "%s:%d:%d: %s\n" + +#: gram.y:1526 lib/eventlog/eventlog.c:280 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:815 lib/eventlog/eventlog.c:816 +#: lib/eventlog/eventlog.c:1062 lib/iolog/iolog_fileio.c:998 +#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:335 lib/iolog/iolog_json.c:457 +#: lib/iolog/iolog_json.c:735 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/logsrvd.c:1280 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1338 logsrvd/sendlog.c:480 logsrvd/sendlog.c:1321 +#: logsrvd/sendlog.c:1328 logsrvd/sendlog.c:1746 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 #: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 #: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 @@ -208,93 +215,144 @@ msgstr "%s:%d: %s\n" #: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 #: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 #: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 -#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 -#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:630 +#: plugins/sudoers/defaults.c:923 plugins/sudoers/defaults.c:1098 +#: plugins/sudoers/editor.c:181 plugins/sudoers/env.c:261 #: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 #: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 #: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 -#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 -#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 -#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 -#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 -#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 -#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 -#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 -#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 -#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 -#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 -#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 -#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 -#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/iolog.c:596 plugins/sudoers/iolog.c:613 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:422 +#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:437 +#: plugins/sudoers/ldap.c:441 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:744 plugins/sudoers/ldap.c:908 +#: plugins/sudoers/ldap.c:1281 plugins/sudoers/ldap.c:1709 +#: plugins/sudoers/ldap.c:1746 plugins/sudoers/ldap.c:1827 +#: plugins/sudoers/ldap.c:1962 plugins/sudoers/ldap.c:2063 +#: plugins/sudoers/ldap.c:2079 plugins/sudoers/ldap_conf.c:218 #: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 #: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 #: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 #: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 #: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 -#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 -#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 -#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 -#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 -#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 -#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 -#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 -#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 -#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 -#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 -#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 -#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 -#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 -#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 -#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 -#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 -#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 -#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 -#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 -#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 -#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 -#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 -#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 -#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 -#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 -#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 -#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 -#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 -#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 -#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 -#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 -#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 -#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 -#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 -#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 -#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 -#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 -#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 -#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 -#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 -#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 -#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 -#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 -#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 -#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:603 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/log_client.c:105 +#: plugins/sudoers/log_client.c:214 plugins/sudoers/log_client.c:235 +#: plugins/sudoers/log_client.c:248 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:165 +#: plugins/sudoers/logging.c:166 plugins/sudoers/logging.c:425 +#: plugins/sudoers/logging.c:445 plugins/sudoers/logging.c:527 +#: plugins/sudoers/match_command.c:280 plugins/sudoers/match_command.c:448 +#: plugins/sudoers/match_command.c:498 plugins/sudoers/match_command.c:573 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:198 +#: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:229 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:274 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 +#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 +#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 +#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 +#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 +#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 +#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 +#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 +#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:148 +#: plugins/sudoers/policy.c:157 plugins/sudoers/policy.c:183 +#: plugins/sudoers/policy.c:320 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:337 plugins/sudoers/policy.c:366 +#: plugins/sudoers/policy.c:375 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:428 plugins/sudoers/policy.c:437 +#: plugins/sudoers/policy.c:446 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 +#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 +#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:144 +#: plugins/sudoers/sssd.c:407 plugins/sudoers/sssd.c:470 +#: plugins/sudoers/sssd.c:514 plugins/sudoers/sssd.c:561 +#: plugins/sudoers/sssd.c:754 plugins/sudoers/stubs.c:110 +#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:300 +#: plugins/sudoers/sudoers.c:326 plugins/sudoers/sudoers.c:370 +#: plugins/sudoers/sudoers.c:381 plugins/sudoers/sudoers.c:391 +#: plugins/sudoers/sudoers.c:433 plugins/sudoers/sudoers.c:794 +#: plugins/sudoers/sudoers.c:927 plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:1265 plugins/sudoers/sudoreplay.c:552 +#: plugins/sudoers/sudoreplay.c:555 plugins/sudoers/sudoreplay.c:1259 +#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/sudoreplay.c:1473 +#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:587 +#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 +#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 +#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 +#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:145 plugins/sudoers/visudo.c:323 +#: plugins/sudoers/visudo.c:329 plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:615 plugins/sudoers/visudo.c:935 +#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:913 +#: toke.l:1033 toke.l:1091 #, c-format msgid "%s: %s" msgstr "%s: %s" +#: lib/eventlog/eventlog.c:285 lib/iolog/iolog_json.c:463 +#: lib/iolog/iolog_json.c:466 lib/iolog/iolog_json.c:468 +#: lib/iolog/iolog_json.c:560 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 +#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/ldap.c:517 plugins/sudoers/ldap.c:748 +#: plugins/sudoers/ldap.c:1081 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:90 +#: plugins/sudoers/policy.c:556 plugins/sudoers/policy.c:711 +#: plugins/sudoers/policy.c:721 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:983 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/toke_util.c:169 +#, c-format +msgid "internal error, %s overflow" +msgstr "errore interno, overflow di %s" + +#: lib/eventlog/eventlog.c:343 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "impossibile eseguire dup sullo stdin: %m" + +#: lib/eventlog/eventlog.c:388 +#, c-format +msgid "unable to execute %s: %m" +msgstr "impossibile eseguire %s: %m" + +#: lib/eventlog/eventlog.c:428 plugins/sudoers/auth/aix_auth.c:198 +msgid "unable to fork" +msgstr "impossibile eseguire fork" + +#: lib/eventlog/eventlog.c:436 lib/eventlog/eventlog.c:490 +#, c-format +msgid "unable to fork: %m" +msgstr "impossibile eseguire fork: %m" + +#: lib/eventlog/eventlog.c:480 +#, c-format +msgid "unable to open pipe: %m" +msgstr "impossibile aprire una pipe: %m" + +#: lib/eventlog/eventlog.c:894 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: lib/eventlog/eventlog.c:923 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (comando continuato) %s" + #: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" @@ -312,132 +370,104 @@ msgstr "impossibile creare la directory %s" msgid "unable to change mode of %s to 0%o" msgstr "impossibile modificare la modalità di %s a 0%o" -#: lib/iolog/iolog_json.c:113 +#: lib/iolog/iolog_json.c:114 #, c-format msgid "expected JSON_STRING, got %d" msgstr "atteso JSON_STRING, ottenuto %d" -#: lib/iolog/iolog_json.c:326 +#: lib/iolog/iolog_json.c:327 msgid "missing double quote in name" msgstr "virgolette doppie mancanti nel nome" -#: lib/iolog/iolog_json.c:413 +#: lib/iolog/iolog_json.c:414 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "atteso JSON_OBJECT, ottenuto %d" -#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 -#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 -#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 -#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 -#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 -#: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 -#: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 -#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 -#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 -#: plugins/sudoers/toke_util.c:169 -#, c-format -msgid "internal error, %s overflow" -msgstr "errore interno, overflow di %s" - -#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 +#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:753 msgid "unmatched close brace" msgstr "parentesi graffa di chiusura senza corrispondenza" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:638 msgid "unexpected array" msgstr "array non atteso" -#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 +#: lib/iolog/iolog_json.c:651 lib/iolog/iolog_json.c:755 msgid "unmatched close bracket" msgstr "parentesi quadra di chiusura senza corrispondenza" -#: lib/iolog/iolog_json.c:658 +#: lib/iolog/iolog_json.c:659 msgid "unexpected string" msgstr "stringa non attesa" -#: lib/iolog/iolog_json.c:668 +#: lib/iolog/iolog_json.c:669 msgid "missing colon after name" msgstr "due punti mancanti dopo il nome" -#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 -#: lib/iolog/iolog_json.c:709 +#: lib/iolog/iolog_json.c:680 lib/iolog/iolog_json.c:695 +#: lib/iolog/iolog_json.c:710 msgid "unexpected boolean" msgstr "booleano non atteso" -#: lib/iolog/iolog_json.c:725 +#: lib/iolog/iolog_json.c:726 msgid "unexpected number" msgstr "numero non atteso" -#: lib/iolog/iolog_json.c:762 +#: lib/iolog/iolog_json.c:763 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u impossibile analizzare \"%s\"" -#: lib/iolog/iolog_util.c:70 +#: lib/iolog/iolog_util.c:71 #, c-format msgid "%s: invalid log file" msgstr "%s: file di registro non valido" -#: lib/iolog/iolog_util.c:88 +#: lib/iolog/iolog_util.c:89 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: manca il campo della marcatura temporale" -#: lib/iolog/iolog_util.c:94 +#: lib/iolog/iolog_util.c:95 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marcatura temporale %s: %s" -#: lib/iolog/iolog_util.c:101 +#: lib/iolog/iolog_util.c:102 #, c-format msgid "%s: user field is missing" msgstr "%s: manca il campo utente" -#: lib/iolog/iolog_util.c:110 +#: lib/iolog/iolog_util.c:111 #, c-format msgid "%s: runas user field is missing" msgstr "%s: manca il campo utente di runas" -#: lib/iolog/iolog_util.c:119 +#: lib/iolog/iolog_util.c:120 #, c-format msgid "%s: runas group field is missing" msgstr "%s: manca il campo gruppo di runas" -#: lib/iolog/iolog_util.c:418 +#: lib/iolog/iolog_util.c:419 #, c-format msgid "error reading timing file: %s" msgstr "errore nel leggere il file di timing: %s" -#: lib/iolog/iolog_util.c:425 +#: lib/iolog/iolog_util.c:426 #, c-format msgid "invalid timing file line: %s" msgstr "riga di timing del file non valida: %s" -#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 -#, c-format -msgid "%8s : %s" -msgstr "%8s : %s" - -#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 -#, c-format -msgid "%8s : (command continued) %s" -msgstr "%8s : (comando continuato) %s" - -#: logsrvd/iolog_writer.c:977 +#: logsrvd/iolog_writer.c:919 msgid "log is already complete, cannot be restarted" msgstr "il registro è già completo, non può essere riavviato" -#: logsrvd/iolog_writer.c:1008 +#: logsrvd/iolog_writer.c:950 msgid "unable to restart log" msgstr "impossibile riavviare il registro" #: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 -#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 +#: plugins/sudoers/sudoreplay.c:352 plugins/sudoers/sudoreplay.c:358 #, c-format msgid "unable to open %s/%s" msgstr "impossibile aprire %s/%s" @@ -457,147 +487,155 @@ msgstr "%s/%s: impossibile spostarsi avanti %zu" msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "impossibile trovare il punto di ripristino [%lld, %ld] in %s/%s" -#: logsrvd/logsrvd.c:230 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 -#: logsrvd/logsrvd.c:398 logsrvd/logsrvd.c:445 logsrvd/logsrvd.c:496 -#: logsrvd/logsrvd.c:528 logsrvd/logsrvd.c:560 +#: logsrvd/logsrvd.c:290 logsrvd/logsrvd.c:353 logsrvd/logsrvd.c:394 +#: logsrvd/logsrvd.c:449 logsrvd/logsrvd.c:517 logsrvd/logsrvd.c:568 +#: logsrvd/logsrvd.c:600 logsrvd/logsrvd.c:632 msgid "state machine error" msgstr "errore della macchina di stato" -#: logsrvd/logsrvd.c:239 +#: logsrvd/logsrvd.c:299 msgid "invalid AcceptMessage" -msgstr "AcceoptMessage non valido" +msgstr "AcceptMessage non valido" -#: logsrvd/logsrvd.c:250 +#: logsrvd/logsrvd.c:307 msgid "error parsing AcceptMessage" msgstr "errore nell'analizzare AcceptMessage" -#: logsrvd/logsrvd.c:257 +#: logsrvd/logsrvd.c:314 msgid "error creating I/O log" msgstr "errore nel creare il registro I/O" -#: logsrvd/logsrvd.c:265 +#: logsrvd/logsrvd.c:321 msgid "error logging accept event" msgstr "errore nel registrare l'evento accept" -#: logsrvd/logsrvd.c:308 +#: logsrvd/logsrvd.c:362 msgid "invalid RejectMessage" msgstr "RejectMessage non valido" -#: logsrvd/logsrvd.c:319 +#: logsrvd/logsrvd.c:370 msgid "error parsing RejectMessage" msgstr "errore nell'analizzare RejectMessage" -#: logsrvd/logsrvd.c:325 +#: logsrvd/logsrvd.c:376 msgid "error logging reject event" msgstr "errore nel registrare l'evento reject" -#: logsrvd/logsrvd.c:430 +#: logsrvd/logsrvd.c:486 +msgid "invalid AlertMessage" +msgstr "AlertMessage non valido" + +#: logsrvd/logsrvd.c:494 +msgid "error parsing AlertMessage" +msgstr "errore nell'analizzare AlertMessage" + +#: logsrvd/logsrvd.c:502 msgid "error logging alert event" msgstr "errore nel registrare l'evento alert" -#: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 +#: logsrvd/logsrvd.c:523 logsrvd/logsrvd.c:574 logsrvd/logsrvd.c:606 msgid "protocol error" msgstr "errore di protocollo" -#: logsrvd/logsrvd.c:461 +#: logsrvd/logsrvd.c:533 msgid "error writing IoBuffer" msgstr "errore nello scrivere IoBuffer" -#: logsrvd/logsrvd.c:513 +#: logsrvd/logsrvd.c:585 msgid "error writing ChangeWindowSize" msgstr "errore nello scrivere ChangeWindowSize" -#: logsrvd/logsrvd.c:545 +#: logsrvd/logsrvd.c:617 msgid "error writing CommandSuspend" msgstr "errore nello scrivere CommandSuspend" -#: logsrvd/logsrvd.c:630 +#: logsrvd/logsrvd.c:702 msgid "unrecognized ClientMessage type" msgstr "tipo di ClientMessage non riconosciuto" -#: logsrvd/logsrvd.c:895 +#: logsrvd/logsrvd.c:967 msgid "client message too large" msgstr "messaggio client troppo grande" -#: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 +#: logsrvd/logsrvd.c:1197 logsrvd/logsrvd.c:1205 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "impossibile impostare il cifrario per TLS 1.2 a %s: %s" -#: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 +#: logsrvd/logsrvd.c:1225 logsrvd/logsrvd.c:1233 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "impossibile impostare il cifrario per TLS 1.3 a %s: %s" -#: logsrvd/logsrvd.c:1197 +#: logsrvd/logsrvd.c:1269 #, c-format msgid "unable to get TLS server method: %s" msgstr "impossibile ottenere il metodo TLS del server: %s" -#: logsrvd/logsrvd.c:1202 +#: logsrvd/logsrvd.c:1274 #, c-format msgid "unable to create TLS context: %s" msgstr "impossibile creare il contesyo TLS: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 +#: logsrvd/logsrvd.c:1281 plugins/sudoers/log_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "impossibile caricare il certificato %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 +#: logsrvd/logsrvd.c:1294 plugins/sudoers/log_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "impossibile caricare il bundle CA %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 +#: logsrvd/logsrvd.c:1339 plugins/sudoers/log_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "impossibile caricare la chiave privata %s" -#: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1356 logsrvd/logsrvd.c:1365 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "impossibile impostare i parametri diffie-hellman: %s" -#: logsrvd/logsrvd.c:1306 +#: logsrvd/logsrvd.c:1378 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "impossibile impostare la versione minima del protocollo a TLS 1.2: %s" -#: logsrvd/logsrvd.c:1491 +#: logsrvd/logsrvd.c:1563 msgid "unable to get remote IP addr" msgstr "impossibile ottenere indirizzo IP remoto" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 +#: logsrvd/logsrvd.c:1591 plugins/sudoers/log_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Impossibile allegare dati utenti all'oggetto ssl: %s" -#: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 -#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 -#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 -#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 -#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 -#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 -#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 -#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 -#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 -#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 -#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 -#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 -#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 -#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 -#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 -#: plugins/sudoers/sudoreplay.c:1162 +#: logsrvd/logsrvd.c:1599 logsrvd/logsrvd.c:1721 logsrvd/logsrvd.c:1823 +#: logsrvd/sendlog.c:1125 logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1496 +#: logsrvd/sendlog.c:1554 plugins/sudoers/iolog.c:956 +#: plugins/sudoers/iolog.c:1089 plugins/sudoers/iolog.c:1187 +#: plugins/sudoers/log_client.c:109 plugins/sudoers/log_client.c:324 +#: plugins/sudoers/log_client.c:340 plugins/sudoers/log_client.c:386 +#: plugins/sudoers/log_client.c:587 plugins/sudoers/log_client.c:594 +#: plugins/sudoers/log_client.c:1103 plugins/sudoers/log_client.c:1376 +#: plugins/sudoers/log_client.c:1417 plugins/sudoers/log_client.c:1425 +#: plugins/sudoers/log_client.c:1576 plugins/sudoers/log_client.c:1692 +#: plugins/sudoers/log_client.c:2007 plugins/sudoers/log_client.c:2015 +#: plugins/sudoers/sudoreplay.c:512 plugins/sudoers/sudoreplay.c:559 +#: plugins/sudoers/sudoreplay.c:791 plugins/sudoers/sudoreplay.c:903 +#: plugins/sudoers/sudoreplay.c:993 plugins/sudoers/sudoreplay.c:1008 +#: plugins/sudoers/sudoreplay.c:1015 plugins/sudoers/sudoreplay.c:1022 +#: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 +#: plugins/sudoers/sudoreplay.c:1163 msgid "unable to add event to queue" msgstr "impossibile aggiungere l'evento alla coda" -#: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 +#: logsrvd/logsrvd.c:1775 logsrvd/logsrvd.c:2011 msgid "unable setup listen socket" msgstr "impossibile impostare il socket di ascolto" -#: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 +#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:124 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" @@ -606,7 +644,7 @@ msgstr "" "%s - Invia registro I/O di sudo a un server remoto\n" "\n" -#: logsrvd/logsrvd.c:1846 +#: logsrvd/logsrvd.c:1920 msgid "" "\n" "Options:\n" @@ -624,78 +662,78 @@ msgstr "" " -R, --random-drop Percentuale di connessioni chiuse\n" " -V, --version Visualizza la versione ed esce\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 +#: logsrvd/logsrvd.c:1972 logsrvd/sendlog.c:1719 msgid "Protobuf-C version 1.3 or higher required" msgstr "È richiesto Protobuf-C 1.3 o successivo" -#: logsrvd/logsrvd.c:1916 +#: logsrvd/logsrvd.c:1990 #, c-format msgid "invalid random drop value: %s" msgstr "valore drop casuale non valido: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 -#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: logsrvd/logsrvd.c:1994 logsrvd/sendlog.c:1769 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:299 #: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s versione %s\n" -#: logsrvd/logsrvd_conf.c:393 +#: logsrvd/logsrvd_conf.c:331 msgid "TLS not supported" msgstr "TLS non supportato" -#: logsrvd/logsrvd_conf.c:405 +#: logsrvd/logsrvd_conf.c:343 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 +#: logsrvd/logsrvd_conf.c:409 logsrvd/logsrvd_conf.c:653 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: non è un percorso completo" -#: logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:767 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d \"[\" non corrispondente: %s" -#: logsrvd/logsrvd_conf.c:840 +#: logsrvd/logsrvd_conf.c:778 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d sezione configurazione non valida: %s" -#: logsrvd/logsrvd_conf.c:848 +#: logsrvd/logsrvd_conf.c:786 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d riga di configurazione non valida: %s" -#: logsrvd/logsrvd_conf.c:854 +#: logsrvd/logsrvd_conf.c:792 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d atteso nome di sezione: %s" -#: logsrvd/logsrvd_conf.c:868 +#: logsrvd/logsrvd_conf.c:806 #, c-format msgid "invalid value for %s: %s" msgstr "valore non valido per \"%s\": %s" -#: logsrvd/logsrvd_conf.c:876 +#: logsrvd/logsrvd_conf.c:814 #, c-format msgid "%s:%d unknown key: %s" msgstr "%s:%d chiave sconosciuta: %s" -#: logsrvd/logsrvd_conf.c:1032 +#: logsrvd/logsrvd_conf.c:1003 #, c-format msgid "unknown syslog facility %s" msgstr "strumento syslog %s sconosciuto" -#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1040 -#: logsrvd/logsrvd_conf.c:1044 +#: logsrvd/logsrvd_conf.c:1007 logsrvd/logsrvd_conf.c:1011 +#: logsrvd/logsrvd_conf.c:1015 #, c-format msgid "unknown syslog priority %s" msgstr "priorità syslog %s sconosciuta" -#: logsrvd/sendlog.c:126 +#: logsrvd/sendlog.c:127 msgid "" "\n" "Options:\n" @@ -730,143 +768,146 @@ msgstr "" " selezionato N volte in parallelo\n" " -V, --version Visualizza la versione ed esce\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 +#: logsrvd/sendlog.c:164 plugins/sudoers/log_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "impossibile cercare %s:%s: %s" -#: logsrvd/sendlog.c:186 +#: logsrvd/sendlog.c:202 msgid "unable to get server IP addr" msgstr "impossibile ottenere indirizzo IP del server" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 +#: logsrvd/sendlog.c:256 plugins/sudoers/sudoreplay.c:851 #, c-format msgid "unable to read %s/%s: %s" msgstr "impossibile leggere %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 +#: logsrvd/sendlog.c:277 plugins/sudoers/log_client.c:694 #, c-format msgid "client message too large: %zu" msgstr "messaggio client troppo grande: %zu" -#: logsrvd/sendlog.c:794 +#: logsrvd/sendlog.c:810 #, c-format msgid "%s: write buffer already in use" msgstr "%s: buffer di scrittura già in uso" -#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 -#: plugins/sudoers/iolog.c:924 +#: logsrvd/sendlog.c:862 plugins/sudoers/iolog.c:880 +#: plugins/sudoers/iolog.c:949 #, c-format msgid "unexpected I/O event %d" msgstr "evento I/O %d non atteso" -#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 -#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 -#: plugins/sudoers/iolog_client.c:1289 +#: logsrvd/sendlog.c:908 logsrvd/sendlog.c:925 logsrvd/sendlog.c:959 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1386 +#: plugins/sudoers/log_client.c:1454 plugins/sudoers/log_client.c:1490 #, c-format msgid "%s: unexpected state %d" msgstr "%s: stato %d non atteso" -#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 +#: logsrvd/sendlog.c:931 plugins/sudoers/log_client.c:1460 msgid "invalid ServerHello" msgstr "ServerHello non valido" -#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 +#: logsrvd/sendlog.c:995 plugins/sudoers/log_client.c:1534 #, c-format msgid "error message received from server: %s" msgstr "messaggio di errore ricevuto dal server: %s" -#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 +#: logsrvd/sendlog.c:1008 plugins/sudoers/log_client.c:1547 #, c-format msgid "abort message received from server: %s" msgstr "messaggio di abort ricevuto dal server: %s" -#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 +#: logsrvd/sendlog.c:1027 plugins/sudoers/log_client.c:1566 msgid "unable to unpack ServerMessage" msgstr "impossibile aprire ServerMessage" -#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 +#: logsrvd/sendlog.c:1067 plugins/sudoers/log_client.c:1597 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valore type_case %d non atteso" -#: logsrvd/sendlog.c:1080 +#: logsrvd/sendlog.c:1096 msgid "timeout reading from server" msgstr "timeout nel leggere dal server" -#: logsrvd/sendlog.c:1158 +#: logsrvd/sendlog.c:1174 msgid "premature EOF" msgstr "EOF prematuro" -#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 +#: logsrvd/sendlog.c:1187 plugins/sudoers/log_client.c:1751 #, c-format msgid "server message too large: %u" msgstr "messaggio server troppo grande: %u" -#: logsrvd/sendlog.c:1222 +#: logsrvd/sendlog.c:1238 msgid "timeout writing to server" msgstr "timeout nello scrivere sul server" -#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 +#: logsrvd/sendlog.c:1457 plugins/sudoers/log_client.c:296 msgid "TLS handshake timeout occurred" msgstr "timeout handshake TLS" -#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 -#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 +#: logsrvd/sendlog.c:1476 logsrvd/sendlog.c:1491 +#: plugins/sudoers/log_client.c:318 plugins/sudoers/log_client.c:334 msgid "unable to set event" msgstr "impossibile impostare evento" -#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 +#: logsrvd/sendlog.c:1501 logsrvd/sendlog.c:1505 #, c-format msgid "TLS connection failed: %s" msgstr "Connessione TLS non riuscita: %s" -#: logsrvd/sendlog.c:1522 +#: logsrvd/sendlog.c:1538 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Impossibile inizializzare il conteso ssl: %s" -#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 +#: logsrvd/sendlog.c:1543 plugins/sudoers/log_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Impossibile allocare l'oggetto ssl: %s" -#: logsrvd/sendlog.c:1532 +#: logsrvd/sendlog.c:1548 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Impossibile collegare il socket all'oggetto ssl: %s" -#: logsrvd/sendlog.c:1776 +#: logsrvd/sendlog.c:1792 msgid "both restart point and iolog ID must be specified" msgstr "devono essere specificati sia il punto di inizio che l'ID di iolog" -#: logsrvd/sendlog.c:1780 +#: logsrvd/sendlog.c:1796 msgid "a restart point may not be set when no I/O is sent" msgstr "un punto di partenza non può essere impostato quando non è inviato alcun I/O" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1871 #, c-format msgid "exited prematurely with state %d" msgstr "uscito inaspettatamente con stato %d" -#: logsrvd/sendlog.c:1856 +#: logsrvd/sendlog.c:1872 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "tempo trascorso inviato al server [%lld, %ld]" -#: logsrvd/sendlog.c:1858 +#: logsrvd/sendlog.c:1874 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "punto di commit ricevuto dal server [%lld, %ld]" -#: plugins/sudoers/alias.c:144 +#: plugins/sudoers/alias.c:148 #, c-format msgid "Alias \"%s\" already defined" msgstr "Alias \"%s\" già definito" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 -msgid "unable to fork" -msgstr "impossibile eseguire fork" +#: plugins/sudoers/audit.c:206 plugins/sudoers/audit.c:343 +#: plugins/sudoers/log_client.c:954 plugins/sudoers/log_client.c:1002 +#: plugins/sudoers/log_client.c:1050 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:548 plugins/sudoers/policy.c:114 +msgid "unable to get time of day" +msgstr "impossibile ottenere l'ora" #: plugins/sudoers/auth/aix_auth.c:277 #, c-format @@ -1095,17 +1136,16 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 +#: plugins/sudoers/sudoers.c:837 plugins/sudoers/sudoers.c:858 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "uid sconosciuto: %u" #: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 -#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 -#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 -#: plugins/sudoers/testsudoers.c:386 +#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1088 +#: plugins/sudoers/sudoers.c:440 plugins/sudoers/sudoers.c:1307 +#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "utente sconosciuto: %s" @@ -1145,7 +1185,7 @@ msgstr "formato di output %s non supportato" msgid "%s: input and output files must be different" msgstr "%s: i file di input e output devono essere diversi" -#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:178 #: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 #: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" @@ -1178,8 +1218,8 @@ msgstr "filtro non valido: %s" #: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 #: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 -#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 -#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoreplay.c:1435 plugins/sudoers/timestamp.c:441 #: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" @@ -1200,7 +1240,7 @@ msgstr "errore di analisi in %s vicino alla riga %d\n" msgid "parse error in %s\n" msgstr "errore di analisi in %s\n" -#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1124 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" @@ -1264,13 +1304,13 @@ msgstr "voce Defaults \"%s\" sconosciuta" #: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 #: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 -#: plugins/sudoers/ldap.c:502 +#: plugins/sudoers/ldap.c:503 msgid "unable to get GMT time" msgstr "impossibile ottenere l'ora GMT" #: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 #: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 -#: plugins/sudoers/ldap.c:508 +#: plugins/sudoers/ldap.c:509 msgid "unable to format timestamp" msgstr "impossibile formattare la marcatura temporale" @@ -1283,646 +1323,651 @@ msgstr "troppe voci sudoers, massimo %u" msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "la variabile d'ambiente SUDOERS_BASE non è impostata e non è stata specificata l'opzione -b." -#: plugins/sudoers/def_data.c:44 +#: plugins/sudoers/def_data.c:50 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Infrastruttura syslog se syslog viene utilizzato per le registrazioni: %s" -#: plugins/sudoers/def_data.c:48 +#: plugins/sudoers/def_data.c:54 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Priorità di syslog se l'utente si identifica con successo: %s" -#: plugins/sudoers/def_data.c:52 +#: plugins/sudoers/def_data.c:58 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Priorità di syslog se l'utente non si identifica con successo: %s" -#: plugins/sudoers/def_data.c:56 +#: plugins/sudoers/def_data.c:62 msgid "Put OTP prompt on its own line" msgstr "Mette il prompt OTP su una riga a parte" -#: plugins/sudoers/def_data.c:60 +#: plugins/sudoers/def_data.c:66 msgid "Ignore '.' in $PATH" msgstr "Ignora \".\" in $PATH" -#: plugins/sudoers/def_data.c:64 +#: plugins/sudoers/def_data.c:70 msgid "Always send mail when sudo is run" msgstr "Invia sempre una email quando viene eseguito sudo" -#: plugins/sudoers/def_data.c:68 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if user authentication fails" msgstr "Invia una email se l'autenticazione utente non riesce" -#: plugins/sudoers/def_data.c:72 +#: plugins/sudoers/def_data.c:78 msgid "Send mail if the user is not in sudoers" msgstr "Invia una email se l'utente non è tra i sudoers" -#: plugins/sudoers/def_data.c:76 +#: plugins/sudoers/def_data.c:82 msgid "Send mail if the user is not in sudoers for this host" msgstr "Invia una email se l'utente non è tra i sudoers per questo host" -#: plugins/sudoers/def_data.c:80 +#: plugins/sudoers/def_data.c:86 msgid "Send mail if the user is not allowed to run a command" msgstr "Invia una email se l'utente non è abilitato a eseguire un comando" -#: plugins/sudoers/def_data.c:84 +#: plugins/sudoers/def_data.c:90 msgid "Send mail if the user tries to run a command" msgstr "Invia una email se l'utente tenta di eseguire un comando" -#: plugins/sudoers/def_data.c:88 +#: plugins/sudoers/def_data.c:94 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa una marcatura temporale diversa per ogni combinazione utente/tty" -#: plugins/sudoers/def_data.c:92 +#: plugins/sudoers/def_data.c:98 msgid "Lecture user the first time they run sudo" msgstr "Aiuta gli utenti alla prima esecuzione di sudo" -#: plugins/sudoers/def_data.c:96 +#: plugins/sudoers/def_data.c:102 #, c-format msgid "File containing the sudo lecture: %s" msgstr "File contenente la lezione su sudo: %s" -#: plugins/sudoers/def_data.c:100 +#: plugins/sudoers/def_data.c:106 msgid "Require users to authenticate by default" msgstr "Richiede in modo predefinito l'autenticazione degli utenti" -#: plugins/sudoers/def_data.c:104 +#: plugins/sudoers/def_data.c:110 msgid "Root may run sudo" msgstr "Root può eseguire sudo" -#: plugins/sudoers/def_data.c:108 +#: plugins/sudoers/def_data.c:114 msgid "Log the hostname in the (non-syslog) log file" msgstr "Registra il nome host nel file di registro (non-syslog)" -#: plugins/sudoers/def_data.c:112 +#: plugins/sudoers/def_data.c:118 msgid "Log the year in the (non-syslog) log file" msgstr "Registra l'anno nel file di registro (non-syslog)" -#: plugins/sudoers/def_data.c:116 +#: plugins/sudoers/def_data.c:122 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo viene lanciato senza alcun argomento, avvia una shell" -#: plugins/sudoers/def_data.c:120 +#: plugins/sudoers/def_data.c:126 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Imposta $HOME all'utente definito quando viene avviata una shell con -s" -#: plugins/sudoers/def_data.c:124 +#: plugins/sudoers/def_data.c:130 msgid "Always set $HOME to the target user's home directory" msgstr "Imposta sempre $HOME alla directory home dell'utente definito" -#: plugins/sudoers/def_data.c:128 +#: plugins/sudoers/def_data.c:134 msgid "Allow some information gathering to give useful error messages" msgstr "Consente la raccolta di alcune informazioni per dare messaggi di errore utili" -#: plugins/sudoers/def_data.c:132 +#: plugins/sudoers/def_data.c:138 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Richiede nomi host completi nel file sudoers" -#: plugins/sudoers/def_data.c:136 +#: plugins/sudoers/def_data.c:142 msgid "Insult the user when they enter an incorrect password" msgstr "Apostrofa l'utente quando inserisce una password errata" -#: plugins/sudoers/def_data.c:140 +#: plugins/sudoers/def_data.c:146 msgid "Only allow the user to run sudo if they have a tty" msgstr "Consente all'utente di seguire sudo solo se dispone di un tty" -#: plugins/sudoers/def_data.c:144 +#: plugins/sudoers/def_data.c:150 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo utilizzerà il valore definito nella variabile EDITOR" -#: plugins/sudoers/def_data.c:148 +#: plugins/sudoers/def_data.c:154 msgid "Prompt for root's password, not the users's" msgstr "Chiede la password di root, non quella dell'utente" -#: plugins/sudoers/def_data.c:152 +#: plugins/sudoers/def_data.c:158 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Chiede la password dell'utente runas_default, non quella dell'utente" -#: plugins/sudoers/def_data.c:156 +#: plugins/sudoers/def_data.c:162 msgid "Prompt for the target user's password, not the users's" msgstr "Chiede la password dell'utente definito, non quella dell'invocante" -#: plugins/sudoers/def_data.c:160 +#: plugins/sudoers/def_data.c:166 msgid "Apply defaults in the target user's login class if there is one" msgstr "Applica i Defaults nella classe di login dell'utente definito, se presente" -#: plugins/sudoers/def_data.c:164 +#: plugins/sudoers/def_data.c:170 msgid "Set the LOGNAME and USER environment variables" msgstr "Imposta le variabili d'ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:168 +#: plugins/sudoers/def_data.c:174 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Imposta lo uid effettivo all'utente definito, non lo uid reale" -#: plugins/sudoers/def_data.c:172 +#: plugins/sudoers/def_data.c:178 msgid "Don't initialize the group vector to that of the target user" msgstr "Non inizializza il vettore di gruppo con quello dell'utente definito" -#: plugins/sudoers/def_data.c:176 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Lunghezza a cui andare a capo nei file di registro (0 per non andare a capo): %u" -#: plugins/sudoers/def_data.c:180 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Timeout marcatura temporale di autenticazione: %.1f minuti" -#: plugins/sudoers/def_data.c:184 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Timeout per inserimento password: %.1f minuti" -#: plugins/sudoers/def_data.c:188 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Numero di tentativi per l'inserimento della password: %u" -#: plugins/sudoers/def_data.c:192 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "umask da utilizzare o 0777 per utilizzare quella dell'utente: 0%o" -#: plugins/sudoers/def_data.c:196 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Path to log file: %s" msgstr "Percorso al file di registro: %s" -#: plugins/sudoers/def_data.c:200 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Path to mail program: %s" msgstr "Percorso al programma email: %s" -#: plugins/sudoers/def_data.c:204 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Flags for mail program: %s" msgstr "Flag per il programma email: %s" -#: plugins/sudoers/def_data.c:208 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Address to send mail to: %s" msgstr "Indirizzo a cui mandare l'email: %s" -#: plugins/sudoers/def_data.c:212 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Address to send mail from: %s" msgstr "Indirizzo da cui mandare l'email: %s" -#: plugins/sudoers/def_data.c:216 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Subject line for mail messages: %s" msgstr "Oggetto dell'email: %s" -#: plugins/sudoers/def_data.c:220 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Incorrect password message: %s" msgstr "Messaggio password errata: %s" -#: plugins/sudoers/def_data.c:224 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Path to lecture status dir: %s" msgstr "Percorso directory di stato della lezione: %s" -#: plugins/sudoers/def_data.c:228 +#: plugins/sudoers/def_data.c:234 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Percorso directory con la marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:232 +#: plugins/sudoers/def_data.c:238 #, 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:236 +#: plugins/sudoers/def_data.c:242 #, 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:240 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Default password prompt: %s" msgstr "Prompt predefinito per la password: %s" -#: plugins/sudoers/def_data.c:244 +#: plugins/sudoers/def_data.c:250 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:248 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "Default user to run commands as: %s" msgstr "Utente predefinito con cui eseguire i comandi: %s" -#: plugins/sudoers/def_data.c:252 +#: plugins/sudoers/def_data.c:258 #, 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:256 +#: plugins/sudoers/def_data.c:262 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Percorso all'editor per visudo: %s" -#: plugins/sudoers/def_data.c:260 +#: plugins/sudoers/def_data.c:266 #, 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:264 +#: plugins/sudoers/def_data.c:270 #, 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:268 -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:274 +msgid "Preload the sudo_noexec library which replaces the exec functions" +msgstr "Carica la libreria sudo_noexec che sostituisce le funzioni exec" -#: plugins/sudoers/def_data.c:272 +#: plugins/sudoers/def_data.c:278 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:276 +#: plugins/sudoers/def_data.c:282 #, 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:280 +#: plugins/sudoers/def_data.c:286 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:284 +#: plugins/sudoers/def_data.c:290 msgid "Allow users to set arbitrary environment variables" msgstr "Consente agli utenti di impostare variabili d'ambiente" -#: plugins/sudoers/def_data.c:288 +#: plugins/sudoers/def_data.c:294 msgid "Reset the environment to a default set of variables" msgstr "Reimposta l'ambiente con le variabili predefinite" -#: plugins/sudoers/def_data.c:292 -msgid "Environment variables to check for sanity:" -msgstr "Variabile d'ambienti da validare:" +#: plugins/sudoers/def_data.c:298 +msgid "Environment variables to check for safety:" +msgstr "Variabile d'ambienti da verificare per la sicurezza:" -#: plugins/sudoers/def_data.c:296 +#: plugins/sudoers/def_data.c:302 msgid "Environment variables to remove:" msgstr "Variabili d'ambiente da rimuovere:" -#: plugins/sudoers/def_data.c:300 +#: plugins/sudoers/def_data.c:306 msgid "Environment variables to preserve:" msgstr "Variabili d'ambiente da preservare:" -#: plugins/sudoers/def_data.c:304 +#: plugins/sudoers/def_data.c:310 #, 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:308 +#: plugins/sudoers/def_data.c:314 #, 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:312 +#: plugins/sudoers/def_data.c:318 #, 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:316 +#: plugins/sudoers/def_data.c:322 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Percorso al file d'ambiente riservato specifico di sudo: %s" -#: plugins/sudoers/def_data.c:320 +#: plugins/sudoers/def_data.c:326 #, 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:324 +#: plugins/sudoers/def_data.c:330 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:328 +#: plugins/sudoers/def_data.c:334 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:332 +#: plugins/sudoers/def_data.c:338 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:336 +#: plugins/sudoers/def_data.c:342 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:340 +#: plugins/sudoers/def_data.c:346 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:344 +#: plugins/sudoers/def_data.c:350 msgid "Log the output of the command being run" msgstr "Registra l'output del comando in esecuzione" -#: plugins/sudoers/def_data.c:348 +#: plugins/sudoers/def_data.c:354 msgid "Compress I/O logs using zlib" msgstr "Comprime i registri utilizzando zlib" -#: plugins/sudoers/def_data.c:352 +#: plugins/sudoers/def_data.c:358 msgid "Always run commands in a pseudo-tty" msgstr "Esegue sempre i comandi in uno pseudo-tty" -#: plugins/sudoers/def_data.c:356 +#: plugins/sudoers/def_data.c:362 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin per supporto ai gruppi non-Unix: %s" -#: plugins/sudoers/def_data.c:360 +#: plugins/sudoers/def_data.c:366 #, 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:364 +#: plugins/sudoers/def_data.c:370 #, 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:368 +#: plugins/sudoers/def_data.c:374 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:372 +#: plugins/sudoers/def_data.c:378 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:376 +#: plugins/sudoers/def_data.c:382 #, c-format msgid "Set of permitted privileges: %s" msgstr "Insieme di privilegi concessi: %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:386 #, c-format msgid "Set of limit privileges: %s" msgstr "Insieme di privilegi non concessi: %s" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:390 msgid "Run commands on a pty in the background" msgstr "Esegue i comandi in un pty in background" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "PAM service name to use: %s" msgstr "Nome del servizio PAM da usare: %s" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:398 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Nome del servizio PAM da usare per le shell di login: %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:402 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:400 +#: plugins/sudoers/def_data.c:406 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:404 +#: plugins/sudoers/def_data.c:410 msgid "Perform PAM account validation management" msgstr "Esegue la gestione della convalida dell'account PAM" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:414 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Numero massimo di sequenze I/O di registro: %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:418 msgid "Enable sudoers netgroup support" msgstr "Abilita support netgroup in sudoers" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:422 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Controlla le directory superiori per accesso in scrittura durante le modifiche con sudoedit" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:426 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Segue i collegamenti simbolici durante le modifiche con sudoedit" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:430 msgid "Query the group plugin for unknown system groups" msgstr "Interroga il plugin dei gruppi per gruppi di sistema sconosciuti" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:434 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Corrispondenza gruppi di rete con tutti i valori: utente, host e dominio" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:438 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Consente di eseguire i comandi anche se sudo non può scrivere sul registro di controllo" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:442 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Consente di eseguire i comandi anche se sudo non può scrivere sul registro di I/O" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:446 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Consente di eseguire i comandi anche se sudo non può scrivere sul file di registro" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:450 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Gestisce i gruppi attraverso sudoers ed esegue la corrispondenza sull'ID del gruppo, non sul nome" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:454 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Voci di registro più grandi di questo valore vengono divise su più messaggi: %u" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:458 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Utente proprietario dei file di registro di I/O: %s" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:462 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Gruppo proprietario dei file di registro di I/O: %s" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:466 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Modalità dei file di registro di I/O: 0%o" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:470 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Esegue comandi in base al descrittore del file e non sul percorso: %s" -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:474 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignora le voci Defaults sconosciute nel file sudoers invece di inviare un avviso" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:478 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Tempo in secondi dopo il quale il comando viene terminato: %u" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:482 msgid "Allow the user to specify a timeout on the command line" msgstr "Consente all'utente di specificare un timeout attraverso la riga di comando" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:486 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Scrive immediatamente i dati I/O del registro sul disco invece di tenerli in memoria" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:490 msgid "Include the process ID when logging via syslog" msgstr "Include l'ID del processo quando viene usato syslog" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:494 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Tipo di marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:498 #, c-format msgid "Authentication failure message: %s" msgstr "Messaggio di autenticazione non riuscita: %s" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:502 msgid "Ignore case when matching user names" msgstr "Ignora maiuscole/minuscole nella corrispondenza coi nomi utente" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:506 msgid "Ignore case when matching group names" msgstr "Ignora maiuscole/minuscole nella corrispondenza coi gruppi" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:510 msgid "Log when a command is allowed by sudoers" msgstr "Registra quando un comando è consentito da sudoers" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:514 msgid "Log when a command is denied by sudoers" msgstr "Registra quando un comando viene negato da sudoers" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:518 msgid "Sudo log server(s) to connect to with optional port" msgstr "Server di registro per sudo a cui connettersi, con la porta opzionale" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:522 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Timeout server di registro per sudo, in secondi: %u" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:526 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Abilita l'opzione SO_KEEPALIVE sul socket connesso al server di registro" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:530 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Percorso al file bundle CA del server di audit: %s" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:534 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Percorso al file certificato di sudoers: %s" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:538 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Percorso al file chiave privata di sudoers: %s" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:542 msgid "Verify that the log server's certificate is valid" msgstr "Verifica che il certificato del server di registro è valido" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:546 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Consente l'uso di ID utente o gruppo sconosciuto per runas" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:550 msgid "Only permit running commands as a user with a valid shell" msgstr "Consente di eseguire i comandi a un utente con una shell valida" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:554 msgid "Set the pam remote user to the user running sudo" msgstr "Imposta l'utente remoto pam all'utente che esegue sudo" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:558 msgid "Set the pam remote host to the local host name" msgstr "Imposta l'host remoto pam al nome host locale" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:562 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Directory di lavoro a cui passare prima dell'esecuzione del comando: %s" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:566 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Directory root a cui passare prima dell'esecuzione del comando: %s" -#: plugins/sudoers/defaults.c:184 +#: plugins/sudoers/def_data.c:570 +#, c-format +msgid "The format of logs to produce: %s" +msgstr "Il formato dei registri da creare: %s" + +#: plugins/sudoers/defaults.c:185 #, c-format -msgid "%s:%d: unknown defaults entry \"%s\"" -msgstr "%s:%d: voce Defaults \"%s\" sconosciuta" +msgid "%s:%d:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d:%d: voce Defaults \"%s\" sconosciuta" -#: plugins/sudoers/defaults.c:187 +#: plugins/sudoers/defaults.c:188 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: voce Defaults \"%s\" sconosciuta" -#: plugins/sudoers/defaults.c:233 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s:%d: no value specified for \"%s\"" -msgstr "%s:%d: nessun valore specificato per \"%s\"" +msgid "%s:%d:%d: no value specified for \"%s\"" +msgstr "%s:%d:%d: nessun valore specificato per \"%s\"" -#: plugins/sudoers/defaults.c:236 +#: plugins/sudoers/defaults.c:237 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nessun valore specificato per \"%s\"" -#: plugins/sudoers/defaults.c:274 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d: option \"%s\" does not take a value" -msgstr "%s:%d: l'opzione \"%s\" non accetta un valore" +msgid "%s:%d:%d: option \"%s\" does not take a value" +msgstr "%s:%d:%d: l'opzione \"%s\" non accetta un valore" -#: plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:278 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: l'opzione \"%s\" non accetta un valore" -#: plugins/sudoers/defaults.c:302 +#: plugins/sudoers/defaults.c:303 #, c-format -msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d: tipo Defaults 0x%x non valido per l'opzione \"%s\"" +msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d:%d: tipo Defaults 0x%x non valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:306 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: tipo Defaults 0x%x non valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:316 #, c-format -msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d: il valore \"%s\" non è valido per l'opzione \"%s\"" +msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d:%d: il valore \"%s\" non è valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:319 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: il valore \"%s\" non è valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:1025 +#: plugins/sudoers/defaults.c:1030 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" -msgstr "%s:%d: i valori per \"%s\" devono iniziare con un carattere \"/\", \"~\" o \"*\"" +msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d:%d: i valori per \"%s\" devono iniziare con un carattere \"/\", \"~\" o \"*\"" -#: plugins/sudoers/defaults.c:1029 +#: plugins/sudoers/defaults.c:1034 #, c-format msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s: i valori per \"%s\" devono iniziare con un carattere \"/\", \"~\" o \"*\"" -#: plugins/sudoers/defaults.c:1040 +#: plugins/sudoers/defaults.c:1045 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/'" -msgstr "%s:%d: i valori per \"%s\" devono iniziare con un carattere \"/\"" +msgid "%s:%d:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d:%d: i valori per \"%s\" devono iniziare con un carattere \"/\"" -#: plugins/sudoers/defaults.c:1044 +#: plugins/sudoers/defaults.c:1049 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: i valori per \"%s\" devono iniziare con un carattere \"/\"" @@ -1970,7 +2015,7 @@ msgstr "%s deve essere di proprietà dello uid %d" msgid "%s must only be writable by owner" msgstr "%s deve essere scrivibile solo dal proprietario" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:571 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:569 #, c-format msgid "unable to load %s: %s" msgstr "impossibile caricare %s: %s" @@ -1999,115 +2044,70 @@ msgstr "impossibile analizzare la maschera di rete \"%s\"" msgid "Local IP address and netmask pairs:\n" msgstr "Coppia indirizzo IP locale e maschera di rete:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 -#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 -#: plugins/sudoers/testsudoers.c:410 +#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:445 +#: plugins/sudoers/sudoers.c:1341 plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "gruppo sconosciuto: %s" -#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 -#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 -#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 -#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 +#: plugins/sudoers/iolog.c:622 +msgid "unable to update sequence file" +msgstr "impossibile aggiornare il file sequenza" + +#: plugins/sudoers/iolog.c:653 plugins/sudoers/iolog.c:841 +#: plugins/sudoers/iolog.c:994 plugins/sudoers/iolog.c:1001 +#: plugins/sudoers/iolog.c:1122 plugins/sudoers/iolog.c:1129 +#: plugins/sudoers/iolog.c:1228 plugins/sudoers/iolog.c:1235 #, c-format msgid "unable to write to I/O log file: %s" msgstr "impossibile scrivere sul file di registro di I/O: %s" -#: plugins/sudoers/iolog.c:576 -msgid "unable to update sequence file" -msgstr "impossibile aggiornare il file sequenza" - -#: plugins/sudoers/iolog.c:615 +#: plugins/sudoers/iolog.c:661 #, c-format msgid "unable to create %s/%s" msgstr "impossibile creare %s/%s" -#: plugins/sudoers/iolog.c:641 -msgid "unable to connect to log server" -msgstr "impossibile connettersi al server del registro" - -#: plugins/sudoers/iolog.c:861 +#: plugins/sudoers/iolog.c:886 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: errore interno, file registro IO per l'evento %d non aperto" -#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 -#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/iolog.c:979 plugins/sudoers/iolog.c:1107 +#: plugins/sudoers/iolog.c:1212 plugins/sudoers/timestamp.c:855 #: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 #: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "impossibile leggere l'orologio" -#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 +#: plugins/sudoers/iolog.c:1204 plugins/sudoers/log_client.c:1193 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: errore interno, segnale %d non valido" -#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 -#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 -msgid "error in event loop" -msgstr "errore nel ciclo dell'evento" - -#: plugins/sudoers/iolog_client.c:193 -#, c-format -msgid "Creation of new SSL_CTX object failed: %s" -msgstr "Creazione di un nuovo oggetto SSL_CTX non riuscita: %s" - -#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 -#, c-format -msgid "TLS connection to %s:%s failed: %s" -msgstr "Connessione TLS a %s:%s non riuscita: %s" - -#: plugins/sudoers/iolog_client.c:495 -msgid "TLS initialization was unsuccessful" -msgstr "inizializzazione TLS non riuscita" - -#: plugins/sudoers/iolog_client.c:504 -msgid "TLS handshake was unsuccessful" -msgstr "handshake TLS non riuscito" - -#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 -msgid "unable to get time of day" -msgstr "impossibile ottenere l'ora" - -#: plugins/sudoers/iolog_client.c:1002 -#, c-format -msgid "%s: internal error, invalid exit status %d" -msgstr "%s: errore interno, stato di uscita %d non valido" - -#: plugins/sudoers/iolog_client.c:1539 -msgid "lost connection to log server" -msgstr "connessione al server del registro persa" - -#: plugins/sudoers/iolog_client.c:1616 -msgid "missing write buffer" -msgstr "manca il buffer in scrittura" - -#: plugins/sudoers/ldap.c:176 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 msgid "starttls not supported when using ldaps" msgstr "starttls non supportato quando viene utilizzato ldaps" -#: plugins/sudoers/ldap.c:247 +#: plugins/sudoers/ldap.c:248 #, 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:250 +#: plugins/sudoers/ldap.c:251 #, 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:1658 +#: plugins/sudoers/ldap.c:1660 #, c-format msgid "unable to initialize LDAP: %s" msgstr "impossibile inizializzare LDAP: %s" -#: plugins/sudoers/ldap.c:1695 +#: plugins/sudoers/ldap.c:1697 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:1832 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1834 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attributo sudoOrder non valido: %s" @@ -2126,7 +2126,7 @@ msgstr "tipologia di uri LDAP non supportata: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "impossibile utilizzare URI ldap e ldaps assieme" -#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 +#: plugins/sudoers/ldap_util.c:553 plugins/sudoers/ldap_util.c:555 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "impossibile convertire sudoOption: %s%s%s" @@ -2139,62 +2139,87 @@ msgstr "impossibile aprire il sistema di audit" msgid "unable to send audit message" msgstr "impossibile inviare il messaggio di audit" -#: plugins/sudoers/logging.c:166 +#: plugins/sudoers/log_client.c:113 plugins/sudoers/log_client.c:391 +#: plugins/sudoers/log_client.c:1431 plugins/sudoers/log_client.c:2023 +msgid "error in event loop" +msgstr "errore nel ciclo dell'evento" + +#: plugins/sudoers/log_client.c:193 #, c-format -msgid "unable to open log file: %s" -msgstr "impossibile aprire il file di registro: %s" +msgid "Creation of new SSL_CTX object failed: %s" +msgstr "Creazione di un nuovo oggetto SSL_CTX non riuscita: %s" -#: plugins/sudoers/logging.c:174 +#: plugins/sudoers/log_client.c:345 plugins/sudoers/log_client.c:350 #, c-format -msgid "unable to lock log file: %s" -msgstr "impossibile impostare il blocco sul file di registro: %s" +msgid "TLS connection to %s:%s failed: %s" +msgstr "Connessione TLS a %s:%s non riuscita: %s" -#: plugins/sudoers/logging.c:207 +#: plugins/sudoers/log_client.c:519 +msgid "TLS initialization was unsuccessful" +msgstr "inizializzazione TLS non riuscita" + +#: plugins/sudoers/log_client.c:528 +msgid "TLS handshake was unsuccessful" +msgstr "handshake TLS non riuscito" + +#: plugins/sudoers/log_client.c:1202 #, c-format -msgid "unable to write log file: %s" -msgstr "impossibile scrivere sul file di registro: %s" +msgid "%s: internal error, invalid exit status %d" +msgstr "%s: errore interno, stato di uscita %d non valido" -#: plugins/sudoers/logging.c:240 +#: plugins/sudoers/log_client.c:1738 +msgid "lost connection to log server" +msgstr "connessione al server del registro persa" + +#: plugins/sudoers/log_client.c:1815 +msgid "missing write buffer" +msgstr "manca il buffer in scrittura" + +#: plugins/sudoers/log_client.c:1964 +msgid "unable to connect to log server" +msgstr "impossibile connettersi al server del registro" + +#: plugins/sudoers/logging.c:244 msgid "user NOT in sudoers" msgstr "utente non tra i sudoers" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:246 msgid "user NOT authorized on host" msgstr "utente non autorizzato sull'host" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:248 msgid "command not allowed" msgstr "comando non consentito" -#: plugins/sudoers/logging.c:287 +#: plugins/sudoers/logging.c:269 #, 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:290 +#: plugins/sudoers/logging.c:272 #, 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:294 +#: plugins/sudoers/logging.c:276 #, 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:297 +#: plugins/sudoers/logging.c:279 #, 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:334 plugins/sudoers/sudoers.c:587 -#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 -#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 -#: plugins/sudoers/sudoers.c:744 +#: plugins/sudoers/logging.c:316 plugins/sudoers/sudoers.c:583 +#: plugins/sudoers/sudoers.c:585 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:739 +#: plugins/sudoers/sudoers.c:741 #, c-format msgid "%s: command not found" msgstr "%s: comando non trovato" -#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 +#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:579 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2203,42 +2228,32 @@ msgstr "" "viene ignorato \"%s\" trovato in \".\"\n" "Usare \"sudo ./%s\" per eseguire \"%s\"." -#: plugins/sudoers/logging.c:353 -msgid "authentication failure" -msgstr "autenticazione non riuscita" - -#: plugins/sudoers/logging.c:379 -msgid "a password is required" -msgstr "è necessaria una password" - -#: plugins/sudoers/logging.c:449 +#: plugins/sudoers/logging.c:337 #, 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:713 -#, c-format -msgid "unable to dup stdin: %m" -msgstr "impossibile eseguire dup sullo stdin: %m" +#: plugins/sudoers/logging.c:393 +msgid "authentication failure" +msgstr "autenticazione non riuscita" -#: plugins/sudoers/logging.c:750 -#, c-format -msgid "unable to execute %s: %m" -msgstr "impossibile eseguire %s: %m" +#: plugins/sudoers/logging.c:433 plugins/sudoers/logging.c:453 +msgid "a password is required" +msgstr "è necessaria una password" -#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 +#: plugins/sudoers/logging.c:729 #, c-format -msgid "unable to fork: %m" -msgstr "impossibile eseguire fork: %m" +msgid "unable to open log file: %s" +msgstr "impossibile aprire il file di registro: %s" -#: plugins/sudoers/logging.c:837 +#: plugins/sudoers/logging.c:762 #, c-format -msgid "unable to open pipe: %m" -msgstr "impossibile aprire una pipe: %m" +msgid "unable to write log file: %s" +msgstr "impossibile scrivere sul file di registro: %s" -#: plugins/sudoers/match_digest.c:116 +#: plugins/sudoers/match_digest.c:129 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "il digest per %s (%s) non è nella forma %s" @@ -2311,53 +2326,53 @@ msgstr "attributo LDIF non valido: %s" msgid "invalid %.*s set by sudo front-end" msgstr "%.*s non valido impostato dal front-end sudo" -#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:310 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "impossibile analizzare l'elenco degli indirizzi di rete" -#: plugins/sudoers/policy.c:450 +#: plugins/sudoers/policy.c:455 msgid "user name not set by sudo front-end" msgstr "nome utente non impostato dal front-end sudo" -#: plugins/sudoers/policy.c:454 +#: plugins/sudoers/policy.c:459 msgid "user-ID not set by sudo front-end" msgstr "ID utente non impostato dal front-end sudo" -#: plugins/sudoers/policy.c:458 +#: plugins/sudoers/policy.c:463 msgid "group-ID not set by sudo front-end" msgstr "ID gruppo non impostato dal front-end sudo" -#: plugins/sudoers/policy.c:462 +#: plugins/sudoers/policy.c:467 msgid "host name not set by sudo front-end" msgstr "nome dell'host non impostato dal front-end sudo" -#: plugins/sudoers/policy.c:638 +#: plugins/sudoers/policy.c:643 #, c-format msgid "invalid working directory: %s" msgstr "directory di lavoro non valida: %s" -#: plugins/sudoers/policy.c:806 +#: plugins/sudoers/policy.c:811 #, c-format msgid "invalid chroot directory: %s" msgstr "directory chroot non valida: %s" -#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/policy.c:947 plugins/sudoers/visudo.c:231 #: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "impossibile eseguire %s" -#: plugins/sudoers/policy.c:1106 +#: plugins/sudoers/policy.c:1111 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versione %s del plugin della politica sudoers\n" -#: plugins/sudoers/policy.c:1108 +#: plugins/sudoers/policy.c:1113 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versione %d della grammatica del file sudoers\n" -#: plugins/sudoers/policy.c:1112 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "" "\n" @@ -2366,22 +2381,22 @@ msgstr "" "\n" "Percorso sudoers: %s\n" -#: plugins/sudoers/policy.c:1115 +#: plugins/sudoers/policy.c:1120 #, c-format msgid "nsswitch path: %s\n" msgstr "percorso nsswitch: %s\n" -#: plugins/sudoers/policy.c:1117 +#: plugins/sudoers/policy.c:1122 #, c-format msgid "ldap.conf path: %s\n" msgstr "percorso ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1118 +#: plugins/sudoers/policy.c:1123 #, c-format msgid "ldap.secret path: %s\n" msgstr "percorso ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1151 +#: plugins/sudoers/policy.c:1156 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "impossibile registrare un hook di tipo %d (versione %d.%d)" @@ -2509,259 +2524,259 @@ msgstr "percorso audit user_cmnd troncato: %s" msgid "truncated audit path argv[0]: %s" msgstr "percorso audit argv[0] troncato: %s" -#: plugins/sudoers/sssd.c:574 +#: plugins/sudoers/sssd.c:572 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "impossibile inizializzare la sorgente SSS. È stato installato SSSD?" -#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 -#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 -#: plugins/sudoers/sssd.c:618 +#: plugins/sudoers/sssd.c:580 plugins/sudoers/sssd.c:589 +#: plugins/sudoers/sssd.c:598 plugins/sudoers/sssd.c:607 +#: plugins/sudoers/sssd.c:616 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "impossibile trovare il simbolo \"%s\" in %s" -#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 +#: plugins/sudoers/sudoers.c:214 plugins/sudoers/sudoers.c:1010 msgid "problem with defaults entries" msgstr "problema con le voci Defaults" -#: plugins/sudoers/sudoers.c:222 +#: plugins/sudoers/sudoers.c:218 msgid "no valid sudoers sources found, quitting" msgstr "nessuna sorgente valida di sudoers trovata, uscita" -#: plugins/sudoers/sudoers.c:295 +#: plugins/sudoers/sudoers.c:292 #, c-format msgid "user not allowed to change root directory to %s" msgstr "l'utente non è autorizzato a cambiare la directory root a %s" -#: plugins/sudoers/sudoers.c:297 +#: plugins/sudoers/sudoers.c:294 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "non è consentito l'uso dell'opzione -R con %s" -#: plugins/sudoers/sudoers.c:321 +#: plugins/sudoers/sudoers.c:319 #, c-format msgid "user not allowed to change directory to %s" msgstr "l'utente non è autorizzato a cambiare directory a %s" -#: plugins/sudoers/sudoers.c:322 +#: plugins/sudoers/sudoers.c:320 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "non è consentito l'uso dell'opzione -D con %s" -#: plugins/sudoers/sudoers.c:353 +#: plugins/sudoers/sudoers.c:351 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers indica che a root non è consentito usare sudo" -#: plugins/sudoers/sudoers.c:413 +#: plugins/sudoers/sudoers.c:411 msgid "user not allowed to override closefrom limit" msgstr "l'utente non è autorizzato a scavalcare il limite closefrom" -#: plugins/sudoers/sudoers.c:414 +#: plugins/sudoers/sudoers.c:412 msgid "you are not permitted to use the -C option" msgstr "utente non abilitato all'uso dell'opzione -C" -#: plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:472 #, c-format msgid "timestamp owner (%s): No such user" msgstr "proprietario marcatura temporale (%s): utente inesistente" -#: plugins/sudoers/sudoers.c:490 +#: plugins/sudoers/sudoers.c:487 msgid "no tty" msgstr "nessun tty" -#: plugins/sudoers/sudoers.c:491 +#: plugins/sudoers/sudoers.c:488 msgid "sorry, you must have a tty to run sudo" msgstr "è necessario disporre di un tty per eseguire sudo" -#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 +#: plugins/sudoers/sudoers.c:495 #, c-format msgid "invalid shell for user %s: %s" msgstr "shell utente %s non valida: %s" -#: plugins/sudoers/sudoers.c:582 +#: plugins/sudoers/sudoers.c:578 msgid "command in current directory" msgstr "comando nella directory corrente" -#: plugins/sudoers/sudoers.c:600 +#: plugins/sudoers/sudoers.c:597 msgid "user not allowed to set a command timeout" msgstr "l'utente non è autorizzato a impostare un timeout per i comandi" -#: plugins/sudoers/sudoers.c:602 +#: plugins/sudoers/sudoers.c:599 msgid "sorry, you are not allowed set a command timeout" msgstr "non è consentito impostare un timeout per i comandi" -#: plugins/sudoers/sudoers.c:610 +#: plugins/sudoers/sudoers.c:607 msgid "user not allowed to preserve the environment" msgstr "l'utente non è autorizzato a preservare l'ambiente" -#: plugins/sudoers/sudoers.c:612 +#: plugins/sudoers/sudoers.c:609 msgid "sorry, you are not allowed to preserve the environment" msgstr "non è consentito preservare l'ambiente" -#: plugins/sudoers/sudoers.c:978 +#: plugins/sudoers/sudoers.c:945 msgid "command too long" msgstr "comando troppo lungo" -#: plugins/sudoers/sudoers.c:1036 +#: plugins/sudoers/sudoers.c:1003 msgid "sudoedit doesn't need to be run via sudo" msgstr "non è necessario eseguire sudoedit via sudo" -#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 +#: plugins/sudoers/sudoers.c:1057 plugins/sudoers/sudoreplay.c:1547 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "impossibile leggere %s" -#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/sudoers.c:1082 plugins/sudoers/visudo.c:432 #: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "impossibile eseguire stat su %s" -#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 +#: plugins/sudoers/sudoers.c:1086 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s non è un file regolare" -#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/timestamp.c:252 toke.l:1112 #, 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:1127 toke.l:1126 +#: plugins/sudoers/sudoers.c:1094 toke.l:1117 #, c-format msgid "%s is world writable" msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/sudoers.c:1131 toke.l:1129 +#: plugins/sudoers/sudoers.c:1098 toke.l:1120 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s è di proprietà del gid %u, dovrebbe essere %u" -#: plugins/sudoers/sudoers.c:1164 +#: plugins/sudoers/sudoers.c:1131 #, c-format msgid "only root can use \"-c %s\"" msgstr "solo root può usare \"-c %s\"" -#: plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1150 #, c-format msgid "unknown login class: %s" msgstr "classe di login sconosciuta: %s" -#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 +#: plugins/sudoers/sudoers.c:1235 plugins/sudoers/sudoers.c:1250 #, c-format msgid "unable to resolve host %s" msgstr "impossibile risolvere l'host %s" -#: plugins/sudoers/sudoreplay.c:256 +#: plugins/sudoers/sudoreplay.c:257 #, c-format msgid "invalid filter option: %s" msgstr "opzione di filtro non valida: %s" -#: plugins/sudoers/sudoreplay.c:272 +#: plugins/sudoers/sudoreplay.c:273 #, c-format msgid "invalid max wait: %s" msgstr "attesa massima non valida: %s" -#: plugins/sudoers/sudoreplay.c:295 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "invalid speed factor: %s" msgstr "fattore di velocità non valido: %s" -#: plugins/sudoers/sudoreplay.c:331 +#: plugins/sudoers/sudoreplay.c:332 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:336 +#: plugins/sudoers/sudoreplay.c:337 #, c-format msgid "%s/timing: %s" msgstr "%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:341 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:364 +#: plugins/sudoers/sudoreplay.c:365 #, c-format msgid "Replaying sudo session: %s" msgstr "Riproduzione della sessione sudo: %s" -#: plugins/sudoers/sudoreplay.c:626 +#: plugins/sudoers/sudoreplay.c:627 msgid "unable to set tty to raw mode" msgstr "impossibile impostare il terminale in modalità raw" -#: plugins/sudoers/sudoreplay.c:677 +#: plugins/sudoers/sudoreplay.c:678 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:678 +#: plugins/sudoers/sudoreplay.c:679 #, 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:706 +#: plugins/sudoers/sudoreplay.c:707 msgid "Replay finished, press any key to restore the terminal." msgstr "Riproduzione terminata. Premere un tasto per ripristinare il terminale." -#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 +#: plugins/sudoers/sudoreplay.c:1197 plugins/sudoers/sudoreplay.c:1227 #, c-format msgid "ambiguous expression \"%s\"" msgstr "espressione \"%s\" ambigua" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1249 msgid "unmatched ')' in expression" msgstr "carattere \")\" nell'espressione non corrisposto" -#: plugins/sudoers/sudoreplay.c:1252 +#: plugins/sudoers/sudoreplay.c:1253 #, c-format msgid "unknown search term \"%s\"" msgstr "termine di ricerca \"%s\" sconosciuto" -#: plugins/sudoers/sudoreplay.c:1267 +#: plugins/sudoers/sudoreplay.c:1268 #, c-format msgid "%s requires an argument" msgstr "%s richiede un argomento" -#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 +#: plugins/sudoers/sudoreplay.c:1271 plugins/sudoers/sudoreplay.c:1523 #, c-format msgid "invalid regular expression: %s" msgstr "espressione regolare non valida: %s" -#: plugins/sudoers/sudoreplay.c:1275 +#: plugins/sudoers/sudoreplay.c:1276 #, c-format msgid "could not parse date \"%s\"" msgstr "impossibile analizzare la data \"%s\"" -#: plugins/sudoers/sudoreplay.c:1284 +#: plugins/sudoers/sudoreplay.c:1285 msgid "unmatched '(' in expression" msgstr "carattere \"(\" nell'espressione non corrisposto" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1287 msgid "illegal trailing \"or\"" msgstr "\"or\" finale non consentito" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1289 msgid "illegal trailing \"!\"" msgstr "carattere \"!\" finale non consentito" -#: plugins/sudoers/sudoreplay.c:1346 +#: plugins/sudoers/sudoreplay.c:1347 #, c-format msgid "unknown search type %d" msgstr "tipo di ricerca %d sconosciuto" -#: plugins/sudoers/sudoreplay.c:1613 +#: plugins/sudoers/sudoreplay.c:1614 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-hnRS] [-d DIR] [-m NUM] [-s NUM] ID\n" -#: plugins/sudoers/sudoreplay.c:1616 +#: plugins/sudoers/sudoreplay.c:1617 #, 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:1625 +#: plugins/sudoers/sudoreplay.c:1626 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2770,7 +2785,7 @@ msgstr "" "%s - Riproduce i registri di sessione di sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1628 msgid "" "\n" "Options:\n" @@ -2991,39 +3006,39 @@ msgstr "impossibile bloccare %s" msgid "Edit anyway? [y/N]" msgstr "Modificare comunque? [y/N]" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1091 #, c-format -msgid "Error: %s:%d: cycle in %s \"%s\"" -msgstr "Errore: %s:%d: ciclo in %s \"%s\"" +msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +msgstr "Errore: %s:%d:%d: ciclo in %s \"%s\"" -#: plugins/sudoers/visudo.c:1090 +#: plugins/sudoers/visudo.c:1092 #, c-format -msgid "Warning: %s:%d: cycle in %s \"%s\"" -msgstr "Attenzione: %s:%d: ciclo in %s \"%s\"" +msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +msgstr "Attenzione: %s:%d:%d: ciclo in %s \"%s\"" -#: plugins/sudoers/visudo.c:1094 +#: plugins/sudoers/visudo.c:1096 #, c-format -msgid "Error: %s:%d: %s \"%s\" referenced but not defined" -msgstr "Errore: %1$s:%2$d riferimento a \"%4$s\" %3$s, ma non definito" +msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "Errore: %1$s:%2$d:%3$d: riferimento a \"%5$s\" %4$s, ma non definito" -#: plugins/sudoers/visudo.c:1095 +#: plugins/sudoers/visudo.c:1097 #, c-format -msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" -msgstr "Attenzione: %1$s:%2$d: riferimento a \"%4$s\" %3$s, ma non definito" +msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "Attenzione: %1$s:%2$d:%3$d: riferimento a \"%5$s\" %4$s, ma non definito" -#: plugins/sudoers/visudo.c:1186 +#: plugins/sudoers/visudo.c:1188 #, c-format -msgid "Warning: %s:%d: unused %s \"%s\"" -msgstr "Attenzione: %s:%d: inutilizzato %s \"%s\"" +msgid "Warning: %s:%d:%d: unused %s \"%s\"" +msgstr "Attenzione: %s:%d:%d: inutilizzato %s \"%s\"" -#: plugins/sudoers/visudo.c:1301 +#: plugins/sudoers/visudo.c:1303 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "%s - Modifica in sicurezza il file sudoers\n" -#: plugins/sudoers/visudo.c:1303 +#: plugins/sudoers/visudo.c:1305 msgid "" "\n" "Options:\n" @@ -3043,6 +3058,30 @@ msgstr "" " -s, --strict Verifica precisa della sintassi\n" " -V, --version Visualizza la versione ed esce\n" -#: toke.l:1093 +#: toke.l:179 +msgid "empty string" +msgstr "stringa vuota" + +#: toke.l:189 toke.l:491 +msgid "empty group" +msgstr "gruppo vuoto" + +#: toke.l:197 toke.l:489 +msgid "empty netgroup" +msgstr "netgroup vuoto" + +#: toke.l:293 toke.l:305 toke.l:317 toke.l:333 toke.l:352 toke.l:392 +msgid "invalid line continuation" +msgstr "continuazione riga non valida" + +#: toke.l:528 toke.l:540 +msgid "invalid IPv6 address" +msgstr "indirizzo IPv6 non valido" + +#: toke.l:764 +msgid "unexpected line break in string" +msgstr "interruzione riga non attesa nella stringa" + +#: toke.l:1084 msgid "too many levels of includes" msgstr "troppi livelli di inclusioni" diff --git a/plugins/sudoers/po/ko.mo b/plugins/sudoers/po/ko.mo index ddc608fc5fc41ad174de32b6b197990e50cf1def..3a1b32c83d530407b738cf39b752688babaaa0a8 100644 GIT binary patch delta 14158 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 delta 12413 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 diff --git a/plugins/sudoers/po/ko.po b/plugins/sudoers/po/ko.po index 156fd8ebc7..04af0c5960 100644 --- a/plugins/sudoers/po/ko.po +++ b/plugins/sudoers/po/ko.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.4b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-17 23:15+0900\n" +"POT-Creation-Date: 2020-11-14 06:24-0700\n" +"PO-Revision-Date: 2020-12-11 01:02+0900\n" "Last-Translator: Seong-ho Cho \n" "Language-Team: Korean \n" "Language: ko\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 2.3.1\n" -#: confstr.sh:1 +#: confstr.sh:1 gram.y:1077 msgid "syntax error" msgstr "문법 오류" @@ -43,70 +43,73 @@ msgstr "*** %h 보안 알림 ***" msgid "Sorry, try again." msgstr "죄송합니다만, 다시 시도하십시오." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 -#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 -#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 -#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 -#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 -#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 -#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: gram.y:220 gram.y:286 gram.y:293 gram.y:300 gram.y:307 gram.y:314 +#: gram.y:334 gram.y:358 gram.y:365 gram.y:372 gram.y:379 gram.y:386 +#: gram.y:455 gram.y:464 gram.y:475 gram.y:510 gram.y:517 gram.y:524 +#: gram.y:531 gram.y:558 gram.y:654 gram.y:661 gram.y:670 gram.y:679 +#: gram.y:696 gram.y:834 gram.y:841 gram.y:849 gram.y:855 gram.y:971 +#: gram.y:978 gram.y:985 gram.y:992 gram.y:999 gram.y:1025 gram.y:1032 +#: gram.y:1039 gram.y:1236 gram.y:1526 lib/eventlog/eventlog.c:280 +#: lib/eventlog/eventlog.c:352 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:817 lib/eventlog/eventlog.c:1062 +#: lib/iolog/iolog_fileio.c:998 lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:305 lib/iolog/iolog_json.c:335 +#: lib/iolog/iolog_json.c:457 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/sendlog.c:480 +#: plugins/sudoers/alias.c:126 plugins/sudoers/alias.c:134 +#: plugins/sudoers/alias.c:153 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/bsdauth.c:143 +#: plugins/sudoers/auth/kerb5.c:118 plugins/sudoers/auth/kerb5.c:144 +#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/cvtsudoers.c:119 +#: plugins/sudoers/cvtsudoers.c:160 plugins/sudoers/cvtsudoers.c:177 +#: plugins/sudoers/cvtsudoers.c:188 plugins/sudoers/cvtsudoers.c:300 +#: plugins/sudoers/cvtsudoers.c:428 plugins/sudoers/cvtsudoers.c:561 +#: plugins/sudoers/cvtsudoers.c:578 plugins/sudoers/cvtsudoers.c:641 +#: plugins/sudoers/cvtsudoers.c:756 plugins/sudoers/cvtsudoers.c:764 +#: plugins/sudoers/cvtsudoers.c:1178 plugins/sudoers/cvtsudoers.c:1182 +#: plugins/sudoers/cvtsudoers.c:1284 plugins/sudoers/cvtsudoers_json.c:76 +#: plugins/sudoers/cvtsudoers_ldif.c:151 plugins/sudoers/cvtsudoers_ldif.c:194 +#: plugins/sudoers/cvtsudoers_ldif.c:235 plugins/sudoers/cvtsudoers_ldif.c:300 +#: plugins/sudoers/cvtsudoers_ldif.c:371 plugins/sudoers/cvtsudoers_ldif.c:421 +#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:440 +#: plugins/sudoers/cvtsudoers_ldif.c:447 plugins/sudoers/cvtsudoers_ldif.c:460 +#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:615 +#: plugins/sudoers/defaults.c:630 plugins/sudoers/defaults.c:923 +#: plugins/sudoers/defaults.c:1098 plugins/sudoers/editor.c:181 +#: plugins/sudoers/env.c:261 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 #: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:596 +#: plugins/sudoers/iolog.c:613 plugins/sudoers/ldap.c:184 +#: plugins/sudoers/ldap.c:422 plugins/sudoers/ldap.c:432 +#: plugins/sudoers/ldap.c:437 plugins/sudoers/ldap.c:441 +#: plugins/sudoers/ldap.c:453 plugins/sudoers/ldap.c:744 +#: plugins/sudoers/ldap.c:908 plugins/sudoers/ldap.c:1281 +#: plugins/sudoers/ldap.c:1709 plugins/sudoers/ldap.c:1746 +#: plugins/sudoers/ldap.c:1827 plugins/sudoers/ldap.c:1962 +#: plugins/sudoers/ldap.c:2063 plugins/sudoers/ldap.c:2079 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/log_client.c:105 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:166 +#: plugins/sudoers/logging.c:426 plugins/sudoers/logging.c:446 +#: plugins/sudoers/logging.c:527 plugins/sudoers/match_command.c:281 +#: plugins/sudoers/match_command.c:449 plugins/sudoers/match_command.c:499 +#: plugins/sudoers/match_command.c:573 plugins/sudoers/match_digest.c:93 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -116,115 +119,138 @@ msgstr "죄송합니다만, 다시 시도하십시오." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 -#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:407 +#: plugins/sudoers/sssd.c:470 plugins/sudoers/sssd.c:514 +#: plugins/sudoers/sssd.c:561 plugins/sudoers/sssd.c:754 +#: plugins/sudoers/stubs.c:110 plugins/sudoers/stubs.c:118 +#: plugins/sudoers/sudoers.c:300 plugins/sudoers/sudoers.c:326 +#: plugins/sudoers/sudoers.c:370 plugins/sudoers/sudoers.c:381 +#: plugins/sudoers/sudoers.c:391 plugins/sudoers/sudoers.c:433 +#: plugins/sudoers/sudoers.c:794 plugins/sudoers/sudoers.c:927 +#: plugins/sudoers/sudoers.c:961 plugins/sudoers/sudoers.c:1265 +#: plugins/sudoers/sudoreplay.c:552 plugins/sudoers/sudoreplay.c:555 +#: plugins/sudoers/sudoreplay.c:1259 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/sudoreplay.c:1473 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/testsudoers.c:587 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1129 toke.l:913 toke.l:1033 toke.l:1091 msgid "unable to allocate memory" msgstr "메모리를 할당할 수 없습니다" -#: gram.y:505 +#: gram.y:552 msgid "a digest requires a path name" msgstr "다이제스트에 경로 이름이 필요합니다" -#: gram.y:638 +#: gram.y:581 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "%s: \"CWD\" 값은 '/'; '~'; '*' 문자로 시작해야합니다" + +#: gram.y:593 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "%s: \"CHROOT\" 값은 '/'; '~'; '*' 문자로 시작해야합니다" + +#: gram.y:715 +#, c-format +msgid "syntax error, reserved word %s used as an alias name" +msgstr "문법 오류. %s 예약어를 별칭으로 썼습니다" + +#: gram.y:735 msgid "invalid notbefore value" msgstr "잘못된 notbefore 값" -#: gram.y:646 +#: gram.y:743 msgid "invalid notafter value" msgstr "잘못된 notafter 값" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:752 plugins/sudoers/policy.c:335 msgid "timeout value too large" msgstr "제한 시간 값이 너무 큽니다" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:754 plugins/sudoers/policy.c:337 msgid "invalid timeout value" msgstr "잘못된 제한 시간 값" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1079 +#, c-format +msgid "%s:%d:%d: %s\n" +msgstr "%s:%d:%d: %s\n" + +#: gram.y:1526 lib/eventlog/eventlog.c:280 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:815 lib/eventlog/eventlog.c:816 +#: lib/eventlog/eventlog.c:1062 lib/iolog/iolog_fileio.c:998 +#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:335 lib/iolog/iolog_json.c:457 +#: lib/iolog/iolog_json.c:735 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/logsrvd.c:1280 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1338 logsrvd/sendlog.c:480 logsrvd/sendlog.c:1321 +#: logsrvd/sendlog.c:1328 logsrvd/sendlog.c:1746 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:630 +#: plugins/sudoers/defaults.c:923 plugins/sudoers/defaults.c:1098 +#: plugins/sudoers/editor.c:181 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:596 plugins/sudoers/iolog.c:613 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:422 +#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:437 +#: plugins/sudoers/ldap.c:441 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:744 plugins/sudoers/ldap.c:908 +#: plugins/sudoers/ldap.c:1281 plugins/sudoers/ldap.c:1709 +#: plugins/sudoers/ldap.c:1746 plugins/sudoers/ldap.c:1827 +#: plugins/sudoers/ldap.c:1962 plugins/sudoers/ldap.c:2063 +#: plugins/sudoers/ldap.c:2079 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:603 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/log_client.c:105 +#: plugins/sudoers/log_client.c:214 plugins/sudoers/log_client.c:235 +#: plugins/sudoers/log_client.c:248 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:165 +#: plugins/sudoers/logging.c:166 plugins/sudoers/logging.c:425 +#: plugins/sudoers/logging.c:445 plugins/sudoers/logging.c:527 +#: plugins/sudoers/match_command.c:280 plugins/sudoers/match_command.c:448 +#: plugins/sudoers/match_command.c:498 plugins/sudoers/match_command.c:573 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:198 +#: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:229 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:274 plugins/sudoers/parse_ldif.c:152 #: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 #: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 #: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 @@ -234,60 +260,112 @@ msgstr "잘못된 제한 시간 값" #: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 #: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 #: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:148 +#: plugins/sudoers/policy.c:157 plugins/sudoers/policy.c:183 +#: plugins/sudoers/policy.c:320 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:337 plugins/sudoers/policy.c:366 +#: plugins/sudoers/policy.c:375 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:428 plugins/sudoers/policy.c:437 +#: plugins/sudoers/policy.c:446 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 #: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 +#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:144 +#: plugins/sudoers/sssd.c:407 plugins/sudoers/sssd.c:470 +#: plugins/sudoers/sssd.c:514 plugins/sudoers/sssd.c:561 +#: plugins/sudoers/sssd.c:754 plugins/sudoers/stubs.c:110 +#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:300 +#: plugins/sudoers/sudoers.c:326 plugins/sudoers/sudoers.c:370 +#: plugins/sudoers/sudoers.c:381 plugins/sudoers/sudoers.c:391 +#: plugins/sudoers/sudoers.c:433 plugins/sudoers/sudoers.c:794 +#: plugins/sudoers/sudoers.c:927 plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:1265 plugins/sudoers/sudoreplay.c:552 +#: plugins/sudoers/sudoreplay.c:555 plugins/sudoers/sudoreplay.c:1259 +#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/sudoreplay.c:1473 #: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:587 #: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 #: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 #: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 #: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/visudo.c:145 plugins/sudoers/visudo.c:323 +#: plugins/sudoers/visudo.c:329 plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:615 plugins/sudoers/visudo.c:935 +#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:913 +#: toke.l:1033 toke.l:1091 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/eventlog/eventlog.c:285 lib/iolog/iolog_json.c:463 +#: lib/iolog/iolog_json.c:466 lib/iolog/iolog_json.c:468 +#: lib/iolog/iolog_json.c:560 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 +#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/ldap.c:517 plugins/sudoers/ldap.c:748 +#: plugins/sudoers/ldap.c:1081 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:90 +#: plugins/sudoers/policy.c:556 plugins/sudoers/policy.c:711 +#: plugins/sudoers/policy.c:721 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:983 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/toke_util.c:169 +#, c-format +msgid "internal error, %s overflow" +msgstr "내부 오류. %s 오버플로우" + +#: lib/eventlog/eventlog.c:343 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "표준 입력을 복제할 수 없습니다: %m" + +#: lib/eventlog/eventlog.c:388 +#, c-format +msgid "unable to execute %s: %m" +msgstr "%s을(를) 실행할 수 없습니다: %m" + +#: lib/eventlog/eventlog.c:428 plugins/sudoers/auth/aix_auth.c:198 +msgid "unable to fork" +msgstr "포킹할 수 없습니다" + +#: lib/eventlog/eventlog.c:436 lib/eventlog/eventlog.c:490 +#, c-format +msgid "unable to fork: %m" +msgstr "포킹할 수 없습니다: %m" + +#: lib/eventlog/eventlog.c:480 +#, c-format +msgid "unable to open pipe: %m" +msgstr "파이프를 열 수 없습니다: %m" + +#: lib/eventlog/eventlog.c:894 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: lib/eventlog/eventlog.c:923 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (명령 계속 실행) %s" + +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s이(가) 있지만 디렉터리가 아닙니다(0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "mkdir %s 명령을 실행할 수 없습니다" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "%s 모드를 0%o 값으로 바꿀 수 없습니다" @@ -297,63 +375,45 @@ msgstr "%s 모드를 0%o 값으로 바꿀 수 없습니다" msgid "expected JSON_STRING, got %d" msgstr "JSON_STRING 값을 기대했지만, %d 결과가 나왔습니다" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:327 msgid "missing double quote in name" msgstr "이름에 이중 따옴표가 빠졌습니다" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:414 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "JSON_OBJECT 값을 기대했지만, %d 결과가 나왔습니다" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 -#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 -#: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 -#: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 -#: plugins/sudoers/toke_util.c:169 -#, c-format -msgid "internal error, %s overflow" -msgstr "내부 오류. %s 오버플로우" - -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:753 msgid "unmatched close brace" msgstr "일치하지 않는 중괄호 닫기 표시" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:638 msgid "unexpected array" msgstr "예기치 않은 배열 발견" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:651 lib/iolog/iolog_json.c:755 msgid "unmatched close bracket" msgstr "일치하지 않는 각괄호 닫기 표시" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:659 msgid "unexpected string" msgstr "예기치 않은 문자열 값 발견" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:669 msgid "missing colon after name" msgstr "이름 뒤에 콜론이 빠졌습니다" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:680 lib/iolog/iolog_json.c:695 +#: lib/iolog/iolog_json.c:710 msgid "unexpected boolean" msgstr "예기치 않은 부울린 값 발견" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:726 msgid "unexpected number" msgstr "예기치 않은 숫자 값 발견" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:763 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u \"%s\"을(를) 해석할 수 없습니다" @@ -398,186 +458,184 @@ msgstr "타이밍 파일 읽기 오류: %s" msgid "invalid timing file line: %s" msgstr "잘못된 타이밍 파일 행: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 -#, c-format -msgid "%8s : %s" -msgstr "%8s : %s" - -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 -#, c-format -msgid "%8s : (command continued) %s" -msgstr "%8s : (명령 계속 실행) %s" - -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:919 msgid "log is already complete, cannot be restarted" msgstr "로그를 이미 끝냈으며, 다시 시작할 수 없습니다" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:950 msgid "unable to restart log" msgstr "로그를 다시 시작할 수 없습니다" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:352 plugins/sudoers/sudoreplay.c:358 #, c-format msgid "unable to open %s/%s" msgstr "%s/%s을(를) 열 수 없습니다" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "입출력 로그 파일 %s/%s 빠짐" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: %zu회 이전 탐색을 진행할 수 없습니다" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "%3$s/%4$s에서 재개 지점[%1$lld, %2$ld]을 찾을 수 없습니다" -#: logsrvd/logsrvd.c:230 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 -#: logsrvd/logsrvd.c:398 logsrvd/logsrvd.c:445 logsrvd/logsrvd.c:496 -#: logsrvd/logsrvd.c:528 logsrvd/logsrvd.c:560 +#: logsrvd/logsrvd.c:290 logsrvd/logsrvd.c:353 logsrvd/logsrvd.c:394 +#: logsrvd/logsrvd.c:449 logsrvd/logsrvd.c:517 logsrvd/logsrvd.c:568 +#: logsrvd/logsrvd.c:600 logsrvd/logsrvd.c:632 msgid "state machine error" msgstr "상태 머신 오류" -#: logsrvd/logsrvd.c:239 +#: logsrvd/logsrvd.c:299 msgid "invalid AcceptMessage" msgstr "잘못된 AcceptMessage" -#: logsrvd/logsrvd.c:250 +#: logsrvd/logsrvd.c:307 msgid "error parsing AcceptMessage" msgstr "AcceptMessage 해석 오류" -#: logsrvd/logsrvd.c:257 +#: logsrvd/logsrvd.c:314 msgid "error creating I/O log" msgstr "입출력 로그 만드는 중 오류" -#: logsrvd/logsrvd.c:265 +#: logsrvd/logsrvd.c:321 msgid "error logging accept event" msgstr "수락 이벤트 로깅 중 오류" -#: logsrvd/logsrvd.c:308 +#: logsrvd/logsrvd.c:362 msgid "invalid RejectMessage" msgstr "잘못된 RejectMessage" -#: logsrvd/logsrvd.c:319 +#: logsrvd/logsrvd.c:370 msgid "error parsing RejectMessage" msgstr "RejectMessage 해석 오류" -#: logsrvd/logsrvd.c:325 +#: logsrvd/logsrvd.c:376 msgid "error logging reject event" msgstr "거절 이벤트 로깅 중 오류" -#: logsrvd/logsrvd.c:430 +#: logsrvd/logsrvd.c:486 +msgid "invalid AlertMessage" +msgstr "잘못된 AlertMessage" + +#: logsrvd/logsrvd.c:494 +msgid "error parsing AlertMessage" +msgstr "AlertMessage 해석 오류" + +#: logsrvd/logsrvd.c:502 msgid "error logging alert event" msgstr "경고 이벤트 로깅 중 오류" -#: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 +#: logsrvd/logsrvd.c:523 logsrvd/logsrvd.c:574 logsrvd/logsrvd.c:606 msgid "protocol error" msgstr "프로토콜 오류" -#: logsrvd/logsrvd.c:461 +#: logsrvd/logsrvd.c:533 msgid "error writing IoBuffer" msgstr "입출력 버퍼 기록 중 오류" -#: logsrvd/logsrvd.c:513 +#: logsrvd/logsrvd.c:585 msgid "error writing ChangeWindowSize" msgstr "ChangeWindowSize 기록 중 오류" -#: logsrvd/logsrvd.c:545 +#: logsrvd/logsrvd.c:617 msgid "error writing CommandSuspend" msgstr "CommandSuspend 기록 중 오류" -#: logsrvd/logsrvd.c:630 +#: logsrvd/logsrvd.c:702 msgid "unrecognized ClientMessage type" msgstr "인식할 수 없는 ClientMessage 형식" -#: logsrvd/logsrvd.c:895 +#: logsrvd/logsrvd.c:967 msgid "client message too large" msgstr "클라이언트 메시지가 너무 깁니다" -#: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 +#: logsrvd/logsrvd.c:1197 logsrvd/logsrvd.c:1205 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "%s에 TLS 1.2 암호 모음을 설정할 수 없습니다: %s" -#: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 +#: logsrvd/logsrvd.c:1225 logsrvd/logsrvd.c:1233 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "%s에 TLS 1.3 암호 모음을 설정할 수 없습니다: %s" -#: logsrvd/logsrvd.c:1197 +#: logsrvd/logsrvd.c:1269 #, c-format msgid "unable to get TLS server method: %s" msgstr "TLS 서버 처리 정보를 가져올 수 없습니다: %s" -#: logsrvd/logsrvd.c:1202 +#: logsrvd/logsrvd.c:1274 #, c-format msgid "unable to create TLS context: %s" msgstr "TLS 컨텍스트를 만들 수 없습니다: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1281 plugins/sudoers/log_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "%s 인증서를 불러올 수 없습니다" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1294 plugins/sudoers/log_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "%s 인증서 인증 번들을 불러올 수 없습니다" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1339 plugins/sudoers/log_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "%s 개인 키를 불러올 수 없습니다" -#: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1356 logsrvd/logsrvd.c:1365 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "디피-헬먼 매개변수를 설정할 수 없습니다: %s" -#: logsrvd/logsrvd.c:1306 +#: logsrvd/logsrvd.c:1378 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "TLS 프로토콜 최소 버전을 1.2로 설정할 수 없습니다: %s" -#: logsrvd/logsrvd.c:1491 +#: logsrvd/logsrvd.c:1563 msgid "unable to get remote IP addr" msgstr "원격 IP 주소를 가져올 수 없습니다" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1591 plugins/sudoers/log_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "ssl 객체에 사용자 데이터를 붙일 수 없습니다: %s" -#: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/logsrvd.c:1599 logsrvd/logsrvd.c:1721 logsrvd/logsrvd.c:1823 +#: logsrvd/sendlog.c:1125 logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1496 +#: logsrvd/sendlog.c:1554 plugins/sudoers/iolog.c:956 +#: plugins/sudoers/iolog.c:1089 plugins/sudoers/iolog.c:1187 +#: plugins/sudoers/log_client.c:109 plugins/sudoers/log_client.c:324 +#: plugins/sudoers/log_client.c:340 plugins/sudoers/log_client.c:386 +#: plugins/sudoers/log_client.c:587 plugins/sudoers/log_client.c:594 +#: plugins/sudoers/log_client.c:1103 plugins/sudoers/log_client.c:1376 +#: plugins/sudoers/log_client.c:1417 plugins/sudoers/log_client.c:1425 +#: plugins/sudoers/log_client.c:1576 plugins/sudoers/log_client.c:1692 +#: plugins/sudoers/log_client.c:2007 plugins/sudoers/log_client.c:2015 +#: plugins/sudoers/sudoreplay.c:512 plugins/sudoers/sudoreplay.c:559 +#: plugins/sudoers/sudoreplay.c:791 plugins/sudoers/sudoreplay.c:903 +#: plugins/sudoers/sudoreplay.c:993 plugins/sudoers/sudoreplay.c:1008 +#: plugins/sudoers/sudoreplay.c:1015 plugins/sudoers/sudoreplay.c:1022 +#: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 +#: plugins/sudoers/sudoreplay.c:1163 msgid "unable to add event to queue" msgstr "큐에 이벤트를 추가할 수 없습니다" -#: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 +#: logsrvd/logsrvd.c:1775 logsrvd/logsrvd.c:2011 msgid "unable setup listen socket" msgstr "감청 소켓을 설정할 수 없습니다" -#: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 +#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:124 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" @@ -586,7 +644,7 @@ msgstr "" "%s - 원격 서버에 sudo 입출력 로그를 보냅니다\n" "\n" -#: logsrvd/logsrvd.c:1846 +#: logsrvd/logsrvd.c:1920 msgid "" "\n" "Options:\n" @@ -604,78 +662,78 @@ msgstr "" " -R, --random-drop 연결을 쳐낼 백분율\n" " -V, --version 버전 정보를 나타낸 후 나갑니다\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1972 logsrvd/sendlog.c:1719 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C 1.3 이상의 버전이 필요합니다" -#: logsrvd/logsrvd.c:1916 +#: logsrvd/logsrvd.c:1990 #, c-format msgid "invalid random drop value: %s" msgstr "잘못된 임의 드롭 값: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1994 logsrvd/sendlog.c:1769 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s 버전 %s\n" -#: logsrvd/logsrvd_conf.c:393 +#: logsrvd/logsrvd_conf.c:331 msgid "TLS not supported" msgstr "TLS를 지원하지 않습니다" -#: logsrvd/logsrvd_conf.c:405 +#: logsrvd/logsrvd_conf.c:343 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 +#: logsrvd/logsrvd_conf.c:409 logsrvd/logsrvd_conf.c:653 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: 완전하지 않은 경로" -#: logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:767 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d 일치하지 않는 '[': %s" -#: logsrvd/logsrvd_conf.c:840 +#: logsrvd/logsrvd_conf.c:778 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d 잘못된 설정 섹션: %s" -#: logsrvd/logsrvd_conf.c:848 +#: logsrvd/logsrvd_conf.c:786 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d 잘못된 설정 행: %s" -#: logsrvd/logsrvd_conf.c:854 +#: logsrvd/logsrvd_conf.c:792 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d(에)서 섹션 이름이 나와야 합니다: %s" -#: logsrvd/logsrvd_conf.c:868 +#: logsrvd/logsrvd_conf.c:806 #, c-format msgid "invalid value for %s: %s" msgstr "잘못된 %s 값: %s" -#: logsrvd/logsrvd_conf.c:876 +#: logsrvd/logsrvd_conf.c:814 #, c-format msgid "%s:%d unknown key: %s" msgstr "%s:%d 알 수 없는 키: %s" -#: logsrvd/logsrvd_conf.c:1032 +#: logsrvd/logsrvd_conf.c:1003 #, c-format msgid "unknown syslog facility %s" msgstr "알 수 없는 syslog 수단 %s" -#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1040 -#: logsrvd/logsrvd_conf.c:1044 +#: logsrvd/logsrvd_conf.c:1007 logsrvd/logsrvd_conf.c:1011 +#: logsrvd/logsrvd_conf.c:1015 #, c-format msgid "unknown syslog priority %s" msgstr "알 수 없는 syslog 우선 순위 %s" -#: logsrvd/sendlog.c:126 +#: logsrvd/sendlog.c:127 msgid "" "\n" "Options:\n" @@ -709,145 +767,148 @@ msgstr "" " -t, --test 선택한 입출력 로그를 병렬로 n회 전송하여 감사 서버 테스트\n" " -V, --version 버전 정보를 나타 후 나갑니다\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:164 plugins/sudoers/log_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "%s:%s을(를) 찾을 수 없습니다: %s" -#: logsrvd/sendlog.c:186 +#: logsrvd/sendlog.c:202 msgid "unable to get server IP addr" msgstr "서버 IP 주소를 가져올 수 없습니다" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:256 plugins/sudoers/sudoreplay.c:851 #, c-format msgid "unable to read %s/%s: %s" msgstr "%s/%s을(를) 읽을 수 없습니다: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:277 plugins/sudoers/log_client.c:694 #, c-format msgid "client message too large: %zu" msgstr "클라이언드 메시지가 너무 깁니다: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:810 #, c-format msgid "%s: write buffer already in use" msgstr "%s: 쓰기 버퍼를 이미 사용중입니다" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:862 plugins/sudoers/iolog.c:880 +#: plugins/sudoers/iolog.c:949 #, c-format msgid "unexpected I/O event %d" msgstr "예기치 않은 입출력 이벤트 %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:908 logsrvd/sendlog.c:925 logsrvd/sendlog.c:959 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1386 +#: plugins/sudoers/log_client.c:1454 plugins/sudoers/log_client.c:1490 #, c-format msgid "%s: unexpected state %d" msgstr "%s: 예기치 않은 상태 번호 %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:931 plugins/sudoers/log_client.c:1460 msgid "invalid ServerHello" msgstr "잘못된 ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:995 plugins/sudoers/log_client.c:1534 #, c-format msgid "error message received from server: %s" msgstr "서버로부터 오류 메시지를 받았습니다: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:1008 plugins/sudoers/log_client.c:1547 #, c-format msgid "abort message received from server: %s" msgstr "서버로부터 중단 메시지를 받았습니다: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1027 plugins/sudoers/log_client.c:1566 msgid "unable to unpack ServerMessage" msgstr "ServerMessage를 언팩할 수 없습니다" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1067 plugins/sudoers/log_client.c:1597 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: 예기지 않은 type_case 값 %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1096 msgid "timeout reading from server" msgstr "서버 데이터 읽기 시간 초과" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1174 msgid "premature EOF" msgstr "갑작스러운 EOF" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1187 plugins/sudoers/log_client.c:1751 #, c-format msgid "server message too large: %u" msgstr "서버 메시지가 너무 깁니다: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1238 msgid "timeout writing to server" msgstr "서버 기록 시간 초과" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1457 plugins/sudoers/log_client.c:296 msgid "TLS handshake timeout occurred" msgstr "TLS 핸드셰이크 시간을 초과했습니다" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1476 logsrvd/sendlog.c:1491 +#: plugins/sudoers/log_client.c:318 plugins/sudoers/log_client.c:334 msgid "unable to set event" msgstr "이벤트를 설정할 수 없습니다" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1501 logsrvd/sendlog.c:1505 #, c-format msgid "TLS connection failed: %s" msgstr "TLS 연결 실패: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1538 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "SSL 컨텍스트를 초기화할 수 없습니다: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1543 plugins/sudoers/log_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "SSL 객체를 할당할 수 없습니다: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1548 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "SSL 객체에 소켓을 붙일 수 없습니다: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1792 msgid "both restart point and iolog ID must be specified" msgstr "다시 시작 지점과 입출력 로그 ID를 반드시 지정해야합니다" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1796 msgid "a restart point may not be set when no I/O is sent" msgstr "입출력을 보내지 않을 때 다시 시작 지점을 지정하지 않습니다" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1871 #, c-format msgid "exited prematurely with state %d" msgstr "%d 상태로 갑자기 빠져나왔습니다" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1872 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "경과 시간을 서버로 보냈습니다 [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1874 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "제출 지점 정보를 서버로부터 받았습니다 [%lld, %ld]" -#: plugins/sudoers/alias.c:144 +#: plugins/sudoers/alias.c:148 #, c-format msgid "Alias \"%s\" already defined" msgstr "\"%s\" 별칭을 이미 정의했습니다" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 -msgid "unable to fork" -msgstr "포킹할 수 없습니다" +#: plugins/sudoers/audit.c:206 plugins/sudoers/audit.c:343 +#: plugins/sudoers/log_client.c:954 plugins/sudoers/log_client.c:1002 +#: plugins/sudoers/log_client.c:1050 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:548 plugins/sudoers/policy.c:114 +msgid "unable to get time of day" +msgstr "일시 정보를 가져올 수 없습니다" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "%s의 암호를 바꿀 수 없습니다" @@ -869,11 +930,11 @@ msgstr "잘못된 인증 형식입니다" msgid "unable to initialize BSD authentication" msgstr "BSD 인증을 초기화할 수 없습니다" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "계정 유효 기간이 지났습니다" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "승인 실패" @@ -980,7 +1041,7 @@ msgstr "계정 기한이 지났거나 PAM 설정에 sudo에서 확인할 \"accou msgid "PAM account management error: %s" msgstr "PAM 계정 관리 오류: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "%s 데이터베이스에 없습니다" @@ -1009,7 +1070,7 @@ msgstr "SecurID용 인증 핸들이 잘못되었습니다" msgid "SecurID communication failed" msgstr "SecurID 통신에 실패했습니다" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "알 수 없는 SecurID 오류" @@ -1017,7 +1078,7 @@ msgstr "알 수 없는 SecurID 오류" msgid "invalid passcode length for SecurID" msgstr "SecurID용 암호 길이가 잘못되었습니다" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "SIA 세션을 초기화할 수 없습니다" @@ -1041,7 +1102,7 @@ msgstr "sudo에 컴파일한 인증 방식이 없습니다! 인증 기능을 msgid "Unable to initialize authentication methods." msgstr "인증 방식을 초기화할 수 없습니다." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "인증 방식:" @@ -1074,117 +1135,117 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:837 plugins/sudoers/sudoers.c:858 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "알 수 없는 uid: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1088 +#: plugins/sudoers/sudoers.c:440 plugins/sudoers/sudoers.c:1307 +#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "알 수 없는 사용자: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "순서 증가: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "순서 시작: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "순서 패딩: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s 문법 버전 %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "지원하지 않는 %s 입력 형식" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "지원하지 않는 %s 출력 형식" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: 입출력 파일은 달라야합니다" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:178 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "sudoers 기본 값을 초기화할 수 없습니다" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: 알 수 없는 키워드: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "잘못된 기본 형식: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "잘못된 생략 형식: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "잘못된 필터: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoreplay.c:1435 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "%s을(를) 열 수 없습니다" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "%s 파일 해석에 실패했습니다. 알 수 없는 오류." -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s %d번째 줄 인근 해석 오류\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "%s 해석 오류\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1124 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "%s에 기록할 수 없습니다" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1193,7 +1254,7 @@ msgstr "" "%s - sudoers 파일 형식을 변환합니다\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1234,675 +1295,700 @@ msgstr "" " -V, --version 버전 정보를 표시하고 빠져나갑니다" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "알 수 없는 \"%s\" 기본 항목" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 -#: plugins/sudoers/ldap.c:502 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 +#: plugins/sudoers/ldap.c:503 msgid "unable to get GMT time" msgstr "GMT 시간을 가져올 수 없습니다" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 -#: plugins/sudoers/ldap.c:508 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 +#: plugins/sudoers/ldap.c:509 msgid "unable to format timestamp" msgstr "타임스탬프를 형식에 맞출 수 없습니다" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "sudoers 항목이 너무 많습니다. 최대 갯수는 %u개 입니다" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "SUDOERS_BASE 환경 변수를 설정하지 않았으며 -b 옵션을 지정하지 않았습니다." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:50 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "syslog를 기록 목적으로 활용할 때의 syslog 기능: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:54 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "사용자 인증에 성공했을 때 사용할 syslog 우선 순위: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:58 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "사용자 인증에 실패했을 때 사용할 syslog 우선 순위: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:62 msgid "Put OTP prompt on its own line" msgstr "일회용 암호 입력 프롬프트를 자체 줄에 표시" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:66 msgid "Ignore '.' in $PATH" msgstr "$PATH의 '.'은 무시합니다" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:70 msgid "Always send mail when sudo is run" msgstr "sudo를 실행할 때 항상 메일을 보냄" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if user authentication fails" msgstr "사용자가 인증에 실패했을 때 메일을 보냄" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:78 msgid "Send mail if the user is not in sudoers" msgstr "사용자가 sudoer가 아닐 때 메일을 보냄" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:82 msgid "Send mail if the user is not in sudoers for this host" msgstr "사용자가 이 호스트의 sudoer가 아닐 때 메일을 보냄" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:86 msgid "Send mail if the user is not allowed to run a command" msgstr "사용자가 명령을 실행하도록 허용하지 않았을 때 메일을 보냄" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:90 msgid "Send mail if the user tries to run a command" msgstr "사용자가 명령 실행을 시도했을 때 메일을 보냄" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:94 msgid "Use a separate timestamp for each user/tty combo" msgstr "각 사용자/tty에 타임스탬프를 따로 사용" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:98 msgid "Lecture user the first time they run sudo" msgstr "sudo를 처음 실행할 때 사용자에게 지침 안내" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:102 #, c-format msgid "File containing the sudo lecture: %s" msgstr "sudo 지침 안내가 들어있는 파일: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:106 msgid "Require users to authenticate by default" msgstr "기본적으로 사용자 인증 필요" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:110 msgid "Root may run sudo" msgstr "루트 사용자의 sudo 실행" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:114 msgid "Log the hostname in the (non-syslog) log file" msgstr "로그(비 syslog) 파일에 호스트 이름 기록" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:118 msgid "Log the year in the (non-syslog) log file" msgstr "로그(비 syslog) 파일에 연도 기록" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:122 msgid "If sudo is invoked with no arguments, start a shell" msgstr "sudo에 인자를 넣어 실행하지 않으면 셸 시작" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:126 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "-s 옵션으로 셸을 시작할 때 $HOME을 대상 사용자로 설정" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:130 msgid "Always set $HOME to the target user's home directory" msgstr "항상 $HOME을 대상 사용자의 내 폴더로 설정" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:134 msgid "Allow some information gathering to give useful error messages" msgstr "쓸만한 오류 메시지를 제공할 목적으로 일부 정보 수집 허용" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:138 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "sudoers 파일에 완전한 형태를 갖춘 호스트 이름 필요" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:142 msgid "Insult the user when they enter an incorrect password" msgstr "올바르지 않은 암호를 입력했을 때 사용자 놀리기" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:146 msgid "Only allow the user to run sudo if they have a tty" msgstr "tty를 보유한 사용자만 sudo 실행 허용" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:150 msgid "Visudo will honor the EDITOR environment variable" msgstr "EDITOR 환경 변수 대신 visudo 사용" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:154 msgid "Prompt for root's password, not the users's" msgstr "사용자 암호가 아닌 루트 암호 요구" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:158 msgid "Prompt for the runas_default user's password, not the users's" msgstr "사용자 암호가 아닌 runas_default 사용자 암호 요구" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:162 msgid "Prompt for the target user's password, not the users's" msgstr "사용자 암호가 아닌 대상 사용자 암호 요구" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:166 msgid "Apply defaults in the target user's login class if there is one" msgstr "대상 사용자 로그인 클래스가 있다면 기본값 적용" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:170 msgid "Set the LOGNAME and USER environment variables" msgstr "LOGNAME 및 USER 환경 변수 설정" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:174 msgid "Only set the effective uid to the target user, not the real uid" msgstr "실제 uid가 아닌 대상 사용자에게 유효한 uid 설정" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:178 msgid "Don't initialize the group vector to that of the target user" msgstr "대상 사용자의 그룹 벡터 초기화 안함" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "로그 파일 줄을 바꿀 줄의 한계 길이(0 값은 줄 바꿈 안함): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "인증 타임스탬프 제한 시간: %.1f분" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "암호 요구 제한시간: %.1f분" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Number of tries to enter a password: %u" msgstr "암호 입력 시도 횟수: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "사용자가 활용할 umask 또는 0777: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Path to log file: %s" msgstr "로그 파일 경로: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Path to mail program: %s" msgstr "메일 프로그램 경로: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Flags for mail program: %s" msgstr "메일 프로그램 플래그: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Address to send mail to: %s" msgstr "메일을 보낼 주소: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Address to send mail from: %s" msgstr "메일을 보내려는 주소: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Subject line for mail messages: %s" msgstr "메일 메시지 제목 줄: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Incorrect password message: %s" msgstr "올바르지 않은 암호 메시지: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Path to lecture status dir: %s" msgstr "지침 상태 디렉터리 경로: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:234 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "인증 타임스탬프 디렉터리 경로: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "인증 타임스탬프 디렉터리 소유자: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "암호와 PATH 변수 요구를 하지 않을 이 그룹의 사용자: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Default password prompt: %s" msgstr "기본 암호 프롬프트: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:250 msgid "If set, passprompt will override system prompt in all cases." msgstr "설정하면 모든 경우의 시스템 프롬프트 대신 이 암호 프롬프트를 사용합니다." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "Default user to run commands as: %s" msgstr "명령을 실행할 기본 사용자: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:258 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "사용자의 $PATH를 대신할 값: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:262 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo에서 사용할 편집기 경로: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "'list' 유사 명령 실행시 암호가 필요할 때: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:270 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "'verify' 유사 명령 실행시 암호가 필요할 때: %s" -#: plugins/sudoers/def_data.c:266 -msgid "Preload the dummy exec functions contained in the sudo_noexec library" -msgstr "sudo_noexec 라이브러리에 있는 모조 exec 함수 미리 불러오기" +#: plugins/sudoers/def_data.c:274 +msgid "Preload the sudo_noexec library which replaces the exec functions" +msgstr "exec 함수를 대체하는 sudo_noexec 라이브러리를 미리 불러옵니다" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:278 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "LDAP 디렉터리가 동작 중이라면 로컬 sudoers 파일을 무시합니다" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:282 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "%d보다 큰 파일 서술자는 명령을 실행하기 전에 닫습니다" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:286 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "이 값을 설정하면 -C 옵션으로 \"closefrom\" 값을 대신 사용합니다" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:290 msgid "Allow users to set arbitrary environment variables" msgstr "사용자가 환경 변수 값을 임의대로 설정할 수 있게 합니다" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:294 msgid "Reset the environment to a default set of variables" msgstr "변수 기본 설정 값으로 환경 초기화" -#: plugins/sudoers/def_data.c:290 -msgid "Environment variables to check for sanity:" -msgstr "무결성 검사할 환경 변수:" +#: plugins/sudoers/def_data.c:298 +msgid "Environment variables to check for safety:" +msgstr "안전 검사 대상 환경 변수:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:302 msgid "Environment variables to remove:" msgstr "제거할 환경 변수:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:306 msgid "Environment variables to preserve:" msgstr "유지할 환경 변수:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:310 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "새 보안 컨텍스트에 사용할 SELinux 역할: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:314 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "새 보안 컨텍스트에 사용할 SELinux 형식: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:318 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo용 환경 파일 경로: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:322 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "sudo 전용 환경 파일 경로: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:326 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "sudoers 파일을 해석할 때 사용할 로캘: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:330 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "암호가 나타나더라도 sudo에서 암호 입력 요구 허용" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:334 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "사용자 입력이 있을 때 암호 프롬프트에서 시각 반응 처리" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:338 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "덜 정확하지만 파일 시스템에 접근하지 않는 빠른 비교 검사 사용" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:342 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "sudoers에 지정한 umask 값이 관대한 권한이라 하더라도 사용자의 umask 값으로 적용" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:346 msgid "Log user's input for the command being run" msgstr "실행 명령에 대한 사용자 입력 기록" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:350 msgid "Log the output of the command being run" msgstr "실행 명령에 대한 출력 기록" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:354 msgid "Compress I/O logs using zlib" msgstr "zlib로 입출력 로그 압축" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:358 msgid "Always run commands in a pseudo-tty" msgstr "항상 명령을 유사 tty에서 실행" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:362 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "비 유닉스 그룹을 지원하는 플러그인: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:366 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "입출력 로그를 저장할 디렉터리: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:370 #, c-format msgid "File in which to store the input/output log: %s" msgstr "입출력 로그를 저장할 파일: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:374 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "pty를 할당할 때 utmp/utmpx 파일에 항목 추가" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:378 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "utmp의 사용자를 실제 실행 사용자가 아닌 대리 실행 사용자로 설정" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:382 #, c-format msgid "Set of permitted privileges: %s" msgstr "권한 허용 설정: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:386 #, c-format msgid "Set of limit privileges: %s" msgstr "권한 제한 설정: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:390 msgid "Run commands on a pty in the background" msgstr "백그라운드의 pty에서 명령을 실행합니다" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "PAM service name to use: %s" msgstr "사용할 PAM 서비스 이름: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:398 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "로그인 셸에서 사용할 PAM 서비스 이름: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:402 msgid "Attempt to establish PAM credentials for the target user" msgstr "대상 사용자의 PAM 인증 처리 시도합니다" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:406 msgid "Create a new PAM session for the command to run in" msgstr "실행할 명령에 새 PAM 세션을 만듭니다" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:410 msgid "Perform PAM account validation management" msgstr "PAM 계정 검증 관리를 수행합니다" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:414 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "최대 입출력 로그 순차 번호: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:418 msgid "Enable sudoers netgroup support" msgstr "sudoers에 네트워크 그룹 지원 활성화" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:422 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "sudoedit로 파일을 편집할 때 상위 디렉터리 기록 가능 여부 확인" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:426 msgid "Follow symbolic links when editing files with sudoedit" msgstr "sudoedit로 파일을 편집할 때 심볼릭 링크 따라감" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:430 msgid "Query the group plugin for unknown system groups" msgstr "알 수 없는 시스템 그룹에 그룹 플러그인 요청" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:434 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "user, host, domain 전체 튜플을 기반으로 네트워크 그룹 비교" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:438 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "sudo에서 감시 로그를 기록할 수 없을 경우에도 명령 실행 허용" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:442 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "sudo에서 입출력 로그를 기록할 수 없을 경우에도 명령 실행 허용" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:446 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "sudo에서 로그 파일에 기록할 수 없을 경우에도 명령 실행 허용" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:450 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "sudoers의 그룹을 해석하고 그룹 이름이 아닌 ID와 비교" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:454 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "이 값보다 큰 로그 항목은 다수의 syslog 메시지로 나눕니다: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:458 #, c-format msgid "User that will own the I/O log files: %s" msgstr "입출력 로그 파일을 소유할 사용자: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:462 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "입출력 로그 파일을 소유할 그룹: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:466 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "입출력 로그 파일에 사용할 파일 모드: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:470 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "경로가 아닌 파일 서술자로 명령어 실행: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:474 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "경고를 출력하는 대신 sudoers에서 알 수 없는 기본 항목을 무시" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:478 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "명령 처리가 끝난 후의 초 단위 시간: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:482 msgid "Allow the user to specify a timeout on the command line" msgstr "사용자가 명령행에서 제한 시간을 지정하도록 허용" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:486 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "입출력 로그 데이터를 버퍼링하는 대신 즉시 디스크로 플러싱" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:490 msgid "Include the process ID when logging via syslog" msgstr "syslog로 로깅할 때 프로세스 ID 포함" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:494 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "인증 타임스탬프 레코드 형식: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:498 #, c-format msgid "Authentication failure message: %s" msgstr "인증 실패 메시지: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:502 msgid "Ignore case when matching user names" msgstr "사용자 이름 비교시 대소문자 무시" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:506 msgid "Ignore case when matching group names" msgstr "그룹 이름 비교시 대소문자 무시" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:510 msgid "Log when a command is allowed by sudoers" msgstr "sudoers에서 명령을 허용할 때 기록" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:514 msgid "Log when a command is denied by sudoers" msgstr "sudoers에서 명령을 거절할 때 기록" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:518 msgid "Sudo log server(s) to connect to with optional port" msgstr "개별 포트 정보를 추가하여 연결할 sudo 로그 서버" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:522 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "초 단위 sudo 로그 서버 제한 시간: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:526 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "연결한 로그 서버 소켓에 SO_KEEPALIVE 소켓 옵션 활성화" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:530 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "감사 서버의 CA 번들 파일 경로: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:534 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "sudoers 인증 파일 경로: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:538 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "sudoers 개인 키 파일 경로: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:542 msgid "Verify that the log server's certificate is valid" msgstr "로그 서버 인증서 유효성 검증" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:546 msgid "Allow the use of unknown runas user and/or group ID" msgstr "사용자/그룹 ID로의 알 수 없는 실행 허용" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:550 msgid "Only permit running commands as a user with a valid shell" msgstr "유효한 셸에서 사용자가 명령을 실행할 경우만 허용" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:554 msgid "Set the pam remote user to the user running sudo" msgstr "sudo를 실행하는 사용자를 PAM 원격 사용자로 설정" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:558 msgid "Set the pam remote host to the local host name" msgstr "로컬 호스트 이름에 PAM 원격 사용자 설정" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:562 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d 알 수 없는 \"%s\" 기본 항목" +msgid "Working directory to change to before executing the command: %s" +msgstr "명령 실행 전 바꿀 작업 디렉터리: %s" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:566 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: 알 수 없는 \"%s\" 기본 항목" +msgid "Root directory to change to before executing the command: %s" +msgstr "명령 실행 전 바꿀 루트 디렉터리: %s" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/def_data.c:570 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d \"%s\"에 지정한 값이 없습니다" +msgid "The format of logs to produce: %s" +msgstr "로그 기록 형식: %s" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:185 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: \"%s\"에 지정한 값이 없습니다" +msgid "%s:%d:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d:%d: 알 수 없는 \"%s\" 기본 항목" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:188 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d \"%s\" 값은 '/' 문자로 시작해야합니다" +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: 알 수 없는 \"%s\" 기본 항목" -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: \"%s\" 값은 '/' 문자로 시작해야합니다" +msgid "%s:%d:%d: no value specified for \"%s\"" +msgstr "%s:%d:%d \"%s\"에 지정한 값이 없습니다" + +#: plugins/sudoers/defaults.c:237 +#, c-format +msgid "%s: no value specified for \"%s\"" +msgstr "%s: \"%s\"에 지정한 값이 없습니다" -#: plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d \"%s\" 옵션에 값이 없습니다" +msgid "%s:%d:%d: option \"%s\" does not take a value" +msgstr "%s:%d:%d: \"%s\" 옵션에 값이 없습니다" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:278 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: \"%s\" 옵션에 값이 없습니다" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:303 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%1$s:%2$d \"%4$s\" 옵션의 잘못된 기본 형식 0x%3$x" +msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%1$s:%2$d:%3$d \"%5$s\" 옵션의 잘못된 기본 형식 0x%4$x" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:306 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%1$s: \"%3$s\" 옵션의 잘못된 기본 형식 0x%2$x" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:316 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d \"%s\" 값은 \"%s\" 옵션에 맞지 않습니다" +msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d:%d: \"%s\" 값은 \"%s\" 옵션에 맞지 않습니다" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:319 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: \"%s\" 값은 \"%s\" 옵션에 맞지 않습니다" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1030 +#, c-format +msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d:%d: \"%s\" 값은 '/'; '~'; '*' 문자로 시작해야합니다" + +#: plugins/sudoers/defaults.c:1034 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: \"%s\" 값은 '/'; '~'; '*' 문자로 시작해야합니다" + +#: plugins/sudoers/defaults.c:1045 +#, c-format +msgid "%s:%d:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d:%d: \"%s\" 값은 '/' 문자로 시작해야합니다" + +#: plugins/sudoers/defaults.c:1049 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: \"%s\" 값은 '/' 문자로 시작해야합니다" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp가 깨졌습니다. 길이가 일치하지 않습니다" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "환경 구성을 다시 갖출 수 없습니다" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "죄송하지만 다음 환경 변수를 설정하도록 허가받지 않았습니다: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "%s %d번째 줄에서 해석 오류" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "%s 해석 오류" @@ -1927,7 +2013,7 @@ msgstr "%s은(는) %d uid가 소유해야 합니다" msgid "%s must only be writable by owner" msgstr "%s은(는) 소유자만 쓸 수 있습니다" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:571 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:569 #, c-format msgid "unable to load %s: %s" msgstr "%s을(를) 불러올 수 없습니다: %s" @@ -1956,122 +2042,78 @@ msgstr "\"%s\" 네트워크 마스크 주소를 해석할 수 없습니다" msgid "Local IP address and netmask pairs:\n" msgstr "로컬 IP 주소 및 넷마스크 쌍:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:445 +#: plugins/sudoers/sudoers.c:1341 plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "잘못된 그룹: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:622 +msgid "unable to update sequence file" +msgstr "시퀀스 파일을 업데이트할 수 없습니다" + +#: plugins/sudoers/iolog.c:653 plugins/sudoers/iolog.c:841 +#: plugins/sudoers/iolog.c:994 plugins/sudoers/iolog.c:1001 +#: plugins/sudoers/iolog.c:1122 plugins/sudoers/iolog.c:1129 +#: plugins/sudoers/iolog.c:1228 plugins/sudoers/iolog.c:1235 #, c-format msgid "unable to write to I/O log file: %s" msgstr "입출력 로그에 기록할 수 없습니다: %s" -#: plugins/sudoers/iolog.c:566 -msgid "unable to update sequence file" -msgstr "시퀀스 파일을 업데이트할 수 없습니다" - -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:661 #, c-format msgid "unable to create %s/%s" msgstr "%s/%s을(를) 만들 수 없습니다" -#: plugins/sudoers/iolog.c:631 -msgid "unable to connect to log server" -msgstr "로그 서버에 연결할 수 없습니다" - -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:886 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: 내부 오류. 이벤트 %d 번의 입출력 로그 파일을 열지 않았습니다" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:979 plugins/sudoers/iolog.c:1107 +#: plugins/sudoers/iolog.c:1212 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "클록을 읽을 수 없습니다" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1204 plugins/sudoers/log_client.c:1193 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: 내부 오류. 잘못된 시그널 %d번" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 -msgid "error in event loop" -msgstr "이벤트 루프 오류" - -#: plugins/sudoers/iolog_client.c:194 -#, c-format -msgid "Creation of new SSL_CTX object failed: %s" -msgstr "SSL_CTX 객체 만들기 실패: %s" - -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 -#, c-format -msgid "TLS connection to %s:%s failed: %s" -msgstr "%s:%s로의 TLS 연결 실패: %s" - -#: plugins/sudoers/iolog_client.c:496 -msgid "TLS initialization was unsuccessful" -msgstr "TLS 초기화에 실패했습니다" - -#: plugins/sudoers/iolog_client.c:505 -msgid "TLS handshake was unsuccessful" -msgstr "TLS 핸드셰이킹에 실패했습니다" - -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 -msgid "unable to get time of day" -msgstr "일시 정보를 가져올 수 없습니다" - -#: plugins/sudoers/iolog_client.c:986 -#, c-format -msgid "%s: internal error, invalid exit status %d" -msgstr "%s: 내부 오류. 잘못된 시그널 %d" - -#: plugins/sudoers/iolog_client.c:1523 -msgid "lost connection to log server" -msgstr "로그 서버의 연결이 끊어졌습니다" - -#: plugins/sudoers/iolog_client.c:1600 -msgid "missing write buffer" -msgstr "기록 버퍼 빠짐" - -#: plugins/sudoers/ldap.c:176 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 msgid "starttls not supported when using ldaps" msgstr "ldaps를 사용할 때 starttls를 지원하지 않습니다" -#: plugins/sudoers/ldap.c:247 +#: plugins/sudoers/ldap.c:248 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "SSL 인증서 및 키 DB를 초기화할 수 없습니다: %s" -#: plugins/sudoers/ldap.c:250 +#: plugins/sudoers/ldap.c:251 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "SSL을 사용하려면 %s에서 TLS_CERT를 설정해야 합니다" -#: plugins/sudoers/ldap.c:1658 +#: plugins/sudoers/ldap.c:1660 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP를 초기화할 수 없습니다: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1697 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:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1834 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "잘못된 sudoOrder 속성: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: 포트 값이 너무 큽니다" +#, c-format +msgid "%s: port too large" +msgstr "%s: 포트 번호가 너무 큽니다" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2082,7 +2124,7 @@ msgstr "지원하지 않는 LDAP URI 형식: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "ldap 및 ldaps URI를 함께 사용할 수 없습니다" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:553 plugins/sudoers/ldap_util.c:555 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "sudoOption을 변환할 수 없습니다: %s%s%s" @@ -2091,66 +2133,91 @@ msgstr "sudoOption을 변환할 수 없습니다: %s%s%s" msgid "unable to open audit system" msgstr "감시 시스템을 열 수 없습니다" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "감시 메시지를 보낼 수 없습니다" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/log_client.c:113 plugins/sudoers/log_client.c:391 +#: plugins/sudoers/log_client.c:1431 plugins/sudoers/log_client.c:2023 +msgid "error in event loop" +msgstr "이벤트 루프 오류" + +#: plugins/sudoers/log_client.c:193 #, c-format -msgid "unable to open log file: %s" -msgstr "로그 파일을 열 수 없습니다: %s" +msgid "Creation of new SSL_CTX object failed: %s" +msgstr "SSL_CTX 객체 만들기 실패: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/log_client.c:345 plugins/sudoers/log_client.c:350 #, c-format -msgid "unable to lock log file: %s" -msgstr "로그 파일을 잠글 수 없습니다: %s" +msgid "TLS connection to %s:%s failed: %s" +msgstr "%s:%s로의 TLS 연결 실패: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/log_client.c:519 +msgid "TLS initialization was unsuccessful" +msgstr "TLS 초기화에 실패했습니다" + +#: plugins/sudoers/log_client.c:528 +msgid "TLS handshake was unsuccessful" +msgstr "TLS 핸드셰이킹에 실패했습니다" + +#: plugins/sudoers/log_client.c:1202 #, c-format -msgid "unable to write log file: %s" -msgstr "로그 파일에 기록할 수 없습니다: %s" +msgid "%s: internal error, invalid exit status %d" +msgstr "%s: 내부 오류. 잘못된 시그널 %d" + +#: plugins/sudoers/log_client.c:1738 +msgid "lost connection to log server" +msgstr "로그 서버의 연결이 끊어졌습니다" + +#: plugins/sudoers/log_client.c:1815 +msgid "missing write buffer" +msgstr "기록 버퍼 빠짐" + +#: plugins/sudoers/log_client.c:1964 +msgid "unable to connect to log server" +msgstr "로그 서버에 연결할 수 없습니다" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:244 msgid "user NOT in sudoers" msgstr "사용자가 sudoers에 없습니다" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:246 msgid "user NOT authorized on host" msgstr "사용자가 호스트에서 인증하지 않았습니다" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:248 msgid "command not allowed" msgstr "명령을 허용하지 않았습니다" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:269 #, 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:272 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s은(는) %s에서 sudo를 실행하도록 허가받지 않았습니다. 이 시도를 보고합니다.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:276 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "죄송하지만, %s 사용자는 %s에서 sudo를 실행하면 안됩니다.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:279 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "죄송하지만 %1$s 사용자는 '%2$s%3$s%4$s'을(를) %8$s의 %5$s%6$s%7$s(으)로 실행하도록 허가받지 않았습니다.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:316 plugins/sudoers/sudoers.c:583 +#: plugins/sudoers/sudoers.c:585 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:739 +#: plugins/sudoers/sudoers.c:741 #, c-format msgid "%s: command not found" msgstr "%s: 명령이 없습니다" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:579 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2159,46 +2226,36 @@ msgstr "" "'.'에 무시 중인 \"%1$s\" 요소가 있습니다.\n" "\"%3$s\" 명령을 실행하려면, \"sudo ./%2$s\" 명령을 사용하십시오." -#: plugins/sudoers/logging.c:354 -msgid "authentication failure" -msgstr "인증 실패" - -#: plugins/sudoers/logging.c:380 -msgid "a password is required" -msgstr "암호가 필요합니다" - -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:337 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "잘못된 암호 입력 시도 %u번" -#: plugins/sudoers/logging.c:714 -#, c-format -msgid "unable to dup stdin: %m" -msgstr "표준 입력을 복제할 수 없습니다: %m" +#: plugins/sudoers/logging.c:393 +msgid "authentication failure" +msgstr "인증 실패" -#: plugins/sudoers/logging.c:751 -#, c-format -msgid "unable to execute %s: %m" -msgstr "%s을(를) 실행할 수 없습니다: %m" +#: plugins/sudoers/logging.c:433 plugins/sudoers/logging.c:453 +msgid "a password is required" +msgstr "암호가 필요합니다" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:729 #, c-format -msgid "unable to fork: %m" -msgstr "포킹할 수 없습니다: %m" +msgid "unable to open log file: %s" +msgstr "로그 파일을 열 수 없습니다: %s" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:762 #, c-format -msgid "unable to open pipe: %m" -msgstr "파이프를 열 수 없습니다: %m" +msgid "unable to write log file: %s" +msgstr "로그 파일에 기록할 수 없습니다: %s" -#: plugins/sudoers/match_digest.c:116 +#: plugins/sudoers/match_digest.c:129 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "%s 다이제스트(%s)는 %s 형식이 아닙니다" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2207,8 +2264,7 @@ msgstr "" "\n" "LDAP 역할: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2216,42 +2272,38 @@ msgstr "" "\n" "Sudoers 항목:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " 실행 사용자: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " 실행 그룹: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " 옵션: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " 명령:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "%2$s에서 %1$s에 일치하는 기본 항목:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "%s의 실행 권한 및 명령별 기본 값:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "%s 사용자는 %s에서 다음 명령을 실행해야 합니다:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "%s 사용자는 %s에서 sudo를 실행하도록 허가받지 않았습니다.\n" @@ -2266,48 +2318,58 @@ msgstr "미완결 sudoRole 무시: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "잘못된 LDIF 속성: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "sudo 프론트엔드의 %.*s 설정이 잘못되었습니다" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:310 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "네트워크 주소 목록을 해석할 수 없습니다" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:455 msgid "user name not set by sudo front-end" msgstr "sudo 프론트엔드에서 사용자 이름을 설정하지 않았습니다" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:459 msgid "user-ID not set by sudo front-end" msgstr "sudo 프론트엔드에서 사용자 ID를 설정하지 않았습니다" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:463 msgid "group-ID not set by sudo front-end" msgstr "sudo 프론트엔드에서 그룹 ID를 지정하지 않았습니다" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:467 msgid "host name not set by sudo front-end" msgstr "sudo 프론트엔드에서 호스트 이름을 설정하지 않았습니다" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:643 +#, c-format +msgid "invalid working directory: %s" +msgstr "잘못된 작업 디렉터리: %s" + +#: plugins/sudoers/policy.c:811 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "잘못된 루트 변경 디렉터리: %s" + +#: plugins/sudoers/policy.c:947 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "%s을(를) 실행할 수 없습니다" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1111 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers 정책 플러그인 버전 %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1113 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers 파일 문법 버전 %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "" "\n" @@ -2316,86 +2378,86 @@ msgstr "" "\n" "Sudoers 경로: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1120 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch 경로: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1122 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf 경로: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1123 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret 경로: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1156 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "%d 형식의 후크를 등록할 수 없습니다(버전 %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "%u uid를 캐시에 적재할 수 없습니다" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "%u uid를 캐시에 적재할 수 없습니다. 이미 존재합니다." -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "%s 사용자를 캐시에 적재할 수 없습니다" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "%s 사용자를 캐시에 적재할 수 없습니다. 이미 존재합니다." -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "%u GID를 캐시에 적재할 수 없습니다" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "%u gid를 캐시에 적재할 수 없습니다. 이미 존재합니다." -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "%s 그룹을 캐시에 적재할 수 없습니다" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "%s 그룹을 캐시에 적재할 수 없습니다. 이미 존재합니다." -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "%s 그룹 목록을 캐시에 적재할 수 없습니다. 이미 존재합니다." -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "%s 그룹 목록을 캐시에 적재할 수 없습니다" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "%s 그룹을 해석할 수 없습니다" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "%s 그룹 ID를 해석할 수 없습니다" @@ -2459,239 +2521,259 @@ msgstr "user_cmnd 감사 경로가 잘렸습니다: %s" msgid "truncated audit path argv[0]: %s" msgstr "argv[0] 감사 경로가 잘렸습니다: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:572 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "SSS 소스를 초기화할 수 없습니다. 머신에 SSSD를 설치했습니까?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:580 plugins/sudoers/sssd.c:589 +#: plugins/sudoers/sssd.c:598 plugins/sudoers/sssd.c:607 +#: plugins/sudoers/sssd.c:616 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "%2$s에서 \"%1$s\" 심볼을 찾을 수 없습니다" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:214 plugins/sudoers/sudoers.c:1010 msgid "problem with defaults entries" msgstr "기본 항목에 문제 발생" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:218 msgid "no valid sudoers sources found, quitting" msgstr "올바른 sudoers 설정 원본이 없습니다. 나갑니다." -#: plugins/sudoers/sudoers.c:297 +#: plugins/sudoers/sudoers.c:292 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "%s 를 루트 디렉터리로 변환하도록 허용하지 않습니다" + +#: plugins/sudoers/sudoers.c:294 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "-R 옵션과 %s 옵션의 병행 사용을 허가받지 않았습니다" + +#: plugins/sudoers/sudoers.c:319 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "%s 디렉터리로의 변경을 허용하지 않습니다" + +#: plugins/sudoers/sudoers.c:320 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "-D 옵션과 %s 옵션의 병행 사용을 허가받지 않았습니다" + +#: plugins/sudoers/sudoers.c:351 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers에서 root가 sudo를 실행하지 못하게 지정했습니다" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:411 msgid "user not allowed to override closefrom limit" msgstr "사용자가 closefrom 제한 값을 따로 적용하도록 허용하지 않았습니다" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:412 msgid "you are not permitted to use the -C option" msgstr "-C 옵션 사용을 허가받지 않았습니다" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:472 #, c-format msgid "timestamp owner (%s): No such user" msgstr "타임스탬프 소유자(%s): 사용자 없음" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:487 msgid "no tty" msgstr "tty 없음" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:488 msgid "sorry, you must have a tty to run sudo" msgstr "죄송하지만 sudo를 실행하려면 tty를 확보해야합니다" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:495 #, c-format msgid "invalid shell for user %s: %s" msgstr "%s 사용자에게 잘못된 셸 제공: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:578 msgid "command in current directory" msgstr "현재 디렉터리의 명령" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:597 msgid "user not allowed to set a command timeout" msgstr "사용자가 명령 처리 제한 시간을 설정하도록 허용하지 않았습니다" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:599 msgid "sorry, you are not allowed set a command timeout" msgstr "죄송하지만, 명령 처리 제한 시간을 설정할 수 없습니다" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:607 msgid "user not allowed to preserve the environment" msgstr "사용자가 환경 설정 값을 유지하도록 허용하지 않았습니다" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:609 msgid "sorry, you are not allowed to preserve the environment" msgstr "죄송하지만 이 환경 상태를 유지하도록 허가받지 않았습니다" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:945 msgid "command too long" msgstr "명령이 너무 깁니다" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1003 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit는 sudo로 실행할 필요가 없습니다" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1057 plugins/sudoers/sudoreplay.c:1547 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "%s을(를) 읽을 수 없습니다" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1082 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "%s의 상태를 가져올 수 없습니다" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1086 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s은(는) 일반 파일이 아닙니다" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/timestamp.c:252 toke.l:1112 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s은(는) %u uid가 소유했지만, %u uid가 소유해야합니다" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1094 toke.l:1117 #, c-format msgid "%s is world writable" msgstr "%s에 모두가 기록할 수 있습니다" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1098 toke.l:1120 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s은(는) %u gid가 소유했지만, %u gid가 소유해야합니다" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1131 #, c-format msgid "only root can use \"-c %s\"" msgstr "루트만 \"-c %s\" 옵션을 사용할 수 있습니다" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1150 #, c-format msgid "unknown login class: %s" msgstr "알 수 없는 로그인 클래스: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1235 plugins/sudoers/sudoers.c:1250 #, c-format msgid "unable to resolve host %s" msgstr "%s 호스트를 해석할 수 없습니다" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:257 #, c-format msgid "invalid filter option: %s" msgstr "잘못된 필터 옵션: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:273 #, c-format msgid "invalid max wait: %s" msgstr "잘못된 최대 대기 시간 값: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "invalid speed factor: %s" msgstr "잘못된 속도 인수: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:332 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:337 #, c-format msgid "%s/timing: %s" msgstr "%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:341 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:365 #, c-format msgid "Replaying sudo session: %s" msgstr "sudo 세션 재현 중: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:627 msgid "unable to set tty to raw mode" msgstr "RAW 모드로 tty를 설정할 수 없습니다" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:678 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "경고: 터미널 화면이 로그를 올바르게 나타내기에 너무 작습니다.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:679 #, 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:708 +#: plugins/sudoers/sudoreplay.c:707 msgid "Replay finished, press any key to restore the terminal." msgstr "재현에 끝났습니다. 터미널을 복원하려면 아무 키나 누르십시오." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1197 plugins/sudoers/sudoreplay.c:1227 #, c-format msgid "ambiguous expression \"%s\"" msgstr "모호한 식 \"%s\"" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1249 msgid "unmatched ')' in expression" msgstr "수식에 일치하지 않는 ')'" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1253 #, c-format msgid "unknown search term \"%s\"" msgstr "알 수 없는 검색어 \"%s\"" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1268 #, c-format msgid "%s requires an argument" msgstr "%s에 인자가 필요합니다" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1271 plugins/sudoers/sudoreplay.c:1523 #, c-format msgid "invalid regular expression: %s" msgstr "잘못된 정규 표현식: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1276 #, c-format msgid "could not parse date \"%s\"" msgstr "\"%s\" 날짜를 해석할 수 없습니다" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1285 msgid "unmatched '(' in expression" msgstr "수식에 일치하지 않는 '('" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1287 msgid "illegal trailing \"or\"" msgstr "잘못된 후위 연산자 \"or\"" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1289 msgid "illegal trailing \"!\"" msgstr "잘못된 후위 문자 \"!\"" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1347 #, c-format msgid "unknown search type %d" msgstr "알 수 없는 검색 형식 %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1614 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "사용법: %s [-hnRS] [-d <디렉터리>] [-m <숫자>] [-s <숫자>] \n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1617 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "사용법: %s [-h] [-d <디렉터리>] -l [<검색식>]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1626 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2700,7 +2782,7 @@ msgstr "" "%s - sudo 세션 로그를 보여줍니다\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1628 msgid "" "\n" "Options:\n" @@ -2728,11 +2810,11 @@ msgstr "" " -s, --speed=<숫자> 출력 속도를 올리거나 내립니다\n" " -V, --version 버전 정보를 나타낸 후 빠져나갑니다" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\t호스트가 일치하지 않습니다" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2740,7 +2822,7 @@ msgstr "" "\n" "명령 허용함" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2748,7 +2830,7 @@ msgstr "" "\n" "명령 거부함" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2793,89 +2875,89 @@ msgstr "sudoedit에 경로를 지정하면 안됩니다" msgid "the -x option will be removed in a future release" msgstr "-x 옵션은 추후 릴리스에서 제거 예정입니다" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "cvtsudoers 유틸리티를 대신 사용해보십시오" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "%s을(를) 편집하려면 return 키를 누르십시오:" -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "지정 편집기(%s)가 없습니다" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "편집기가 없습니다(편집기 경로 = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "쓰기 오류" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "임시 파일 상태를 가져올 수 없습니다(%s). %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "임시 파일 길이가 0입니다(%s). %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "편집기(%s) 실패. %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s 바꾸지 않음" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "임시 파일(%s)을 다시 열 수 없습니다. %s을(를) 바꾸지 않았습니다." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "임시 파일(%s)을 해석할 수 없습니다. 알 수 없는 오류" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "내부 오류. %s을(를) 목록에서 찾을 수 없습니다!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "%s의 uid/gid를 %u/%u 값으로 설정할 수 없습니다" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 및 %s은(는) 동일한 파일 시스템에 없습니다. mv 명령으로 이름을 바꿉니다" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "명령 실행 실패: '%s %s %s', %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "%s 이름 바꾸기 오류. %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "어떻게 하시겠습니까? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2887,66 +2969,66 @@ msgstr "" " sudoers 파일을 바꾼 상태에서 저장하지 않고 나갑니다(X)\n" " sudoers 파일을 바꾼 상태에서 저장하고 끝냅니다(Q)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "%s을(를) 실행할 수 없음" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: 잘못된 소유자 uid/gid를 %u/%u 값으로 설정해야 합니다\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: 잘못된 권한입니다. 0%o 모드 값을 설정해야 합니다\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: 해석 성공\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s을(를) 사용중입니다. 나중에 다시 시도하십시오" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "%s을(를) 잠글 수 없습니다" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "그래도 편집하시겠습니까? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1091 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "오류: %3$s \"%4$s\"의 %1$s:%2$d사이클" +msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +msgstr "오류: %4$s \"%5$s\"의 %1$s:%2$d:%3$d: 사이클" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1092 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "경고: %3$s \"%4$s\"의 %1$s:%2$d사이클" +msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +msgstr "경고: %4$s \"%5$s\"의 %1$s:%2$d:%3$d: 사이클" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1096 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "오류: %s: %d %s \"%s\"을(를) 참조했지만 정의하지 않았습니다" +msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "오류: %s:%d:%d: %s \"%s\"을(를) 참조했지만 정의하지 않았습니다" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1097 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "경고: %s: %d %s \"%s\"을(를) 참조했지만 정의하지 않았습니다" +msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "경고: %s:%d:%d: %s \"%s\"을(를) 참조했지만 정의하지 않았습니다" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1188 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "경고: %s:%d 사용하지 않는 %s \"%s\"이(가) 있습니다" +msgid "Warning: %s:%d:%d: unused %s \"%s\"" +msgstr "경고: %s:%d:%d 사용하지 않는 %s \"%s\"이(가) 있습니다" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1303 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2955,7 +3037,7 @@ msgstr "" "%s - sudoers 파일을 안전하게 편집합니다\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1305 msgid "" "\n" "Options:\n" @@ -2975,10 +3057,43 @@ msgstr "" " -s, --strict 엄격한 문법 검사 시행\n" " -V, --version 버전 정보를 나타낸 후 빠져나갑니다\n" -#: toke.l:1032 +#: toke.l:179 +msgid "empty string" +msgstr "빈 문자열" + +#: toke.l:189 toke.l:491 +msgid "empty group" +msgstr "빈 그룹" + +#: toke.l:197 toke.l:489 +msgid "empty netgroup" +msgstr "빈 네트워크 그룹" + +#: toke.l:293 toke.l:305 toke.l:317 toke.l:333 toke.l:352 toke.l:392 +msgid "invalid line continuation" +msgstr "잘못된 행 연속 문자" + +#: toke.l:528 toke.l:540 +msgid "invalid IPv6 address" +msgstr "잘못된 IPv6 주소" + +#: toke.l:764 +msgid "unexpected line break in string" +msgstr "예기치 않은 개행 문자 발견" + +#: toke.l:1084 msgid "too many levels of includes" msgstr "포함 레벨이 너무 많습니다" +#~ msgid "Preload the dummy exec functions contained in the sudo_noexec library" +#~ msgstr "sudo_noexec 라이브러리에 있는 모조 exec 함수 미리 불러오기" + +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: 포트 값이 너무 큽니다" + +#~ msgid "unable to lock log file: %s" +#~ msgstr "로그 파일을 잠글 수 없습니다: %s" + #~ msgid "No user or host" #~ msgstr "사용자 또는 호스트 없음" diff --git a/plugins/sudoers/po/sr.mo b/plugins/sudoers/po/sr.mo index 38e4ac3c7ea957caafc37fae4b0a8b60ec06b24f..a9252ed11cf208188e44c86ec184c8a269b4bea9 100644 GIT binary patch delta 14274 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 delta 12447 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 diff --git a/plugins/sudoers/po/sr.po b/plugins/sudoers/po/sr.po index dc8edffde9..5701644321 100644 --- a/plugins/sudoers/po/sr.po +++ b/plugins/sudoers/po/sr.po @@ -3,10 +3,10 @@ # Мирослав Николић , 2014—2020. msgid "" msgstr "" -"Project-Id-Version: sudoers-1.9.2rc1\n" +"Project-Id-Version: sudoers-1.9.4b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-08-04 12:24+0200\n" +"POT-Creation-Date: 2020-11-14 06:24-0700\n" +"PO-Revision-Date: 2020-12-11 08:03+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -14,10 +14,9 @@ msgstr "" "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" -"X-Generator: Virtaal 0.7.1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: confstr.sh:1 +#: confstr.sh:1 gram.y:1077 msgid "syntax error" msgstr "грешка синтаксе" @@ -41,70 +40,73 @@ msgstr "*** информације БЕЗБЕДНОСТИ за %h ***" msgid "Sorry, try again." msgstr "Извините, покушајте поново." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 -#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 -#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 -#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 -#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 -#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 -#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: gram.y:220 gram.y:286 gram.y:293 gram.y:300 gram.y:307 gram.y:314 +#: gram.y:334 gram.y:358 gram.y:365 gram.y:372 gram.y:379 gram.y:386 +#: gram.y:455 gram.y:464 gram.y:475 gram.y:510 gram.y:517 gram.y:524 +#: gram.y:531 gram.y:558 gram.y:654 gram.y:661 gram.y:670 gram.y:679 +#: gram.y:696 gram.y:834 gram.y:841 gram.y:849 gram.y:855 gram.y:971 +#: gram.y:978 gram.y:985 gram.y:992 gram.y:999 gram.y:1025 gram.y:1032 +#: gram.y:1039 gram.y:1236 gram.y:1526 lib/eventlog/eventlog.c:280 +#: lib/eventlog/eventlog.c:352 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:817 lib/eventlog/eventlog.c:1062 +#: lib/iolog/iolog_fileio.c:998 lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:305 lib/iolog/iolog_json.c:335 +#: lib/iolog/iolog_json.c:457 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/sendlog.c:480 +#: plugins/sudoers/alias.c:126 plugins/sudoers/alias.c:134 +#: plugins/sudoers/alias.c:153 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/bsdauth.c:143 +#: plugins/sudoers/auth/kerb5.c:118 plugins/sudoers/auth/kerb5.c:144 +#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/cvtsudoers.c:119 +#: plugins/sudoers/cvtsudoers.c:160 plugins/sudoers/cvtsudoers.c:177 +#: plugins/sudoers/cvtsudoers.c:188 plugins/sudoers/cvtsudoers.c:300 +#: plugins/sudoers/cvtsudoers.c:428 plugins/sudoers/cvtsudoers.c:561 +#: plugins/sudoers/cvtsudoers.c:578 plugins/sudoers/cvtsudoers.c:641 +#: plugins/sudoers/cvtsudoers.c:756 plugins/sudoers/cvtsudoers.c:764 +#: plugins/sudoers/cvtsudoers.c:1178 plugins/sudoers/cvtsudoers.c:1182 +#: plugins/sudoers/cvtsudoers.c:1284 plugins/sudoers/cvtsudoers_json.c:76 +#: plugins/sudoers/cvtsudoers_ldif.c:151 plugins/sudoers/cvtsudoers_ldif.c:194 +#: plugins/sudoers/cvtsudoers_ldif.c:235 plugins/sudoers/cvtsudoers_ldif.c:300 +#: plugins/sudoers/cvtsudoers_ldif.c:371 plugins/sudoers/cvtsudoers_ldif.c:421 +#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:440 +#: plugins/sudoers/cvtsudoers_ldif.c:447 plugins/sudoers/cvtsudoers_ldif.c:460 +#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:615 +#: plugins/sudoers/defaults.c:630 plugins/sudoers/defaults.c:923 +#: plugins/sudoers/defaults.c:1098 plugins/sudoers/editor.c:181 +#: plugins/sudoers/env.c:261 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 #: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:596 +#: plugins/sudoers/iolog.c:613 plugins/sudoers/ldap.c:184 +#: plugins/sudoers/ldap.c:422 plugins/sudoers/ldap.c:432 +#: plugins/sudoers/ldap.c:437 plugins/sudoers/ldap.c:441 +#: plugins/sudoers/ldap.c:453 plugins/sudoers/ldap.c:744 +#: plugins/sudoers/ldap.c:908 plugins/sudoers/ldap.c:1281 +#: plugins/sudoers/ldap.c:1709 plugins/sudoers/ldap.c:1746 +#: plugins/sudoers/ldap.c:1827 plugins/sudoers/ldap.c:1962 +#: plugins/sudoers/ldap.c:2063 plugins/sudoers/ldap.c:2079 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/log_client.c:105 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:166 +#: plugins/sudoers/logging.c:426 plugins/sudoers/logging.c:446 +#: plugins/sudoers/logging.c:527 plugins/sudoers/match_command.c:281 +#: plugins/sudoers/match_command.c:449 plugins/sudoers/match_command.c:499 +#: plugins/sudoers/match_command.c:573 plugins/sudoers/match_digest.c:93 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -114,115 +116,138 @@ msgstr "Извините, покушајте поново." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 -#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:407 +#: plugins/sudoers/sssd.c:470 plugins/sudoers/sssd.c:514 +#: plugins/sudoers/sssd.c:561 plugins/sudoers/sssd.c:754 +#: plugins/sudoers/stubs.c:110 plugins/sudoers/stubs.c:118 +#: plugins/sudoers/sudoers.c:300 plugins/sudoers/sudoers.c:326 +#: plugins/sudoers/sudoers.c:370 plugins/sudoers/sudoers.c:381 +#: plugins/sudoers/sudoers.c:391 plugins/sudoers/sudoers.c:433 +#: plugins/sudoers/sudoers.c:794 plugins/sudoers/sudoers.c:927 +#: plugins/sudoers/sudoers.c:961 plugins/sudoers/sudoers.c:1265 +#: plugins/sudoers/sudoreplay.c:552 plugins/sudoers/sudoreplay.c:555 +#: plugins/sudoers/sudoreplay.c:1259 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/sudoreplay.c:1473 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/testsudoers.c:587 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1129 toke.l:913 toke.l:1033 toke.l:1091 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" -#: gram.y:505 +#: gram.y:552 msgid "a digest requires a path name" msgstr "зборник захтева назив путање" -#: gram.y:638 +#: gram.y:581 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "вредност за „CWD“ мора почети са /, ~, или *" + +#: gram.y:593 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "вредност за „CHROOT“ мора почети са /, ~, или *" + +#: gram.y:715 +#, c-format +msgid "syntax error, reserved word %s used as an alias name" +msgstr "грешка синтаксе, резервисана реч „%s“ је коришћена као назив алијаса" + +#: gram.y:735 msgid "invalid notbefore value" msgstr "неисправна вредност не-пре" -#: gram.y:646 +#: gram.y:743 msgid "invalid notafter value" msgstr "неисправна вредност не-после" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:752 plugins/sudoers/policy.c:335 msgid "timeout value too large" msgstr "вредност временског истека је превелика" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:754 plugins/sudoers/policy.c:337 msgid "invalid timeout value" msgstr "неисправна вредност временског ограничења" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1079 +#, c-format +msgid "%s:%d:%d: %s\n" +msgstr "%s:%d:%d: %s\n" + +#: gram.y:1526 lib/eventlog/eventlog.c:280 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:815 lib/eventlog/eventlog.c:816 +#: lib/eventlog/eventlog.c:1062 lib/iolog/iolog_fileio.c:998 +#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:335 lib/iolog/iolog_json.c:457 +#: lib/iolog/iolog_json.c:735 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/logsrvd.c:1280 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1338 logsrvd/sendlog.c:480 logsrvd/sendlog.c:1321 +#: logsrvd/sendlog.c:1328 logsrvd/sendlog.c:1746 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:630 +#: plugins/sudoers/defaults.c:923 plugins/sudoers/defaults.c:1098 +#: plugins/sudoers/editor.c:181 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:596 plugins/sudoers/iolog.c:613 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:422 +#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:437 +#: plugins/sudoers/ldap.c:441 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:744 plugins/sudoers/ldap.c:908 +#: plugins/sudoers/ldap.c:1281 plugins/sudoers/ldap.c:1709 +#: plugins/sudoers/ldap.c:1746 plugins/sudoers/ldap.c:1827 +#: plugins/sudoers/ldap.c:1962 plugins/sudoers/ldap.c:2063 +#: plugins/sudoers/ldap.c:2079 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:603 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/log_client.c:105 +#: plugins/sudoers/log_client.c:214 plugins/sudoers/log_client.c:235 +#: plugins/sudoers/log_client.c:248 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:165 +#: plugins/sudoers/logging.c:166 plugins/sudoers/logging.c:425 +#: plugins/sudoers/logging.c:445 plugins/sudoers/logging.c:527 +#: plugins/sudoers/match_command.c:280 plugins/sudoers/match_command.c:448 +#: plugins/sudoers/match_command.c:498 plugins/sudoers/match_command.c:573 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:198 +#: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:229 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:274 plugins/sudoers/parse_ldif.c:152 #: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 #: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 #: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 @@ -232,60 +257,112 @@ msgstr "неисправна вредност временског ограни #: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 #: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 #: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:148 +#: plugins/sudoers/policy.c:157 plugins/sudoers/policy.c:183 +#: plugins/sudoers/policy.c:320 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:337 plugins/sudoers/policy.c:366 +#: plugins/sudoers/policy.c:375 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:428 plugins/sudoers/policy.c:437 +#: plugins/sudoers/policy.c:446 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 #: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 +#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:144 +#: plugins/sudoers/sssd.c:407 plugins/sudoers/sssd.c:470 +#: plugins/sudoers/sssd.c:514 plugins/sudoers/sssd.c:561 +#: plugins/sudoers/sssd.c:754 plugins/sudoers/stubs.c:110 +#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:300 +#: plugins/sudoers/sudoers.c:326 plugins/sudoers/sudoers.c:370 +#: plugins/sudoers/sudoers.c:381 plugins/sudoers/sudoers.c:391 +#: plugins/sudoers/sudoers.c:433 plugins/sudoers/sudoers.c:794 +#: plugins/sudoers/sudoers.c:927 plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:1265 plugins/sudoers/sudoreplay.c:552 +#: plugins/sudoers/sudoreplay.c:555 plugins/sudoers/sudoreplay.c:1259 +#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/sudoreplay.c:1473 #: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:587 #: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 #: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 #: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 #: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/visudo.c:145 plugins/sudoers/visudo.c:323 +#: plugins/sudoers/visudo.c:329 plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:615 plugins/sudoers/visudo.c:935 +#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:913 +#: toke.l:1033 toke.l:1091 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/eventlog/eventlog.c:285 lib/iolog/iolog_json.c:463 +#: lib/iolog/iolog_json.c:466 lib/iolog/iolog_json.c:468 +#: lib/iolog/iolog_json.c:560 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 +#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/ldap.c:517 plugins/sudoers/ldap.c:748 +#: plugins/sudoers/ldap.c:1081 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:90 +#: plugins/sudoers/policy.c:556 plugins/sudoers/policy.c:711 +#: plugins/sudoers/policy.c:721 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:983 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/toke_util.c:169 +#, c-format +msgid "internal error, %s overflow" +msgstr "унутрашња грешка, прекорачење „%s“" + +#: lib/eventlog/eventlog.c:343 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "не могу да удвостручим стандардни улаз: %m" + +#: lib/eventlog/eventlog.c:388 +#, c-format +msgid "unable to execute %s: %m" +msgstr "не могу да извршим „%s“: %m" + +#: lib/eventlog/eventlog.c:428 plugins/sudoers/auth/aix_auth.c:198 +msgid "unable to fork" +msgstr "не могу да исцепим" + +#: lib/eventlog/eventlog.c:436 lib/eventlog/eventlog.c:490 +#, c-format +msgid "unable to fork: %m" +msgstr "не могу да исцепим: %m" + +#: lib/eventlog/eventlog.c:480 +#, c-format +msgid "unable to open pipe: %m" +msgstr "не могу да отворим спојку: %m" + +#: lib/eventlog/eventlog.c:894 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: lib/eventlog/eventlog.c:923 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (наредба је настављена) %s" + +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s постоји али није директоријум (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "не могу да направим директоријум „%s“" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не могу да променим режим „%s“ на 0%o" @@ -295,63 +372,45 @@ msgstr "не могу да променим режим „%s“ на 0%o" msgid "expected JSON_STRING, got %d" msgstr "очекивах „JSON_STRING“, добих „%d“" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:327 msgid "missing double quote in name" msgstr "недостају наводници у називу" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:414 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "очекивах „JSON_OBJECT“, добих „%d“" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 -#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 -#: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 -#: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 -#: plugins/sudoers/toke_util.c:169 -#, c-format -msgid "internal error, %s overflow" -msgstr "унутрашња грешка, прекорачење „%s“" - -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:753 msgid "unmatched close brace" msgstr "непоклопљена затворена велика заграда" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:638 msgid "unexpected array" msgstr "неочекиван низ" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:651 lib/iolog/iolog_json.c:755 msgid "unmatched close bracket" msgstr "непоклопљена затворена средња заграда" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:659 msgid "unexpected string" msgstr "неочекивана ниска" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:669 msgid "missing colon after name" msgstr "недостају две тачке након имена" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:680 lib/iolog/iolog_json.c:695 +#: lib/iolog/iolog_json.c:710 msgid "unexpected boolean" msgstr "неочекивана логичка вредност" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:726 msgid "unexpected number" msgstr "неочекивани број" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:763 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "„%s:%u“ не могу да обрадим „%s“" @@ -396,186 +455,184 @@ msgstr "грешка читања датотеке временисања: %s" msgid "invalid timing file line: %s" msgstr "неисправан ред датотеке временисања: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 -#, c-format -msgid "%8s : %s" -msgstr "%8s : %s" - -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 -#, c-format -msgid "%8s : (command continued) %s" -msgstr "%8s : (наредба је настављена) %s" - -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:919 msgid "log is already complete, cannot be restarted" msgstr "дневик је већ довршен, не може бити поново покренут" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:950 msgid "unable to restart log" msgstr "не могу поново да покренем дневник" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:352 plugins/sudoers/sudoreplay.c:358 #, c-format msgid "unable to open %s/%s" msgstr "не могу да отворим „%s/%s“" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "недостаје У/И датотека дневника „%s/%s“" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: не могу да премотам унапред „%zu“" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "не могу да нађем тачку наставка [%lld, %ld] у „%s/%s“" -#: logsrvd/logsrvd.c:230 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 -#: logsrvd/logsrvd.c:398 logsrvd/logsrvd.c:445 logsrvd/logsrvd.c:496 -#: logsrvd/logsrvd.c:528 logsrvd/logsrvd.c:560 +#: logsrvd/logsrvd.c:290 logsrvd/logsrvd.c:353 logsrvd/logsrvd.c:394 +#: logsrvd/logsrvd.c:449 logsrvd/logsrvd.c:517 logsrvd/logsrvd.c:568 +#: logsrvd/logsrvd.c:600 logsrvd/logsrvd.c:632 msgid "state machine error" msgstr "грешка машине стања" -#: logsrvd/logsrvd.c:239 +#: logsrvd/logsrvd.c:299 msgid "invalid AcceptMessage" msgstr "неисправна „Порука прихвата“" -#: logsrvd/logsrvd.c:250 +#: logsrvd/logsrvd.c:307 msgid "error parsing AcceptMessage" msgstr "грешка обраде „Поруке прихвата“" -#: logsrvd/logsrvd.c:257 +#: logsrvd/logsrvd.c:314 msgid "error creating I/O log" msgstr "грешка стварања У/И дневника" -#: logsrvd/logsrvd.c:265 +#: logsrvd/logsrvd.c:321 msgid "error logging accept event" msgstr "грешка прибележавања догађаја прихвата" -#: logsrvd/logsrvd.c:308 +#: logsrvd/logsrvd.c:362 msgid "invalid RejectMessage" msgstr "неисправна „Порука одбијања“" -#: logsrvd/logsrvd.c:319 +#: logsrvd/logsrvd.c:370 msgid "error parsing RejectMessage" msgstr "грешка обраде „Поруке одбијања“" -#: logsrvd/logsrvd.c:325 +#: logsrvd/logsrvd.c:376 msgid "error logging reject event" msgstr "грешка прибележавања догађаја одбијања" -#: logsrvd/logsrvd.c:430 +#: logsrvd/logsrvd.c:486 +msgid "invalid AlertMessage" +msgstr "неисправна „Порука узбуне“" + +#: logsrvd/logsrvd.c:494 +msgid "error parsing AlertMessage" +msgstr "грешка обраде „Поруке узбуне“" + +#: logsrvd/logsrvd.c:502 msgid "error logging alert event" msgstr "грешка прибележавања догађаја упозорења" -#: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 +#: logsrvd/logsrvd.c:523 logsrvd/logsrvd.c:574 logsrvd/logsrvd.c:606 msgid "protocol error" msgstr "грешка протокола" -#: logsrvd/logsrvd.c:461 +#: logsrvd/logsrvd.c:533 msgid "error writing IoBuffer" msgstr "Грешка писања „Уи_Међумеморије“" -#: logsrvd/logsrvd.c:513 +#: logsrvd/logsrvd.c:585 msgid "error writing ChangeWindowSize" msgstr "грешка писања „Промени_величину_прозора“" -#: logsrvd/logsrvd.c:545 +#: logsrvd/logsrvd.c:617 msgid "error writing CommandSuspend" msgstr "грешка писања „Обуставе_наредбе“" -#: logsrvd/logsrvd.c:630 +#: logsrvd/logsrvd.c:702 msgid "unrecognized ClientMessage type" msgstr "непозната врста „Поруке_клијента“" -#: logsrvd/logsrvd.c:895 +#: logsrvd/logsrvd.c:967 msgid "client message too large" msgstr "порука клијента је превелика" -#: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 +#: logsrvd/logsrvd.c:1197 logsrvd/logsrvd.c:1205 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "не могу да подесим шифрарник ТЛС-а 1.2 на „%s“: %s" -#: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 +#: logsrvd/logsrvd.c:1225 logsrvd/logsrvd.c:1233 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "не могу да подесим шифрарник ТЛС-а 1.3 на „%s“: %s" -#: logsrvd/logsrvd.c:1197 +#: logsrvd/logsrvd.c:1269 #, c-format msgid "unable to get TLS server method: %s" msgstr "не могу да добавим метод ТЛС сервера: %s" -#: logsrvd/logsrvd.c:1202 +#: logsrvd/logsrvd.c:1274 #, c-format msgid "unable to create TLS context: %s" msgstr "Не могу да створим ТЛС контекст: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1281 plugins/sudoers/log_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "не могу да учитам уверење „%s“" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1294 plugins/sudoers/log_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "не могу да учитам комплет ауторитета уверења „%s“" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1339 plugins/sudoers/log_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "не могу да учитам лични кључ „%s“" -#: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1356 logsrvd/logsrvd.c:1365 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "не могу да подесим „diffie-hellman“ параметре: %s" -#: logsrvd/logsrvd.c:1306 +#: logsrvd/logsrvd.c:1378 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "не могу да подесим најмање издање протокола на „TLS 1.2“: %s" -#: logsrvd/logsrvd.c:1491 +#: logsrvd/logsrvd.c:1563 msgid "unable to get remote IP addr" msgstr "не могу да добавим удаљену ИП адресу" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1591 plugins/sudoers/log_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Не могу да прикачим податке корисника ссл објекту: %s" -#: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/logsrvd.c:1599 logsrvd/logsrvd.c:1721 logsrvd/logsrvd.c:1823 +#: logsrvd/sendlog.c:1125 logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1496 +#: logsrvd/sendlog.c:1554 plugins/sudoers/iolog.c:956 +#: plugins/sudoers/iolog.c:1089 plugins/sudoers/iolog.c:1187 +#: plugins/sudoers/log_client.c:109 plugins/sudoers/log_client.c:324 +#: plugins/sudoers/log_client.c:340 plugins/sudoers/log_client.c:386 +#: plugins/sudoers/log_client.c:587 plugins/sudoers/log_client.c:594 +#: plugins/sudoers/log_client.c:1103 plugins/sudoers/log_client.c:1376 +#: plugins/sudoers/log_client.c:1417 plugins/sudoers/log_client.c:1425 +#: plugins/sudoers/log_client.c:1576 plugins/sudoers/log_client.c:1692 +#: plugins/sudoers/log_client.c:2007 plugins/sudoers/log_client.c:2015 +#: plugins/sudoers/sudoreplay.c:512 plugins/sudoers/sudoreplay.c:559 +#: plugins/sudoers/sudoreplay.c:791 plugins/sudoers/sudoreplay.c:903 +#: plugins/sudoers/sudoreplay.c:993 plugins/sudoers/sudoreplay.c:1008 +#: plugins/sudoers/sudoreplay.c:1015 plugins/sudoers/sudoreplay.c:1022 +#: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 +#: plugins/sudoers/sudoreplay.c:1163 msgid "unable to add event to queue" msgstr "не могу да додам догађај у ред" -#: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 +#: logsrvd/logsrvd.c:1775 logsrvd/logsrvd.c:2011 msgid "unable setup listen socket" msgstr "не могу да подесим прикључницу ослушкивања" -#: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 +#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:124 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" @@ -584,7 +641,7 @@ msgstr "" "%s – шаље У/И дневник судоа удаљеном серверу\n" "\n" -#: logsrvd/logsrvd.c:1846 +#: logsrvd/logsrvd.c:1920 msgid "" "\n" "Options:\n" @@ -602,78 +659,78 @@ msgstr "" " -R, --random-drop процентуалне шансе везе ће одбацити\n" " -V, --version приказује податке о издању и излази\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1972 logsrvd/sendlog.c:1719 msgid "Protobuf-C version 1.3 or higher required" msgstr "Потребно је „Protobuf-C“ издање 1.3 или новије" -#: logsrvd/logsrvd.c:1916 +#: logsrvd/logsrvd.c:1990 #, c-format msgid "invalid random drop value: %s" msgstr "неисправна вредност одбацивања насумичности: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1994 logsrvd/sendlog.c:1769 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s издање %s\n" -#: logsrvd/logsrvd_conf.c:393 +#: logsrvd/logsrvd_conf.c:331 msgid "TLS not supported" msgstr "ТЛС није подржано" -#: logsrvd/logsrvd_conf.c:405 +#: logsrvd/logsrvd_conf.c:343 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 +#: logsrvd/logsrvd_conf.c:409 logsrvd/logsrvd_conf.c:653 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: није потпуно квалификована путања" -#: logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:767 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "„%s:%d“ непоклопљена [: %s" -#: logsrvd/logsrvd_conf.c:840 +#: logsrvd/logsrvd_conf.c:778 #, c-format msgid "%s:%d invalid config section: %s" msgstr "„%s:%d“ неисправан одељак подешавања: %s" -#: logsrvd/logsrvd_conf.c:848 +#: logsrvd/logsrvd_conf.c:786 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "„%s:%d“ неисправан ред подешавања: %s" -#: logsrvd/logsrvd_conf.c:854 +#: logsrvd/logsrvd_conf.c:792 #, c-format msgid "%s:%d expected section name: %s" msgstr "„%s:%d“ очекиван је назив одељка: %s" -#: logsrvd/logsrvd_conf.c:868 +#: logsrvd/logsrvd_conf.c:806 #, c-format msgid "invalid value for %s: %s" msgstr "неисправна вредност за „%s“: %s" -#: logsrvd/logsrvd_conf.c:876 +#: logsrvd/logsrvd_conf.c:814 #, c-format msgid "%s:%d unknown key: %s" msgstr "„%s:%d“ непознат кључ: %s" -#: logsrvd/logsrvd_conf.c:1032 +#: logsrvd/logsrvd_conf.c:1003 #, c-format msgid "unknown syslog facility %s" msgstr "непознато постројење системског дневика „%s“" -#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1040 -#: logsrvd/logsrvd_conf.c:1044 +#: logsrvd/logsrvd_conf.c:1007 logsrvd/logsrvd_conf.c:1011 +#: logsrvd/logsrvd_conf.c:1015 #, c-format msgid "unknown syslog priority %s" msgstr "непознат приоритет системског дневика „%s“" -#: logsrvd/sendlog.c:126 +#: logsrvd/sendlog.c:127 msgid "" "\n" "Options:\n" @@ -707,145 +764,148 @@ msgstr "" " -t, --test проверава сервер испитивања шаљући изабрани У/И дневник n пута у паралели\n" " -V, --version приказује податке о издању и излази\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:164 plugins/sudoers/log_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "не могу да потражим „%s:%s“: %s" -#: logsrvd/sendlog.c:186 +#: logsrvd/sendlog.c:202 msgid "unable to get server IP addr" msgstr "не могу да добавим ИП адресу сервера" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:256 plugins/sudoers/sudoreplay.c:851 #, c-format msgid "unable to read %s/%s: %s" msgstr "не могу да прочитам „%s/%s“: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:277 plugins/sudoers/log_client.c:694 #, c-format msgid "client message too large: %zu" msgstr "порука клијента је превелика: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:810 #, c-format msgid "%s: write buffer already in use" msgstr "%s: међумеморија писања је већ у употреби" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:862 plugins/sudoers/iolog.c:880 +#: plugins/sudoers/iolog.c:949 #, c-format msgid "unexpected I/O event %d" msgstr "неочекивани У/И догађај „%d“" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:908 logsrvd/sendlog.c:925 logsrvd/sendlog.c:959 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1386 +#: plugins/sudoers/log_client.c:1454 plugins/sudoers/log_client.c:1490 #, c-format msgid "%s: unexpected state %d" msgstr "%s: неочекивано стање „%d“" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:931 plugins/sudoers/log_client.c:1460 msgid "invalid ServerHello" msgstr "неисправан „Поздрав_сервера“" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:995 plugins/sudoers/log_client.c:1534 #, c-format msgid "error message received from server: %s" msgstr "порука грешке је примљена са сервера: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:1008 plugins/sudoers/log_client.c:1547 #, c-format msgid "abort message received from server: %s" msgstr "порука прекида је примљена са сервера: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1027 plugins/sudoers/log_client.c:1566 msgid "unable to unpack ServerMessage" msgstr "не могу да отпакујем „Поруку_сервера“" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1067 plugins/sudoers/log_client.c:1597 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: неочекивана вредност врсте_слова „%d“" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1096 msgid "timeout reading from server" msgstr "истекло је време читања са сервера" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1174 msgid "premature EOF" msgstr "прерани крај датотеке" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1187 plugins/sudoers/log_client.c:1751 #, c-format msgid "server message too large: %u" msgstr "порука сервера је превелика: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1238 msgid "timeout writing to server" msgstr "истекло је време писања на сервер" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1457 plugins/sudoers/log_client.c:296 msgid "TLS handshake timeout occurred" msgstr "дошло је до временског истека ТЛС руковања" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1476 logsrvd/sendlog.c:1491 +#: plugins/sudoers/log_client.c:318 plugins/sudoers/log_client.c:334 msgid "unable to set event" msgstr "не могу да подесим догађај" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1501 logsrvd/sendlog.c:1505 #, c-format msgid "TLS connection failed: %s" msgstr "ТЛС веза није успела: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1538 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Не могу да покренем ссл контекст: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1543 plugins/sudoers/log_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Не могу да доделим ссл објекат: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1548 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Не могу да прикачим прикључницу ссл објекту: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1792 msgid "both restart point and iolog ID must be specified" msgstr "мора бити наведена и тачка поновног покретања и ИБ уи_дневника" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1796 msgid "a restart point may not be set when no I/O is sent" msgstr "тачка поновног покретања се не може подесити када није послат У/И" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1871 #, c-format msgid "exited prematurely with state %d" msgstr "изађох прерано са стањем „%d“" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1872 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "протекло време послато серверу [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1874 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "тачка слања примљена са сервера [%lld, %ld]" -#: plugins/sudoers/alias.c:144 +#: plugins/sudoers/alias.c:148 #, c-format msgid "Alias \"%s\" already defined" msgstr "Псеудоним „%s“ је већ одређен" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 -msgid "unable to fork" -msgstr "не могу да исцепим" +#: plugins/sudoers/audit.c:206 plugins/sudoers/audit.c:343 +#: plugins/sudoers/log_client.c:954 plugins/sudoers/log_client.c:1002 +#: plugins/sudoers/log_client.c:1050 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:548 plugins/sudoers/policy.c:114 +msgid "unable to get time of day" +msgstr "не могу да добавим време дана" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "не могу да изменим лозинку за „%s“" @@ -867,11 +927,11 @@ msgstr "неисправна врста потврђивање идентите msgid "unable to initialize BSD authentication" msgstr "не могу да покренем БСД потврђивање идентитета" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "ваш налог је истекао" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "доказивање није успело" @@ -978,7 +1038,7 @@ msgstr "Налог је истекао или ПАМ подешавањима н msgid "PAM account management error: %s" msgstr "грешка управљања ПАМ налогом: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "ви не постојите у бази подтака „%s“" @@ -1007,7 +1067,7 @@ msgstr "неисправна ручка потврђивања идентите msgid "SecurID communication failed" msgstr "Није успело комуницирање безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "непозната грешка безбедног ИБ-а" @@ -1015,7 +1075,7 @@ msgstr "непозната грешка безбедног ИБ-а" msgid "invalid passcode length for SecurID" msgstr "неисправна дужина пропусне шифре за безбедни ИБ" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "не могу да покренем СИА сесију" @@ -1039,7 +1099,7 @@ msgstr "Нема начина потврђивања идентитета пре msgid "Unable to initialize authentication methods." msgstr "Не могу да покренем методе потврђивања идентитета." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Начини потврђивања идентитета:" @@ -1072,117 +1132,117 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:837 plugins/sudoers/sudoers.c:858 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "непознат јиб: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1088 +#: plugins/sudoers/sudoers.c:440 plugins/sudoers/sudoers.c:1307 +#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "непознат корисник: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "повећање поретка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "поредак почетка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "попуњавање поретка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s граматика издање %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "неподржан запис улаза „%s“" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "неподржан запис излаза „%s“" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: улазна датотека треба да се разликује од излазне" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:178 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "не могу да покренем основне вредности судоерса" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: непозната реч кључа: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "неисправна врста основности: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "неисправна врста потискивања: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "неисправан филтер: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoreplay.c:1435 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "не могу да отворим „%s“" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "нисам успео да обрадим %s датотеку, непозната грешка" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "грешка обраде у %s близу реда %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "грешка обраде у %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1124 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "не могу да пишем у „%s“" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1191,7 +1251,7 @@ msgstr "" "%s – претвара међусобно записе датотеке судоерса\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1232,675 +1292,700 @@ msgstr "" " -V, --version приказује податке о издању и излази" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "непознат унос основности „%s“" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 -#: plugins/sudoers/ldap.c:502 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 +#: plugins/sudoers/ldap.c:503 msgid "unable to get GMT time" msgstr "не могу да добавим ГМТ време" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 -#: plugins/sudoers/ldap.c:508 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 +#: plugins/sudoers/ldap.c:509 msgid "unable to format timestamp" msgstr "не могу да обликујем временску ознаку" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "превише уноса судоерса, највише %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "променљива „SUDOERS_BASE“ окружења није постављена и „-b“ опција није наведена." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:50 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Помоћник сисдневника ако је сисдневник коришћен за пријављивање: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:54 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Приоритет системског дневника за коришћење када корисник успешно потврди идентитет: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:58 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Приоритет системског дневника за коришћење када корисник неуспешно потврди идентитет: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:62 msgid "Put OTP prompt on its own line" msgstr "Поставља ОТП упит на свом реду" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:66 msgid "Ignore '.' in $PATH" msgstr "Занемарује . у $ПУТАЊИ" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:70 msgid "Always send mail when sudo is run" msgstr "Увек шаље пошту када је судо покренут" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if user authentication fails" msgstr "Пошаљи поруку ако потврђивање идентитета корисника не успе" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:78 msgid "Send mail if the user is not in sudoers" msgstr "Пошаљи поруку ако корисник није у судоерсу" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:82 msgid "Send mail if the user is not in sudoers for this host" msgstr "Пошаљи поруку ако корисник није у судоерсу за овог домаћина" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:86 msgid "Send mail if the user is not allowed to run a command" msgstr "Пошаљи поруку ако кориснику није дозвољено да покрене наредбу" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:90 msgid "Send mail if the user tries to run a command" msgstr "Пошаљи поруку ако корисник покуша да покрене наредбу" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:94 msgid "Use a separate timestamp for each user/tty combo" msgstr "Користи одвојене временске ознаке за сваку комбинацију корисник/конзола" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:98 msgid "Lecture user the first time they run sudo" msgstr "Подучава корисника када први пут покрену судо" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:102 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Датотека садржи судо обучавања: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:106 msgid "Require users to authenticate by default" msgstr "Захтева да корисници потврде идентитет по основи" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:110 msgid "Root may run sudo" msgstr "Администратор може да покрене судо" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:114 msgid "Log the hostname in the (non-syslog) log file" msgstr "Бележи назив домаћина у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:118 msgid "Log the year in the (non-syslog) log file" msgstr "Бележи годину у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:122 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Ако је судо призван без аргумената, покреће шкољку" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:126 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Подешава $HOME на крајњег корисника када покреће шкољку са „-s“" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:130 msgid "Always set $HOME to the target user's home directory" msgstr "Увек подешава $HOME на циљни лични директоријум корисника" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:134 msgid "Allow some information gathering to give useful error messages" msgstr "Дозвољава прикупљање неких података да би дао корисне поруке грешака" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:138 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Захтева потпуно одређене називе домаћина у датотеци судоерса" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:142 msgid "Insult the user when they enter an incorrect password" msgstr "Вређа корисника када унесе нетачну лозинку" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:146 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозвољава кориснику да покрене судо само ако има конзолу" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:150 msgid "Visudo will honor the EDITOR environment variable" msgstr "Висудо ће поштовати променљиву окружења УРЕЂИВАЧА" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:154 msgid "Prompt for root's password, not the users's" msgstr "Тражи администраторову лозинку, а не корисника" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:158 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Тражи корисникову лозинку покреникао_основни, а не корисника" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:162 msgid "Prompt for the target user's password, not the users's" msgstr "Тражи корисникову лозинку мете, а не корисника" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:166 msgid "Apply defaults in the target user's login class if there is one" msgstr "Примењује основности у циљни кориснички разред пријављивања ако постоји" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:170 msgid "Set the LOGNAME and USER environment variables" msgstr "Подешава променљиве окружења НАЗИВДНЕВНИКА и КОРИСНИК" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:174 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Подешава само ефективни јиб на крајњег корисника, а не стваран јиб" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:178 msgid "Don't initialize the group vector to that of the target user" msgstr "Не покреће вектор групе ка оном крајњег корисника" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Дужина за преламање редова у датотеци дневника (0 — без преламања): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Време истека временске ознаке потврђивања идентитета: %.1f минута" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Време истека упита лозинке: %.1f минута" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Број покушаја за уношење лозинке: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Умаска за коришћење или 0777 за коришћење корисника: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Path to log file: %s" msgstr "Путања до датотеке дневника: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Path to mail program: %s" msgstr "Путања до програма поште: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Flags for mail program: %s" msgstr "Опције за програм поште: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса на коју послати поруку: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса са које послати поруку: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Subject line for mail messages: %s" msgstr "Ред теме за поруке поште: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Incorrect password message: %s" msgstr "Порука нетачне лозинке: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Path to lecture status dir: %s" msgstr "Путања до директоријума стања обучавања: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:234 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Путања до директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Корисницима у овој групи се не захтева лозинка и ПУТАЊА: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Default password prompt: %s" msgstr "Основни упит лозинке: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:250 msgid "If set, passprompt will override system prompt in all cases." msgstr "Ако је подешено, упит лозинке ће преписати системски упит у свим случајевима." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "Default user to run commands as: %s" msgstr "Основни корисник за покретање наредби као: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:258 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Вредност за преписивање корисничке $ПУТАЊЕ са: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:262 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Путања до уређивача кога ће да користи висудо: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „list“: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:270 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „verify“: %s" -#: plugins/sudoers/def_data.c:266 -msgid "Preload the dummy exec functions contained in the sudo_noexec library" -msgstr "Унапред учитава лажне функције извршавања које се налазе у библиотеци „sudo_noexec“" +#: plugins/sudoers/def_data.c:274 +msgid "Preload the sudo_noexec library which replaces the exec functions" +msgstr "Унапред учитава „sudo_noexec“ библиотеку која мења функцију извршавања" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:278 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Ако је ЛДАП директоријум изнет, да ли занемарујемо месну датотеку судоерса" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:282 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Описници датотека >= %d ће бити затворени пре извршавања наредбе" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:286 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Ако је подешено, корисници могу да препишу вредност „closefrom“ са опцијом „-C“" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:290 msgid "Allow users to set arbitrary environment variables" msgstr "Дозвољава корисницима да подесе произвољне променљиве окружења" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:294 msgid "Reset the environment to a default set of variables" msgstr "Враћа окружење на основни скуп променљивих" -#: plugins/sudoers/def_data.c:290 -msgid "Environment variables to check for sanity:" +#: plugins/sudoers/def_data.c:298 +msgid "Environment variables to check for safety:" msgstr "Променљиве окружења за проверу исправности:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:302 msgid "Environment variables to remove:" msgstr "Променљиве окружења за уклањање:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:306 msgid "Environment variables to preserve:" msgstr "Променљиве окружења за очување:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:310 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "СЕЛинукс улога за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:314 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "СЕЛинукс врста за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:318 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Путања до судо-посебне датотеке окружења: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:322 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Путања до ограничене судо-посебне датотеке окружења: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:326 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Језк за коришћење при обради судоерса: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:330 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозвољава да судо тражи лозинку чак и ако би била видљива" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:334 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Обезбеђује видну повратну поруку при тражењу лозинке када постоји унос корисника" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:338 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Користи брже упоређивање које је мање тачно али не приступа систему датотека" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:342 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Умаска наведена у судоерсима ће преписати корисникову, чак и ако има већа овлашћења" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:346 msgid "Log user's input for the command being run" msgstr "Бележи корисников улаз за покренуту наредбу" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:350 msgid "Log the output of the command being run" msgstr "Бележи излаз покренуте наредбе" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:354 msgid "Compress I/O logs using zlib" msgstr "Пакује У/И дневнике користећи злиб" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:358 msgid "Always run commands in a pseudo-tty" msgstr "Увек покреће наредбе у привидној конзоли" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:362 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Прикључак за подршку не-Јуникс групе: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:366 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Директоријум за смештај улазних/излазних дневника: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:370 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Датотека за смештај улазно/излазног дневника: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:374 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додаје унос у датотеку „utmp/utmpx“ када додељује „pty“" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:378 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Подешава корисника у „utmp“-у на корисника покрени-као, не призивајући корисника" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:382 #, c-format msgid "Set of permitted privileges: %s" msgstr "Скуп допуштених повластица: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:386 #, c-format msgid "Set of limit privileges: %s" msgstr "Скуп повластица ограничења: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:390 msgid "Run commands on a pty in the background" msgstr "Покреће наредбе у позадини на назовитерминалу" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "PAM service name to use: %s" msgstr "Назив ПАМ услуге за коришћење: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:398 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Назив ПАМ услуге за шкољке пријављивања: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:402 msgid "Attempt to establish PAM credentials for the target user" msgstr "Покушава да успостави ПАМ пуномоћства за циљног корисника" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:406 msgid "Create a new PAM session for the command to run in" msgstr "Прави нову ПАМ сесију за покретање наредбе" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:410 msgid "Perform PAM account validation management" msgstr "Обавља управљање провером ПАМ налога" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:414 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Највећи број низа У/И дневника: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:418 msgid "Enable sudoers netgroup support" msgstr "Укључује подршку нетгрупе судоерса" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:422 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Проверава родитељски директоријум за уписивошћу када уређује датотеке са „sudoedit“" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:426 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Прати симболичке везе када уређује датотеке са „sudoedit“" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:430 msgid "Query the group plugin for unknown system groups" msgstr "Пропитује прикључак групе за непознатим групама система" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:434 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Упоређује мрежне групе на основу читавог слога: корисник, домаћин и домен" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:438 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Допушта покретање наредби чак и ако судо не може да пише у дневник прегледа" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:442 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Допушта покретање наредби чак и ако судо не може да пише у дневник У/И" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:446 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Допушта покретање наредби чак и ако судо не може да пише у датотеку дневника" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:450 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Решава групе у судоерсима и упоређује ИД групе, а не назив" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:454 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Уноси дневника већи од ове вредности биће подељени на више порука системског дневника: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:458 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Корисник који ће поседовати датотеке дневника У/И: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:462 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Група која ће поседовати датотеке дневника У/И: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:466 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Режим датотеке за коришћење за датотеке дневника У/И: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:470 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Извршава наредбе описником датотеке уместо путањом: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:474 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Занемарује непознате уносе основности у судоерсу уместо да даје упозорење" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:478 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Време у секундама након ког ће наредба бити окончана: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:482 msgid "Allow the user to specify a timeout on the command line" msgstr "Допушта кориснику да наведе време на линији наредби" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:486 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Пребацује У/И податке дневника на диск одмах уместо да га смешта у међумеморију" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:490 msgid "Include the process ID when logging via syslog" msgstr "Укључује ИБ процеса приликом пријављивања путем дневника система" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:494 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Врста временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:498 #, c-format msgid "Authentication failure message: %s" msgstr "Потврђивање идентитета није успело: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:502 msgid "Ignore case when matching user names" msgstr "Занемарује величину слова приликом поклапања назива корисника" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:506 msgid "Ignore case when matching group names" msgstr "Занемарује величину слова приликом поклапања назива групе" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:510 msgid "Log when a command is allowed by sudoers" msgstr "Пише дневник када судоерси дозвољавају наредбу" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:514 msgid "Log when a command is denied by sudoers" msgstr "Пише дневник када судоерси не дозвољавају наредбу" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:518 msgid "Sudo log server(s) to connect to with optional port" msgstr "Судо сервер(и) дневника за повезивање са изборним прикључником" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:522 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Време истека судо сервера дневника у секундама: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:526 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Укључује „SO_KEEPALIVE“ опцију прикључнице са повезаном прикључницом са сервером дневника" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:530 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Путања до датотеке групних издавача уверења сервера испитивања: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:534 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Путања до датотеке уверења судоерса: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:538 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Путања до датотеке датотеке личног кључа судоерса: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:542 msgid "Verify that the log server's certificate is valid" msgstr "Потврђује да је исправно уверење дневника сервера" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:546 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Допушта коришћење непознатог „runas“ корисника и/или ИБ-а групе" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:550 msgid "Only permit running commands as a user with a valid shell" msgstr "Допушта покретање наредби као корисник само са исправном шкољком" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:554 msgid "Set the pam remote user to the user running sudo" msgstr "Поставља пам удаљеног корисника на корисника покретача судо-а" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:558 msgid "Set the pam remote host to the local host name" msgstr "Поставља пам удаљеног домаћина на назив локалног домаћина" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:562 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d непознат унос основности „%s“" +msgid "Working directory to change to before executing the command: %s" +msgstr "Радни директоријум за прелазак пре извршавања наредбе: %s" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:566 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: непознат унос основности „%s“" +msgid "Root directory to change to before executing the command: %s" +msgstr "Корени директоријум за прелазак пре извршавања наредбе: %s" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/def_data.c:570 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d није наведена вредност за „%s“" +msgid "The format of logs to produce: %s" +msgstr "Формат резултирајућих дневника: %s" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:185 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: није наведена вредност за „%s“" +msgid "%s:%d:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d:%d: непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:188 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d вредност за „%s“ мора да почиње /" +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: вредност за „%s“ мора да почиње /" +msgid "%s:%d:%d: no value specified for \"%s\"" +msgstr "%s:%d:%d: није наведена вредност за „%s“" + +#: plugins/sudoers/defaults.c:237 +#, c-format +msgid "%s: no value specified for \"%s\"" +msgstr "%s: није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d опција „%s“ не узима вредност" +msgid "%s:%d:%d: option \"%s\" does not take a value" +msgstr "%s:%d:%d: опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:278 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:303 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d неисправна врста основности 0x%x за опцију „%s“" +msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d:%d: неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:306 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:316 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d вредност „%s“ је неисправна за опцију „%s“" +msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d:%d: вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:319 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1030 +#, c-format +msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d:%d: вредност за „%s“ мора да почиње са /, ~ или *" + +#: plugins/sudoers/defaults.c:1034 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: вредност за „%s“ мора да почиње са /, ~ или *" + +#: plugins/sudoers/defaults.c:1045 +#, c-format +msgid "%s:%d:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d:%d: вредност за „%s“ мора да почиње са /" + +#: plugins/sudoers/defaults.c:1049 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: вредност за „%s“ мора да почиње /" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: оштећено стави окружење, дужине не одговарају" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "не могу поново да изградим окружење" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "извините, није вам дозвољено да подесите следеће променљиве окружења: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "грешка обраде у %s близу реда %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "грешка обраде у %s" @@ -1925,7 +2010,7 @@ msgstr "„%s“ мора бити у власништву јиб-а %d" msgid "%s must only be writable by owner" msgstr "Само корисник може да пише у „%s“" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:571 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:569 #, c-format msgid "unable to load %s: %s" msgstr "не могу да учитам %s: %s" @@ -1954,122 +2039,78 @@ msgstr "не могу да обрадим мрежну маску „%s“" msgid "Local IP address and netmask pairs:\n" msgstr "Месна ИП адреса и парови мрежне маске:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:445 +#: plugins/sudoers/sudoers.c:1341 plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "непозната група: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:622 +msgid "unable to update sequence file" +msgstr "не могу да освежим датотеку низа" + +#: plugins/sudoers/iolog.c:653 plugins/sudoers/iolog.c:841 +#: plugins/sudoers/iolog.c:994 plugins/sudoers/iolog.c:1001 +#: plugins/sudoers/iolog.c:1122 plugins/sudoers/iolog.c:1129 +#: plugins/sudoers/iolog.c:1228 plugins/sudoers/iolog.c:1235 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не могу да пишем у датотеку дневника У/И: %s" -#: plugins/sudoers/iolog.c:566 -msgid "unable to update sequence file" -msgstr "не могу да освежим датотеку низа" - -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:661 #, c-format msgid "unable to create %s/%s" msgstr "не могу да направим „%s/%s“" -#: plugins/sudoers/iolog.c:631 -msgid "unable to connect to log server" -msgstr "не могу да се повежем на сервер дневника" - -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:886 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: унутрашња грешка, датотека У/И дневника за догађај %d није отворена" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:979 plugins/sudoers/iolog.c:1107 +#: plugins/sudoers/iolog.c:1212 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "не могу да прочитам сат" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1204 plugins/sudoers/log_client.c:1193 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: унутрашња грешка, неисправан сигнал %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 -msgid "error in event loop" -msgstr "грешка у петљи догађаја" - -#: plugins/sudoers/iolog_client.c:194 -#, c-format -msgid "Creation of new SSL_CTX object failed: %s" -msgstr "Стварање новог „SSL_CTX“ објекта није успело: %s" - -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 -#, c-format -msgid "TLS connection to %s:%s failed: %s" -msgstr "ТЛС повезивање са „%s:%s“ није успело: %s" - -#: plugins/sudoers/iolog_client.c:496 -msgid "TLS initialization was unsuccessful" -msgstr "ТЛС покретање беше безуспешно" - -#: plugins/sudoers/iolog_client.c:505 -msgid "TLS handshake was unsuccessful" -msgstr "ТЛС руковање беше безуспешно" - -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 -msgid "unable to get time of day" -msgstr "не могу да добавим време дана" - -#: plugins/sudoers/iolog_client.c:986 -#, c-format -msgid "%s: internal error, invalid exit status %d" -msgstr "%s: унутрашња грешка, неисправно излазно стање %d" - -#: plugins/sudoers/iolog_client.c:1523 -msgid "lost connection to log server" -msgstr "изгубих везу са сервером дневника" - -#: plugins/sudoers/iolog_client.c:1600 -msgid "missing write buffer" -msgstr "недостаје међумеморија писања" - -#: plugins/sudoers/ldap.c:176 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 msgid "starttls not supported when using ldaps" msgstr "старттлс није подржано када се користи лдапс" -#: plugins/sudoers/ldap.c:247 +#: plugins/sudoers/ldap.c:248 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не могу да покренем ССЛ уверење и бп кључа: %s" -#: plugins/sudoers/ldap.c:250 +#: plugins/sudoers/ldap.c:251 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "морате да подесите „TLS_CERT“ у „%s“ да користите ССЛ" -#: plugins/sudoers/ldap.c:1658 +#: plugins/sudoers/ldap.c:1660 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не могу да покренем ЛДАП: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1697 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:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1834 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "неисправна особина „sudoOrder“: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: прикључник је превелик" +#, c-format +msgid "%s: port too large" +msgstr "%s: прикључник је превелик" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2080,7 +2121,7 @@ msgstr "неподржана врста ЛДАП путање: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "не могу да помешам лдап и лдапс путање" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:553 plugins/sudoers/ldap_util.c:555 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "не могу да претворим „sudoOption“: %s%s%s" @@ -2089,66 +2130,91 @@ msgstr "не могу да претворим „sudoOption“: %s%s%s" msgid "unable to open audit system" msgstr "не могу да отворим систем прегледа" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "не могу да пошаљем поруку прегледа" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/log_client.c:113 plugins/sudoers/log_client.c:391 +#: plugins/sudoers/log_client.c:1431 plugins/sudoers/log_client.c:2023 +msgid "error in event loop" +msgstr "грешка у петљи догађаја" + +#: plugins/sudoers/log_client.c:193 #, c-format -msgid "unable to open log file: %s" -msgstr "не могу да отворим датотеку дневника: %s" +msgid "Creation of new SSL_CTX object failed: %s" +msgstr "Стварање новог „SSL_CTX“ објекта није успело: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/log_client.c:345 plugins/sudoers/log_client.c:350 #, c-format -msgid "unable to lock log file: %s" -msgstr "не могу да закључам датотеку дневника: %s" +msgid "TLS connection to %s:%s failed: %s" +msgstr "ТЛС повезивање са „%s:%s“ није успело: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/log_client.c:519 +msgid "TLS initialization was unsuccessful" +msgstr "ТЛС покретање беше безуспешно" + +#: plugins/sudoers/log_client.c:528 +msgid "TLS handshake was unsuccessful" +msgstr "ТЛС руковање беше безуспешно" + +#: plugins/sudoers/log_client.c:1202 #, c-format -msgid "unable to write log file: %s" -msgstr "не могу да запишем датотеку дневника: %s" +msgid "%s: internal error, invalid exit status %d" +msgstr "%s: унутрашња грешка, неисправно излазно стање %d" + +#: plugins/sudoers/log_client.c:1738 +msgid "lost connection to log server" +msgstr "изгубих везу са сервером дневника" + +#: plugins/sudoers/log_client.c:1815 +msgid "missing write buffer" +msgstr "недостаје међумеморија писања" + +#: plugins/sudoers/log_client.c:1964 +msgid "unable to connect to log server" +msgstr "не могу да се повежем на сервер дневника" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:244 msgid "user NOT in sudoers" msgstr "корисник НИЈЕ у судоерсу" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:246 msgid "user NOT authorized on host" msgstr "корисник НИЈЕ овлашћен на домаћину" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:248 msgid "command not allowed" msgstr "наредба није допуштена" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:269 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "„%s“ се не налази у датотеци судоерса. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:272 #, 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:295 +#: plugins/sudoers/logging.c:276 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Извините, корисник %s не може покренути судо на %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:279 #, 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:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:316 plugins/sudoers/sudoers.c:583 +#: plugins/sudoers/sudoers.c:585 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:739 +#: plugins/sudoers/sudoers.c:741 #, c-format msgid "%s: command not found" msgstr "%s: нема такве наредбе" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:579 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2157,15 +2223,7 @@ msgstr "" "занемарујем „%s“ пронађено у „.“\n" "Користите „sudo ./%s“ ако је то „%s“ које желите да покренете." -#: plugins/sudoers/logging.c:354 -msgid "authentication failure" -msgstr "потврђивање идентитета није успело" - -#: plugins/sudoers/logging.c:380 -msgid "a password is required" -msgstr "потребна је лозинка" - -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:337 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2173,32 +2231,30 @@ msgstr[0] "%u покушај нетачне лозинке" msgstr[1] "%u покушаја нетачне лозинке" msgstr[2] "%u покушаја нетачне лозинке" -#: plugins/sudoers/logging.c:714 -#, c-format -msgid "unable to dup stdin: %m" -msgstr "не могу да удвостручим стандардни улаз: %m" +#: plugins/sudoers/logging.c:393 +msgid "authentication failure" +msgstr "потврђивање идентитета није успело" -#: plugins/sudoers/logging.c:751 -#, c-format -msgid "unable to execute %s: %m" -msgstr "не могу да извршим „%s“: %m" +#: plugins/sudoers/logging.c:433 plugins/sudoers/logging.c:453 +msgid "a password is required" +msgstr "потребна је лозинка" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:729 #, c-format -msgid "unable to fork: %m" -msgstr "не могу да исцепим: %m" +msgid "unable to open log file: %s" +msgstr "не могу да отворим датотеку дневника: %s" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:762 #, c-format -msgid "unable to open pipe: %m" -msgstr "не могу да отворим спојку: %m" +msgid "unable to write log file: %s" +msgstr "не могу да запишем датотеку дневника: %s" -#: plugins/sudoers/match_digest.c:116 +#: plugins/sudoers/match_digest.c:129 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "приказ за %s (%s) није у %s облику" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2207,8 +2263,7 @@ msgstr "" "\n" "ЛДАП улога: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2216,42 +2271,38 @@ msgstr "" "\n" "Унос судоерса:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " „Покрени-као“ корисници: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " „Покрени-као“ групе: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Опције: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Наредбе:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Упоређује уносе основности за „%s“ на %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Покрени-као и Наредбено-посебне основности за „%s“:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Корисник „%s“ може да покреће следеће наредбе на %s:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Корисник „%s“ нема права да покрене судо над „%s“.\n" @@ -2266,48 +2317,58 @@ msgstr "занемарујем непотпуно „sudoRole“: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "неисправна особина „LDIF“: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "судо челник је поставио неисправну „%.*s“" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:310 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "не могу да обрадим списак адреса мреже" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:455 msgid "user name not set by sudo front-end" msgstr "судо челник није поставио име корисника" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:459 msgid "user-ID not set by sudo front-end" msgstr "судо челник није поставио ИБ корисника" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:463 msgid "group-ID not set by sudo front-end" msgstr "судо челник није поставио ИБ групе" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:467 msgid "host name not set by sudo front-end" msgstr "судо челник није поставио назив домаћина" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:643 +#, c-format +msgid "invalid working directory: %s" +msgstr "неисправан радни директоријум: %s" + +#: plugins/sudoers/policy.c:811 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "неисправан „chroot“ директоријум: %s" + +#: plugins/sudoers/policy.c:947 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим „%s“" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1111 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Издање %s прикључка политике судоерса\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1113 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматика датотеке судоерса издање %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "" "\n" @@ -2316,86 +2377,86 @@ msgstr "" "\n" "Путања судоерса: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1120 #, c-format msgid "nsswitch path: %s\n" msgstr "путања нс-прекидача: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1122 #, c-format msgid "ldap.conf path: %s\n" msgstr "путања лдап.подешавања: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1123 #, c-format msgid "ldap.secret path: %s\n" msgstr "путања лдап.тајне: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1156 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "немогу да региструјем прикачку врсте „%d“ (издање %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "не могу да сместим у оставу јиб „%u“" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "не могу да сместим у оставу јиб „%u“, већ постоји" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "не могу да сместим у оставу корисника „%s“" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "не могу да сместим у оставу корисника „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "не могу да сместим у оставу гиб „%u“" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "не могу да сместим у оставу гиб „%u“, већ постоји" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "не могу да сместим у оставу групу „%s“" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "не могу да сместим у оставу групу „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "не могу да сместим у оставу списак групе за „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "не могу да сместим у оставу списак групе за „%s“" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "не могу да обрадим групе за „%s“" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "не могу да обрадим гид-ове за „%s“" @@ -2459,239 +2520,259 @@ msgstr "корисничка_наредба скраћене путање пре msgid "truncated audit path argv[0]: %s" msgstr "„argv[0]“ скраћене путање прегледа: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:572 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "не могу да покренем ССС извор. Да ли је СССД инсталиран на вашем рачунару?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:580 plugins/sudoers/sssd.c:589 +#: plugins/sudoers/sssd.c:598 plugins/sudoers/sssd.c:607 +#: plugins/sudoers/sssd.c:616 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не могу да нађем симбол „%s“ у „%s“" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:214 plugins/sudoers/sudoers.c:1010 msgid "problem with defaults entries" msgstr "неприлике са основним уносима" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:218 msgid "no valid sudoers sources found, quitting" msgstr "нисам пронашао исправне изворе судоерса, прекидам" -#: plugins/sudoers/sudoers.c:297 +#: plugins/sudoers/sudoers.c:292 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "кориснику није дозвољено да промени корени директоријум у „%s“" + +#: plugins/sudoers/sudoers.c:294 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "није вам допуштено да користите опцију „-R“ са „%s“" + +#: plugins/sudoers/sudoers.c:319 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "кориснику није дозвољено да промени директоријум у „%s“" + +#: plugins/sudoers/sudoers.c:320 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "није вам допуштено да користите опцију „-D“ са „%s“" + +#: plugins/sudoers/sudoers.c:351 msgid "sudoers specifies that root is not allowed to sudo" msgstr "судоерси наводе да администратор није дозвољен у судоу" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:411 msgid "user not allowed to override closefrom limit" msgstr "кориснику није дозвољено да препише „closefrom“ ограничење" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:412 msgid "you are not permitted to use the -C option" msgstr "није вам допуштено да користите опцију „-C“" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:472 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник временске ознаке (%s): нема таквог корисника" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:487 msgid "no tty" msgstr "нема конзоле" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:488 msgid "sorry, you must have a tty to run sudo" msgstr "извините, морате имати конзолу да покренете судо" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:495 #, c-format msgid "invalid shell for user %s: %s" msgstr "неисправна шкољка за корисника „%s“: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:578 msgid "command in current directory" msgstr "наредба у текућем директоријуму" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:597 msgid "user not allowed to set a command timeout" msgstr "кориснику није дозвољено да подеси време истека наредбе" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:599 msgid "sorry, you are not allowed set a command timeout" msgstr "извините, није вам дозвољено да подесите време истека наредбе" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:607 msgid "user not allowed to preserve the environment" msgstr "кориснику није дозвољено да сачува окружење" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:609 msgid "sorry, you are not allowed to preserve the environment" msgstr "извините, није вам дозвољено да сачувате окружење" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:945 msgid "command too long" msgstr "наредба је предуга" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1003 msgid "sudoedit doesn't need to be run via sudo" msgstr "„sudoedit“ не треба да се покреће путем „sudo“-а" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1057 plugins/sudoers/sudoreplay.c:1547 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "не могу да прочитам „%s“" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1082 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1086 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/timestamp.c:252 toke.l:1112 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1094 toke.l:1117 #, c-format msgid "%s is world writable" msgstr "Сви могу да пишу у „%s“" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1098 toke.l:1120 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1131 #, c-format msgid "only root can use \"-c %s\"" msgstr "само администратор може да користи „-c %s“" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1150 #, c-format msgid "unknown login class: %s" msgstr "непознат разред пријављивања: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1235 plugins/sudoers/sudoers.c:1250 #, c-format msgid "unable to resolve host %s" msgstr "не могу да решим домаћина „%s“" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:257 #, c-format msgid "invalid filter option: %s" msgstr "неисправна опција пропусника: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:273 #, c-format msgid "invalid max wait: %s" msgstr "неисправно најдуже чекање: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "invalid speed factor: %s" msgstr "неисправан чинилац брзине: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:332 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:337 #, c-format msgid "%s/timing: %s" msgstr "%s/временисање: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:341 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:365 #, c-format msgid "Replaying sudo session: %s" msgstr "Понављам сесију судоа: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:627 msgid "unable to set tty to raw mode" msgstr "не могу да подесим конзолу на сирови режим" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:678 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Упозорење: ваш терминал је премали да би исправно приказао дневник.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:679 #, 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:708 +#: plugins/sudoers/sudoreplay.c:707 msgid "Replay finished, press any key to restore the terminal." msgstr "Одговор је завршен, притисните неки тастер да повратите терминал." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1197 plugins/sudoers/sudoreplay.c:1227 #, c-format msgid "ambiguous expression \"%s\"" msgstr "нејасан израз „%s“" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1249 msgid "unmatched ')' in expression" msgstr "непоклопљена ) у изразу" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1253 #, c-format msgid "unknown search term \"%s\"" msgstr "непознат појам претраге „%s“" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1268 #, c-format msgid "%s requires an argument" msgstr "„%s“ захтева аргумент" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1271 plugins/sudoers/sudoreplay.c:1523 #, c-format msgid "invalid regular expression: %s" msgstr "неисправан регуларан израз: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1276 #, c-format msgid "could not parse date \"%s\"" msgstr "не могу да обрадим датум „%s“" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1285 msgid "unmatched '(' in expression" msgstr "непоклопљена ( у изразу" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1287 msgid "illegal trailing \"or\"" msgstr "недозвољено пратеће „или“" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1289 msgid "illegal trailing \"!\"" msgstr "недозвољени пратећи „!“" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1347 #, c-format msgid "unknown search type %d" msgstr "непозната врста претраге „%d“" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1614 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "употреба: %s [-hnRS] [-d дир] [-m број] [-s број] ИБ\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1617 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "употреба: %s [-h] [-d дир] -l [израз претраге]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1626 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2700,7 +2781,7 @@ msgstr "" "%s — понавља дневнике сесије судоа\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1628 msgid "" "\n" "Options:\n" @@ -2728,11 +2809,11 @@ msgstr "" " -s, --speed=број убрзава или успорава излаз\n" " -V, --version приказује податке о издању и излази" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tдомаћин није поклопљен" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2740,7 +2821,7 @@ msgstr "" "\n" "Наредба је допуштена" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2748,7 +2829,7 @@ msgstr "" "\n" "Наредба је одбијена" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2793,89 +2874,89 @@ msgstr "„sudoedit“ не треба да се наводи са путањо msgid "the -x option will be removed in a future release" msgstr "опција „-x“ биће уклоњена у наредном издању" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "размотрите коришћење помагала „cvtsudoers“" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "притисните „унеси“ да уредите „%s“: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "наведени уређивач (%s) не постоји" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "нисам пронашао уређивача (путања уређивача = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "грешка писања" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не могу да добавим податке привремене датотеке (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "привремена датотека нулте дужине (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "уређивач (%s) није успео, %s је неизмењено" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "„%s“ је неизмењено" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не могу поново да отворим привремену датотеку (%s), %s је неизмењено." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "не могу да обрадим привремену датотеку (%s), непозната грешка" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не могу да подесим (јиб, гиб) за %s на (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "„%s“ и „%s“ нису на истом систему датотека, користим „mv“ за преименовање" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "наредба није успела: „%s %s %s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "грешка преименовања „%s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Шта сада? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2887,66 +2968,66 @@ msgstr "" " x — излази без чувања измена у датотеци судоерса\n" " Q — прекида и чува измене у датотеци судоерса (ОПАСНО!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: погрешан власник (јиб, гиб) треба бити (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: лоша овлашћења, требају бити у режиму 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: успешно је обрађено\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "„%s“ је заузет, покушајте касније" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "не могу да закључам „%s“" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Да ипак уреим? [д/Н]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1091 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Грешка: %s:%d циклус у „%s“ „%s“" +msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +msgstr "Грешка: %s:%d:%d: циклус у „%s“ „%s“" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1092 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Упозорење: %s:%d циклус у „%s“ „%s“" +msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +msgstr "Упозорење: %s:%d:%d: циклус у „%s“ „%s“" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1096 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Грешка: %s:%d упута за „%s“ „%s“ постоји али није одређена" +msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "Грешка: %s:%d:%d: упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1097 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Упозорење: %s:%d упута за „%s“ „%s“ постоји али није одређена" +msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "Упозорење: %s:%d:%d: упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1188 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Упозорење: %s:%d некоришћено „%s“ „%s“" +msgid "Warning: %s:%d:%d: unused %s \"%s\"" +msgstr "Упозорење: %s:%d:%d: некоришћено „%s“ „%s“" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1303 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2955,7 +3036,7 @@ msgstr "" "%s — безбедно уређује датотеку судоерса\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1305 msgid "" "\n" "Options:\n" @@ -2975,10 +3056,43 @@ msgstr "" " -s, --strict строга провера синтаксе\n" " -V, --version приказује податке о издању и излази\n" -#: toke.l:1032 +#: toke.l:179 +msgid "empty string" +msgstr "празна ниска" + +#: toke.l:189 toke.l:491 +msgid "empty group" +msgstr "празна група" + +#: toke.l:197 toke.l:489 +msgid "empty netgroup" +msgstr "празна мрежна група" + +#: toke.l:293 toke.l:305 toke.l:317 toke.l:333 toke.l:352 toke.l:392 +msgid "invalid line continuation" +msgstr "неисправан наставак реда" + +#: toke.l:528 toke.l:540 +msgid "invalid IPv6 address" +msgstr "неисправна ИПв6 адреса" + +#: toke.l:764 +msgid "unexpected line break in string" +msgstr "неочекивани прекид реда у нисци" + +#: toke.l:1084 msgid "too many levels of includes" msgstr "превише нивоа укључивања" +#~ msgid "Preload the dummy exec functions contained in the sudo_noexec library" +#~ msgstr "Унапред учитава лажне функције извршавања које се налазе у библиотеци „sudo_noexec“" + +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: прикључник је превелик" + +#~ msgid "unable to lock log file: %s" +#~ msgstr "не могу да закључам датотеку дневника: %s" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "„SSL_повезивање“ није успело: ssl_грешка=%d, спремник=%s\n" diff --git a/plugins/sudoers/po/sv.mo b/plugins/sudoers/po/sv.mo index 89ee042e9f0ec297df364194e3907d56ba9fb123..a41230122199077da74ffab558ef2e6b46bab04e 100644 GIT binary patch delta 14108 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 GL;nMe>yse> delta 12444 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 nyHU5|-7z\n" -"Language-Team: Swedish \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4.2\n" -#: confstr.sh:1 +#: confstr.sh:1 gram.y:1077 msgid "syntax error" msgstr "syntaxfel" @@ -44,70 +44,73 @@ msgstr "*** SÄKERHETSINFORMATION för %h ***" msgid "Sorry, try again." msgstr "Försök igen." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 -#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 -#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 -#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 -#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 -#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 -#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: gram.y:220 gram.y:286 gram.y:293 gram.y:300 gram.y:307 gram.y:314 +#: gram.y:334 gram.y:358 gram.y:365 gram.y:372 gram.y:379 gram.y:386 +#: gram.y:455 gram.y:464 gram.y:475 gram.y:510 gram.y:517 gram.y:524 +#: gram.y:531 gram.y:558 gram.y:654 gram.y:661 gram.y:670 gram.y:679 +#: gram.y:696 gram.y:834 gram.y:841 gram.y:849 gram.y:855 gram.y:971 +#: gram.y:978 gram.y:985 gram.y:992 gram.y:999 gram.y:1025 gram.y:1032 +#: gram.y:1039 gram.y:1236 gram.y:1526 lib/eventlog/eventlog.c:280 +#: lib/eventlog/eventlog.c:352 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:817 lib/eventlog/eventlog.c:1062 +#: lib/iolog/iolog_fileio.c:998 lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:305 lib/iolog/iolog_json.c:335 +#: lib/iolog/iolog_json.c:457 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/sendlog.c:480 +#: plugins/sudoers/alias.c:126 plugins/sudoers/alias.c:134 +#: plugins/sudoers/alias.c:153 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/bsdauth.c:143 +#: plugins/sudoers/auth/kerb5.c:118 plugins/sudoers/auth/kerb5.c:144 +#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/cvtsudoers.c:119 +#: plugins/sudoers/cvtsudoers.c:160 plugins/sudoers/cvtsudoers.c:177 +#: plugins/sudoers/cvtsudoers.c:188 plugins/sudoers/cvtsudoers.c:300 +#: plugins/sudoers/cvtsudoers.c:428 plugins/sudoers/cvtsudoers.c:561 +#: plugins/sudoers/cvtsudoers.c:578 plugins/sudoers/cvtsudoers.c:641 +#: plugins/sudoers/cvtsudoers.c:756 plugins/sudoers/cvtsudoers.c:764 +#: plugins/sudoers/cvtsudoers.c:1178 plugins/sudoers/cvtsudoers.c:1182 +#: plugins/sudoers/cvtsudoers.c:1284 plugins/sudoers/cvtsudoers_json.c:76 +#: plugins/sudoers/cvtsudoers_ldif.c:151 plugins/sudoers/cvtsudoers_ldif.c:194 +#: plugins/sudoers/cvtsudoers_ldif.c:235 plugins/sudoers/cvtsudoers_ldif.c:300 +#: plugins/sudoers/cvtsudoers_ldif.c:371 plugins/sudoers/cvtsudoers_ldif.c:421 +#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:440 +#: plugins/sudoers/cvtsudoers_ldif.c:447 plugins/sudoers/cvtsudoers_ldif.c:460 +#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:615 +#: plugins/sudoers/defaults.c:630 plugins/sudoers/defaults.c:923 +#: plugins/sudoers/defaults.c:1098 plugins/sudoers/editor.c:181 +#: plugins/sudoers/env.c:261 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 #: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:596 +#: plugins/sudoers/iolog.c:613 plugins/sudoers/ldap.c:184 +#: plugins/sudoers/ldap.c:422 plugins/sudoers/ldap.c:432 +#: plugins/sudoers/ldap.c:437 plugins/sudoers/ldap.c:441 +#: plugins/sudoers/ldap.c:453 plugins/sudoers/ldap.c:744 +#: plugins/sudoers/ldap.c:908 plugins/sudoers/ldap.c:1281 +#: plugins/sudoers/ldap.c:1709 plugins/sudoers/ldap.c:1746 +#: plugins/sudoers/ldap.c:1827 plugins/sudoers/ldap.c:1962 +#: plugins/sudoers/ldap.c:2063 plugins/sudoers/ldap.c:2079 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/log_client.c:105 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:166 +#: plugins/sudoers/logging.c:426 plugins/sudoers/logging.c:446 +#: plugins/sudoers/logging.c:527 plugins/sudoers/match_command.c:281 +#: plugins/sudoers/match_command.c:449 plugins/sudoers/match_command.c:499 +#: plugins/sudoers/match_command.c:573 plugins/sudoers/match_digest.c:93 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -117,115 +120,138 @@ msgstr "Försök igen." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 -#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:407 +#: plugins/sudoers/sssd.c:470 plugins/sudoers/sssd.c:514 +#: plugins/sudoers/sssd.c:561 plugins/sudoers/sssd.c:754 +#: plugins/sudoers/stubs.c:110 plugins/sudoers/stubs.c:118 +#: plugins/sudoers/sudoers.c:300 plugins/sudoers/sudoers.c:326 +#: plugins/sudoers/sudoers.c:370 plugins/sudoers/sudoers.c:381 +#: plugins/sudoers/sudoers.c:391 plugins/sudoers/sudoers.c:433 +#: plugins/sudoers/sudoers.c:794 plugins/sudoers/sudoers.c:927 +#: plugins/sudoers/sudoers.c:961 plugins/sudoers/sudoers.c:1265 +#: plugins/sudoers/sudoreplay.c:552 plugins/sudoers/sudoreplay.c:555 +#: plugins/sudoers/sudoreplay.c:1259 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/sudoreplay.c:1473 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/testsudoers.c:587 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1129 toke.l:913 toke.l:1033 toke.l:1091 msgid "unable to allocate memory" msgstr "kan inte allokera minne" -#: gram.y:505 +#: gram.y:552 msgid "a digest requires a path name" msgstr "en kontrollsumma kräver ett sökvägsnamn" -#: gram.y:638 +#: gram.y:581 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "värden för ”CWD” måste börja med ett ”/”, ”~” eller ”*”" + +#: gram.y:593 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "värden för ”CHROOT” måste börja med ett ”/”, ”~” eller ”*”" + +#: gram.y:715 +#, c-format +msgid "syntax error, reserved word %s used as an alias name" +msgstr "syntaxfel, reserverat ord %s använt som ett aliasnamn" + +#: gram.y:735 msgid "invalid notbefore value" msgstr "ogiltigt notbefore-värde" -#: gram.y:646 +#: gram.y:743 msgid "invalid notafter value" msgstr "ogiltigt notafter-värde" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:752 plugins/sudoers/policy.c:335 msgid "timeout value too large" msgstr "tidsgränsvärde för stort" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:754 plugins/sudoers/policy.c:337 msgid "invalid timeout value" msgstr "ogiltigt värde för tidsgräns" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1301 -#: logsrvd/sendlog.c:1308 logsrvd/sendlog.c:1726 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1079 +#, c-format +msgid "%s:%d:%d: %s\n" +msgstr "%s:%d:%d: %s\n" + +#: gram.y:1526 lib/eventlog/eventlog.c:280 lib/eventlog/eventlog.c:753 +#: lib/eventlog/eventlog.c:815 lib/eventlog/eventlog.c:816 +#: lib/eventlog/eventlog.c:1062 lib/iolog/iolog_fileio.c:998 +#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:335 lib/iolog/iolog_json.c:457 +#: lib/iolog/iolog_json.c:735 lib/iolog/iolog_util.c:106 +#: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 +#: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 +#: lib/iolog/iolog_util.c:196 logsrvd/logsrvd.c:1280 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1338 logsrvd/sendlog.c:480 logsrvd/sendlog.c:1321 +#: logsrvd/sendlog.c:1328 logsrvd/sendlog.c:1746 plugins/sudoers/audit.c:115 +#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:630 +#: plugins/sudoers/defaults.c:923 plugins/sudoers/defaults.c:1098 +#: plugins/sudoers/editor.c:181 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:596 plugins/sudoers/iolog.c:613 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:422 +#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:437 +#: plugins/sudoers/ldap.c:441 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:744 plugins/sudoers/ldap.c:908 +#: plugins/sudoers/ldap.c:1281 plugins/sudoers/ldap.c:1709 +#: plugins/sudoers/ldap.c:1746 plugins/sudoers/ldap.c:1827 +#: plugins/sudoers/ldap.c:1962 plugins/sudoers/ldap.c:2063 +#: plugins/sudoers/ldap.c:2079 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:603 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/log_client.c:105 +#: plugins/sudoers/log_client.c:214 plugins/sudoers/log_client.c:235 +#: plugins/sudoers/log_client.c:248 plugins/sudoers/log_client.c:381 +#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 +#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 +#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:165 +#: plugins/sudoers/logging.c:166 plugins/sudoers/logging.c:425 +#: plugins/sudoers/logging.c:445 plugins/sudoers/logging.c:527 +#: plugins/sudoers/match_command.c:280 plugins/sudoers/match_command.c:448 +#: plugins/sudoers/match_command.c:498 plugins/sudoers/match_command.c:573 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:198 +#: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:229 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:274 plugins/sudoers/parse_ldif.c:152 #: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 #: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 #: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 @@ -235,60 +261,112 @@ msgstr "ogiltigt värde för tidsgräns" #: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 #: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 #: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:148 +#: plugins/sudoers/policy.c:157 plugins/sudoers/policy.c:183 +#: plugins/sudoers/policy.c:320 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:337 plugins/sudoers/policy.c:366 +#: plugins/sudoers/policy.c:375 plugins/sudoers/policy.c:418 +#: plugins/sudoers/policy.c:428 plugins/sudoers/policy.c:437 +#: plugins/sudoers/policy.c:446 plugins/sudoers/policy.c:526 +#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 #: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 +#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:144 +#: plugins/sudoers/sssd.c:407 plugins/sudoers/sssd.c:470 +#: plugins/sudoers/sssd.c:514 plugins/sudoers/sssd.c:561 +#: plugins/sudoers/sssd.c:754 plugins/sudoers/stubs.c:110 +#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:300 +#: plugins/sudoers/sudoers.c:326 plugins/sudoers/sudoers.c:370 +#: plugins/sudoers/sudoers.c:381 plugins/sudoers/sudoers.c:391 +#: plugins/sudoers/sudoers.c:433 plugins/sudoers/sudoers.c:794 +#: plugins/sudoers/sudoers.c:927 plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:1265 plugins/sudoers/sudoreplay.c:552 +#: plugins/sudoers/sudoreplay.c:555 plugins/sudoers/sudoreplay.c:1259 +#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/sudoreplay.c:1473 #: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:587 #: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 #: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 #: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 #: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/visudo.c:145 plugins/sudoers/visudo.c:323 +#: plugins/sudoers/visudo.c:329 plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:615 plugins/sudoers/visudo.c:935 +#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:913 +#: toke.l:1033 toke.l:1091 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/eventlog/eventlog.c:285 lib/iolog/iolog_json.c:463 +#: lib/iolog/iolog_json.c:466 lib/iolog/iolog_json.c:468 +#: lib/iolog/iolog_json.c:560 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 +#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/ldap.c:517 plugins/sudoers/ldap.c:748 +#: plugins/sudoers/ldap.c:1081 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:90 +#: plugins/sudoers/policy.c:556 plugins/sudoers/policy.c:711 +#: plugins/sudoers/policy.c:721 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:983 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/toke_util.c:169 +#, c-format +msgid "internal error, %s overflow" +msgstr "internt fel, %s spill" + +#: lib/eventlog/eventlog.c:343 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "kan inte duplicera stdin: %m" + +#: lib/eventlog/eventlog.c:388 +#, c-format +msgid "unable to execute %s: %m" +msgstr "kan inte köra %s: %m" + +#: lib/eventlog/eventlog.c:428 plugins/sudoers/auth/aix_auth.c:198 +msgid "unable to fork" +msgstr "kan inte grena process" + +#: lib/eventlog/eventlog.c:436 lib/eventlog/eventlog.c:490 +#, c-format +msgid "unable to fork: %m" +msgstr "kan inte grena process: %m" + +#: lib/eventlog/eventlog.c:480 +#, c-format +msgid "unable to open pipe: %m" +msgstr "kan inte öppna rör: %m" + +#: lib/eventlog/eventlog.c:894 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: lib/eventlog/eventlog.c:923 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (kommando fortsätter) %s" + +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s finns men är inte en katalog (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "kan inte skapa katalogen %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "kan inte ändra läge för %s till 0%o" @@ -298,63 +376,45 @@ msgstr "kan inte ändra läge för %s till 0%o" msgid "expected JSON_STRING, got %d" msgstr "förväntade JSON_STRING, fick %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:327 msgid "missing double quote in name" msgstr "saknar citationstecken i namn" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:414 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "förväntade JSON_OBJECT, fick %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 -#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 -#: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 -#: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 -#: plugins/sudoers/toke_util.c:169 -#, c-format -msgid "internal error, %s overflow" -msgstr "internt fel, %s spill" - -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:753 msgid "unmatched close brace" msgstr "omatchad avslutningsklammerparentes" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:638 msgid "unexpected array" msgstr "oväntat array" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:651 lib/iolog/iolog_json.c:755 msgid "unmatched close bracket" msgstr "omatchad avslutningsklammer" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:659 msgid "unexpected string" msgstr "oväntad sträng" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:669 msgid "missing colon after name" msgstr "saknar kolon efter namn" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:680 lib/iolog/iolog_json.c:695 +#: lib/iolog/iolog_json.c:710 msgid "unexpected boolean" msgstr "oväntad boolean" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:726 msgid "unexpected number" msgstr "oväntat nummer" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:763 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u kan inte tolka ”%s”" @@ -399,186 +459,184 @@ msgstr "fel vid inläsning av tidsmätningsfil: %s" msgid "invalid timing file line: %s" msgstr "ogiltig rad i tidsmätningsfil: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 -#, c-format -msgid "%8s : %s" -msgstr "%8s : %s" - -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 -#, c-format -msgid "%8s : (command continued) %s" -msgstr "%8s : (kommando fortsätter) %s" - -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:919 msgid "log is already complete, cannot be restarted" msgstr "logg är redan komplett, kan inte startas om" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:950 msgid "unable to restart log" msgstr "kan inte starta om logg" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:352 plugins/sudoers/sudoreplay.c:358 #, c-format msgid "unable to open %s/%s" msgstr "kan inte öppna %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "saknar I/O-loggfil %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: kan inte söka framåt %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "kan inte hitta omstartspunkt [%lld, %ld] i %s/%s" -#: logsrvd/logsrvd.c:230 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 -#: logsrvd/logsrvd.c:398 logsrvd/logsrvd.c:445 logsrvd/logsrvd.c:496 -#: logsrvd/logsrvd.c:528 logsrvd/logsrvd.c:560 +#: logsrvd/logsrvd.c:290 logsrvd/logsrvd.c:353 logsrvd/logsrvd.c:394 +#: logsrvd/logsrvd.c:449 logsrvd/logsrvd.c:517 logsrvd/logsrvd.c:568 +#: logsrvd/logsrvd.c:600 logsrvd/logsrvd.c:632 msgid "state machine error" msgstr "fel i tillståndsmaskin" -#: logsrvd/logsrvd.c:239 +#: logsrvd/logsrvd.c:299 msgid "invalid AcceptMessage" msgstr "ogiltigt AcceptMessage" -#: logsrvd/logsrvd.c:250 +#: logsrvd/logsrvd.c:307 msgid "error parsing AcceptMessage" msgstr "fel vid tolkning av AcceptMessage" -#: logsrvd/logsrvd.c:257 +#: logsrvd/logsrvd.c:314 msgid "error creating I/O log" msgstr "fel vid skapande av I/O-logg" -#: logsrvd/logsrvd.c:265 +#: logsrvd/logsrvd.c:321 msgid "error logging accept event" msgstr "fel vid loggning av acceptanshändelse" -#: logsrvd/logsrvd.c:308 +#: logsrvd/logsrvd.c:362 msgid "invalid RejectMessage" msgstr "ogiltigt RejectMessage" -#: logsrvd/logsrvd.c:319 +#: logsrvd/logsrvd.c:370 msgid "error parsing RejectMessage" msgstr "fel vid tolkning av RejectMessage" -#: logsrvd/logsrvd.c:325 +#: logsrvd/logsrvd.c:376 msgid "error logging reject event" msgstr "fel vid loggning av avböjningshändelse" -#: logsrvd/logsrvd.c:430 +#: logsrvd/logsrvd.c:486 +msgid "invalid AlertMessage" +msgstr "ogiltigt AlertMessage" + +#: logsrvd/logsrvd.c:494 +msgid "error parsing AlertMessage" +msgstr "fel vid tolkning av AlertMessage" + +#: logsrvd/logsrvd.c:502 msgid "error logging alert event" msgstr "fel vid loggning av alarmhändelse" -#: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 +#: logsrvd/logsrvd.c:523 logsrvd/logsrvd.c:574 logsrvd/logsrvd.c:606 msgid "protocol error" msgstr "protokollfel" -#: logsrvd/logsrvd.c:461 +#: logsrvd/logsrvd.c:533 msgid "error writing IoBuffer" msgstr "fel vid skrivning av IoBuffer" -#: logsrvd/logsrvd.c:513 +#: logsrvd/logsrvd.c:585 msgid "error writing ChangeWindowSize" msgstr "fel vid skrivning av ChangeWindowSize" -#: logsrvd/logsrvd.c:545 +#: logsrvd/logsrvd.c:617 msgid "error writing CommandSuspend" msgstr "fel vid skrivning av CommandSuspend" -#: logsrvd/logsrvd.c:630 +#: logsrvd/logsrvd.c:702 msgid "unrecognized ClientMessage type" msgstr "okänd ClientMessage-typ" -#: logsrvd/logsrvd.c:895 +#: logsrvd/logsrvd.c:967 msgid "client message too large" msgstr "klientmeddelande för stort" -#: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 +#: logsrvd/logsrvd.c:1197 logsrvd/logsrvd.c:1205 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "kan inte ställa in TLS 1.2-krypteringssvit till %s: %s" -#: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 +#: logsrvd/logsrvd.c:1225 logsrvd/logsrvd.c:1233 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "kan inte ställa in TLS 1.3-krypteringssvit till %s: %s" -#: logsrvd/logsrvd.c:1197 +#: logsrvd/logsrvd.c:1269 #, c-format msgid "unable to get TLS server method: %s" msgstr "kan inte hämta TLS-servermetod: %s" -#: logsrvd/logsrvd.c:1202 +#: logsrvd/logsrvd.c:1274 #, c-format msgid "unable to create TLS context: %s" msgstr "kan inte skapa TLS-kontext: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1281 plugins/sudoers/log_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "kan inte läsa in certifikat %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1294 plugins/sudoers/log_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "kan inte läsa in certifikatauktoritetsbunt %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1339 plugins/sudoers/log_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "kan inte läsa in privat nyckel %s" -#: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 +#: logsrvd/logsrvd.c:1356 logsrvd/logsrvd.c:1365 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "kunde inte sätta diffie-hellman-parametrar: %s" -#: logsrvd/logsrvd.c:1306 +#: logsrvd/logsrvd.c:1378 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "kunde inte sätta minsta protokollversion till TLS 1.2: %s" -#: logsrvd/logsrvd.c:1491 +#: logsrvd/logsrvd.c:1563 msgid "unable to get remote IP addr" msgstr "kan inte hämta fjärr-IP-adress" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1591 plugins/sudoers/log_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Kan inte fästa användardata på ssl-objektet: %s" -#: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1105 logsrvd/sendlog.c:1461 logsrvd/sendlog.c:1476 -#: logsrvd/sendlog.c:1534 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/logsrvd.c:1599 logsrvd/logsrvd.c:1721 logsrvd/logsrvd.c:1823 +#: logsrvd/sendlog.c:1125 logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1496 +#: logsrvd/sendlog.c:1554 plugins/sudoers/iolog.c:956 +#: plugins/sudoers/iolog.c:1089 plugins/sudoers/iolog.c:1187 +#: plugins/sudoers/log_client.c:109 plugins/sudoers/log_client.c:324 +#: plugins/sudoers/log_client.c:340 plugins/sudoers/log_client.c:386 +#: plugins/sudoers/log_client.c:587 plugins/sudoers/log_client.c:594 +#: plugins/sudoers/log_client.c:1103 plugins/sudoers/log_client.c:1376 +#: plugins/sudoers/log_client.c:1417 plugins/sudoers/log_client.c:1425 +#: plugins/sudoers/log_client.c:1576 plugins/sudoers/log_client.c:1692 +#: plugins/sudoers/log_client.c:2007 plugins/sudoers/log_client.c:2015 +#: plugins/sudoers/sudoreplay.c:512 plugins/sudoers/sudoreplay.c:559 +#: plugins/sudoers/sudoreplay.c:791 plugins/sudoers/sudoreplay.c:903 +#: plugins/sudoers/sudoreplay.c:993 plugins/sudoers/sudoreplay.c:1008 +#: plugins/sudoers/sudoreplay.c:1015 plugins/sudoers/sudoreplay.c:1022 +#: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 +#: plugins/sudoers/sudoreplay.c:1163 msgid "unable to add event to queue" msgstr "kan inte lägga till händelse till kö" -#: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 +#: logsrvd/logsrvd.c:1775 logsrvd/logsrvd.c:2011 msgid "unable setup listen socket" msgstr "kan inte ställa in lyssningsuttag" -#: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 +#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:124 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" @@ -587,7 +645,7 @@ msgstr "" "%s - skicka sudo I/O-logg till fjärrserver\n" "\n" -#: logsrvd/logsrvd.c:1846 +#: logsrvd/logsrvd.c:1920 msgid "" "\n" "Options:\n" @@ -605,78 +663,78 @@ msgstr "" " -R, --random-drop antal procents chans att anslutningar bryts\n" " -V, --version visa versionsinformation och avsluta\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1699 +#: logsrvd/logsrvd.c:1972 logsrvd/sendlog.c:1719 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C version 1.3 eller högre krävs" -#: logsrvd/logsrvd.c:1916 +#: logsrvd/logsrvd.c:1990 #, c-format msgid "invalid random drop value: %s" msgstr "ogiltigt slumpmässigt avbrottsvärde: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1749 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1994 logsrvd/sendlog.c:1769 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: logsrvd/logsrvd_conf.c:393 +#: logsrvd/logsrvd_conf.c:331 msgid "TLS not supported" msgstr "TLS stöds inte" -#: logsrvd/logsrvd_conf.c:405 +#: logsrvd/logsrvd_conf.c:343 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 +#: logsrvd/logsrvd_conf.c:409 logsrvd/logsrvd_conf.c:653 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: inte fullständigt kvalificerad sökväg" -#: logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:767 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d omatchad ”[”: %s" -#: logsrvd/logsrvd_conf.c:840 +#: logsrvd/logsrvd_conf.c:778 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d ogiltigt konfigurationsavsnitt: %s" -#: logsrvd/logsrvd_conf.c:848 +#: logsrvd/logsrvd_conf.c:786 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d ogiltig konfigurationsrad: %s" -#: logsrvd/logsrvd_conf.c:854 +#: logsrvd/logsrvd_conf.c:792 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d avsnittsnamn förväntades: %s" -#: logsrvd/logsrvd_conf.c:868 +#: logsrvd/logsrvd_conf.c:806 #, c-format msgid "invalid value for %s: %s" msgstr "ogiltigt värde för %s: %s" -#: logsrvd/logsrvd_conf.c:876 +#: logsrvd/logsrvd_conf.c:814 #, c-format msgid "%s:%d unknown key: %s" msgstr "%s:%d okänd nyckel: %s" -#: logsrvd/logsrvd_conf.c:1032 +#: logsrvd/logsrvd_conf.c:1003 #, c-format msgid "unknown syslog facility %s" msgstr "okänd syslog-funktionalitet: %s" -#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1040 -#: logsrvd/logsrvd_conf.c:1044 +#: logsrvd/logsrvd_conf.c:1007 logsrvd/logsrvd_conf.c:1011 +#: logsrvd/logsrvd_conf.c:1015 #, c-format msgid "unknown syslog priority %s" msgstr "okänd syslog-prioritet: %s" -#: logsrvd/sendlog.c:126 +#: logsrvd/sendlog.c:127 msgid "" "\n" "Options:\n" @@ -710,145 +768,148 @@ msgstr "" " -t, --test testa granskningsserver genom att skicka valda I/O-loggmeddelanden parallellt n gånger\n" " -V, --version visa versionsinformation och avsluta\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:164 plugins/sudoers/log_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "kan inte slå upp %s:%s: %s" -#: logsrvd/sendlog.c:186 +#: logsrvd/sendlog.c:202 msgid "unable to get server IP addr" msgstr "kan inte hämta server-IP-adress" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:256 plugins/sudoers/sudoreplay.c:851 #, c-format msgid "unable to read %s/%s: %s" msgstr "kan inte läsa %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:277 plugins/sudoers/log_client.c:694 #, c-format msgid "client message too large: %zu" msgstr "klientmeddelande för stort: %zu" -#: logsrvd/sendlog.c:790 +#: logsrvd/sendlog.c:810 #, c-format msgid "%s: write buffer already in use" msgstr "%s: skrivbuffert används redan" -#: logsrvd/sendlog.c:842 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:862 plugins/sudoers/iolog.c:880 +#: plugins/sudoers/iolog.c:949 #, c-format msgid "unexpected I/O event %d" msgstr "oväntad I/O-händelse %d" -#: logsrvd/sendlog.c:888 logsrvd/sendlog.c:905 logsrvd/sendlog.c:939 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:908 logsrvd/sendlog.c:925 logsrvd/sendlog.c:959 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1386 +#: plugins/sudoers/log_client.c:1454 plugins/sudoers/log_client.c:1490 #, c-format msgid "%s: unexpected state %d" msgstr "%s: oväntat tillstånd %d" -#: logsrvd/sendlog.c:911 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:931 plugins/sudoers/log_client.c:1460 msgid "invalid ServerHello" msgstr "ogiltigt ServerHello" -#: logsrvd/sendlog.c:975 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:995 plugins/sudoers/log_client.c:1534 #, c-format msgid "error message received from server: %s" msgstr "felmeddelande mottaget från server: %s" -#: logsrvd/sendlog.c:988 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:1008 plugins/sudoers/log_client.c:1547 #, c-format msgid "abort message received from server: %s" msgstr "avbrottsmeddelande mottaget från server: %s" -#: logsrvd/sendlog.c:1007 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1027 plugins/sudoers/log_client.c:1566 msgid "unable to unpack ServerMessage" msgstr "kan inte packa upp ServerMessage" -#: logsrvd/sendlog.c:1047 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1067 plugins/sudoers/log_client.c:1597 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: oväntat type_case-värde %d" -#: logsrvd/sendlog.c:1076 +#: logsrvd/sendlog.c:1096 msgid "timeout reading from server" msgstr "tidsgräns passerad vid läsning från server" -#: logsrvd/sendlog.c:1154 +#: logsrvd/sendlog.c:1174 msgid "premature EOF" msgstr "oväntad EOF" -#: logsrvd/sendlog.c:1167 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1187 plugins/sudoers/log_client.c:1751 #, c-format msgid "server message too large: %u" msgstr "servermeddelande för långt: %u" -#: logsrvd/sendlog.c:1218 +#: logsrvd/sendlog.c:1238 msgid "timeout writing to server" msgstr "tidsgräns passerad vid skrivning till server" -#: logsrvd/sendlog.c:1437 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1457 plugins/sudoers/log_client.c:296 msgid "TLS handshake timeout occurred" msgstr "Tidsgräns för TLS-handskakning uppnådd" -#: logsrvd/sendlog.c:1456 logsrvd/sendlog.c:1471 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1476 logsrvd/sendlog.c:1491 +#: plugins/sudoers/log_client.c:318 plugins/sudoers/log_client.c:334 msgid "unable to set event" msgstr "kan inte ställa in händelse" -#: logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1485 +#: logsrvd/sendlog.c:1501 logsrvd/sendlog.c:1505 #, c-format msgid "TLS connection failed: %s" msgstr "TLS-anslutning misslyckades: %s" -#: logsrvd/sendlog.c:1518 +#: logsrvd/sendlog.c:1538 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Kan inte initiera ssl-kontext: %s" -#: logsrvd/sendlog.c:1523 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1543 plugins/sudoers/log_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Kan inte allokera ssl-objekt: %s" -#: logsrvd/sendlog.c:1528 +#: logsrvd/sendlog.c:1548 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Kan inte fästa kontakt på ssl-objektet: %s" -#: logsrvd/sendlog.c:1772 +#: logsrvd/sendlog.c:1792 msgid "both restart point and iolog ID must be specified" msgstr "både omstartspunkt och iolog-ID måste anges" -#: logsrvd/sendlog.c:1776 +#: logsrvd/sendlog.c:1796 msgid "a restart point may not be set when no I/O is sent" msgstr "en omstartspunkt får inte sättas när ingen I/O skickas" -#: logsrvd/sendlog.c:1851 +#: logsrvd/sendlog.c:1871 #, c-format msgid "exited prematurely with state %d" msgstr "avslutade oväntat i tillstånd %d" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1872 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "förfluten tid skickad till server [%lld, %ld]" -#: logsrvd/sendlog.c:1854 +#: logsrvd/sendlog.c:1874 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "incheckningspunkt mottagen från server [%lld, %ld]" -#: plugins/sudoers/alias.c:144 +#: plugins/sudoers/alias.c:148 #, c-format msgid "Alias \"%s\" already defined" msgstr "Aliaset ”%s” är redan definierat" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 -msgid "unable to fork" -msgstr "kan inte grena process" +#: plugins/sudoers/audit.c:206 plugins/sudoers/audit.c:343 +#: plugins/sudoers/log_client.c:954 plugins/sudoers/log_client.c:1002 +#: plugins/sudoers/log_client.c:1050 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:548 plugins/sudoers/policy.c:114 +msgid "unable to get time of day" +msgstr "kan inte hämta tid på dagen" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "kan inte ändra lösenord för %s" @@ -870,11 +931,11 @@ msgstr "ogiltig autentiseringstyp" msgid "unable to initialize BSD authentication" msgstr "kan inte initiera BSD-autentisering" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "ditt konto har gått ut" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "godkännande misslyckades" @@ -981,7 +1042,7 @@ msgstr "Konto utgånget eller så saknar PAM-konfigurationen ett ”account”-a msgid "PAM account management error: %s" msgstr "Fel vid hantering av PAM-konto: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "du finns inte i %s-databasen" @@ -1010,7 +1071,7 @@ msgstr "ogiltigt autentiseringshandtag för SecurID" msgid "SecurID communication failed" msgstr "SecurID-kommunikation misslyckades" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "okänt SecurID-fel" @@ -1018,7 +1079,7 @@ msgstr "okänt SecurID-fel" msgid "invalid passcode length for SecurID" msgstr "ogiltig lösenordslängd för SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "kan inte initiera SIA-session" @@ -1042,7 +1103,7 @@ msgstr "Det finns inga autentiseringsmetoder inbyggda i sudo! Om du vill inakti msgid "Unable to initialize authentication methods." msgstr "Kan inte initiera autentiseringsmetoder." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Autentiseringsmetoder:" @@ -1075,117 +1136,117 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:837 plugins/sudoers/sudoers.c:858 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "okänt uid: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1088 +#: plugins/sudoers/sudoers.c:440 plugins/sudoers/sudoers.c:1307 +#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "okänd användare: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "ordningsinkrement: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "startordning: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "ordningsutfyllnad: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s grammatikversion %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "inmatningsformat %s stöds inte" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "utmatningsformat %s stöds inte" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: in- och utmatningsfiler måste vara olika" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:178 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "kan inte initiera sudoers standardvärden" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: okänt nyckelord: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "ogiltig standardtyp: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "ogiltig undertryckningstyp: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "ogiltigt filter: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoreplay.c:1435 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "kan inte öppna %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "misslyckades med att tolka %s-filen, okänt fel" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "tolkningsfel i %s nära rad %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "tolkningsfel i %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1124 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "kan inte skriva till %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1194,7 +1255,7 @@ msgstr "" "%s - konvertera mellan sudoers filformat\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1235,675 +1296,700 @@ msgstr "" " -V, --version visa versionsinformation och avsluta" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "okänd standardpost ”%s”" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 -#: plugins/sudoers/ldap.c:502 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 +#: plugins/sudoers/ldap.c:503 msgid "unable to get GMT time" msgstr "kan inte hämta GMT-tid" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 -#: plugins/sudoers/ldap.c:508 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 +#: plugins/sudoers/ldap.c:509 msgid "unable to format timestamp" msgstr "kan inte formatera tidsstämpel" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "för många sudoers-poster, maximalt %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "miljövariabeln SUDOERS_BASE är inte satt och flaggan -b angavs inte." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:50 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Syslog-facilitet om syslog används för loggning: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:54 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Syslog-prioritet att använda när användaren lyckas med autentisering: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:58 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Syslog-prioritet att använda när användaren misslyckas med autentisering: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:62 msgid "Put OTP prompt on its own line" msgstr "Lägg OTP-prompt på en egen rad" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:66 msgid "Ignore '.' in $PATH" msgstr "Ignorera ”.” i $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:70 msgid "Always send mail when sudo is run" msgstr "Skicka alltid e-post när sudo körs" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:74 msgid "Send mail if user authentication fails" msgstr "Skicka e-post om användarens autentisering misslyckas" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:78 msgid "Send mail if the user is not in sudoers" msgstr "Skicka e-post om användaren inte finns med i sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:82 msgid "Send mail if the user is not in sudoers for this host" msgstr "Skicka e-post om användaren inte finns med i sudoers för denna värddator" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:86 msgid "Send mail if the user is not allowed to run a command" msgstr "Skicka e-post om användaren inte tillåts att köra ett kommando" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:90 msgid "Send mail if the user tries to run a command" msgstr "Skicka e-post om användaren försöker köra ett kommando" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:94 msgid "Use a separate timestamp for each user/tty combo" msgstr "Använd en separat tidsstämpel för varje användar-/tty-kombination" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:98 msgid "Lecture user the first time they run sudo" msgstr "Lär upp användaren första gången de kör sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:102 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fil som innehåller sudo-lektion: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:106 msgid "Require users to authenticate by default" msgstr "Kräv att användare autentiseras som standard" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:110 msgid "Root may run sudo" msgstr "Root får köra sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:114 msgid "Log the hostname in the (non-syslog) log file" msgstr "Logga värdnamnet i (den icke syslog-baserade) loggfilen" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:118 msgid "Log the year in the (non-syslog) log file" msgstr "Logga året i (den icke syslog-baserade) loggfilen" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:122 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Om sudo startas utan argument, starta ett skal" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:126 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Ställ in $HOME till målanvändaren när ett skal startas med -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:130 msgid "Always set $HOME to the target user's home directory" msgstr "Ställ alltid in $HOME till målanvändarens hemkatalog" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:134 msgid "Allow some information gathering to give useful error messages" msgstr "Tillåt viss informationsinsamling för att ge meningsfulla felmeddelanden" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:138 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Kräv fullständiga värdnamn i sudoers-filen" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:142 msgid "Insult the user when they enter an incorrect password" msgstr "Förolämpa användaren när de anger ett felaktigt lösenord" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:146 msgid "Only allow the user to run sudo if they have a tty" msgstr "Tillåt bara användare att köra sudo om de har en tty" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:150 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo kommer att respektera miljövariabeln EDITOR" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:154 msgid "Prompt for root's password, not the users's" msgstr "Fråga efter root-lösenordet, inte användarens" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:158 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Fråga efter runas_default-användarens lösenord, inte användarens" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:162 msgid "Prompt for the target user's password, not the users's" msgstr "Fråga efter målanvändarens lösenord, inte användarens" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:166 msgid "Apply defaults in the target user's login class if there is one" msgstr "Tillämpa standardvärden i målanvändarens inloggningsklass om det finns en" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:170 msgid "Set the LOGNAME and USER environment variables" msgstr "Ställ in miljövariablerna LOGNAME och USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:174 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Sätt bara det effektiva uid:t till målanvändaren, inte till det riktiga uid:t" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:178 msgid "Don't initialize the group vector to that of the target user" msgstr "Initiera inte gruppvektorn till den från målanvändaren" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:182 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Längden vid vilken långa loggfilsrader radbryts (0 för att inte radbryta): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:186 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Tidsgräns för autentiseringstidsstämpel: %.1f minuter" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:190 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Tidsgräns för lösenordsprompt: %.1f minuter" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:194 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Antal försök att ange ett lösenord: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:198 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask att använda eller 0777 för att använda användarens: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:202 #, c-format msgid "Path to log file: %s" msgstr "Sökväg till loggfil: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:206 #, c-format msgid "Path to mail program: %s" msgstr "Sökväg till e-postprogram: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:210 #, c-format msgid "Flags for mail program: %s" msgstr "Flaggor för e-postprogram: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:214 #, c-format msgid "Address to send mail to: %s" msgstr "Adress att skicka e-post till: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:218 #, c-format msgid "Address to send mail from: %s" msgstr "Adress att skicka e-post från: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:222 #, c-format msgid "Subject line for mail messages: %s" msgstr "Ämnesrad för e-postmeddelanden: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:226 #, c-format msgid "Incorrect password message: %s" msgstr "Meddelande vid felaktigt lösenord: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:230 #, c-format msgid "Path to lecture status dir: %s" msgstr "Sökväg till lektionsstatuskatalog: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:234 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Sökväg till katalog för autentiseringstidsstämplar: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:238 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Ägare av katalogen för autentiseringstidsstämplar: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:242 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Användare i denna grupp är undantagna från lösenords- och SÖKVÄGs-kraven: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:246 #, c-format msgid "Default password prompt: %s" msgstr "Standard lösenordsprompt: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:250 msgid "If set, passprompt will override system prompt in all cases." msgstr "Om inställt kommer passprompt att åsidosätta systemprompten i varje fall." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:254 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardanvändaren att köra kommandon som: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:258 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Värde att åsidosätta användarens $PATH med: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:262 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Sökväg till textredigerare för användning av visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:266 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "När ett lösenord ska krävas för pseudokommandot ”list”: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:270 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "När lösenord ska krävas för pseudokommandot ”verify”: %s" -#: plugins/sudoers/def_data.c:266 -msgid "Preload the dummy exec functions contained in the sudo_noexec library" -msgstr "Förinläs attrapp-exec-funktioner som finns i biblioteket sudo_noexec" +#: plugins/sudoers/def_data.c:274 +msgid "Preload the sudo_noexec library which replaces the exec functions" +msgstr "Förinläs sudo_noexec-biblioteket vilket ersätter exec-funktionerna" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:278 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Om LDAP-registret är uppe, ignorerar vi den lokala sudoers-filen" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:282 #, c-format msgid "File descriptors >= %d will be closed before executing a command" -msgstr "Fildeskriptorer >= %d kommer att stängas innan ett kommando exekveras" +msgstr "Fildeskriptorer >= %d kommer att stängas innan ett kommando körs" -#: plugins/sudoers/def_data.c:278 -msgid "If set, users may override the value of `closefrom' with the -C option" +#: plugins/sudoers/def_data.c:286 +msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Om inställt kan användare åsidosätta värdet ”closefrom” med flaggan -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:290 msgid "Allow users to set arbitrary environment variables" msgstr "Låt användare ställa in godtyckliga miljövariabler" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:294 msgid "Reset the environment to a default set of variables" msgstr "Återställ miljön till standarduppsättningen av variabler" -#: plugins/sudoers/def_data.c:290 -msgid "Environment variables to check for sanity:" -msgstr "Miljövariabler att kontrollera:" +#: plugins/sudoers/def_data.c:298 +msgid "Environment variables to check for safety:" +msgstr "Miljövariabler att säkerhetskontrollera:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:302 msgid "Environment variables to remove:" msgstr "Miljövariabler att ta bort:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:306 msgid "Environment variables to preserve:" msgstr "Miljövariabler att behålla:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:310 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-roll att använda i den nya säkerhetskontexten: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:314 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-typ att använda i den nya säkerhetskontexten: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:318 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Sökväg till den sudo-specifika miljöfilen: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:322 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Sökväg till den begränsade sudo-specifika miljöfilen: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:326 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Lokalanpassning att använda vid tolkning av sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:330 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Tillåt sudo att fråga efter ett lösenord även om det skulle vara synligt" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:334 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Ge visuell återkoppling vid lösenordsprompten när det finns användarinmatad data" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:338 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Använd snabbare matchning som är mindre exakt men inte använder filsystemet" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:342 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Umasken angiven i sudoers kommer att åsidosätta användarens, även om den är mer tillåtande" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:346 msgid "Log user's input for the command being run" msgstr "Logga användarens inmatning för kommandot som körs" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:350 msgid "Log the output of the command being run" msgstr "Logga utmatningen för kommandot som körs" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:354 msgid "Compress I/O logs using zlib" msgstr "Komprimera I/O-loggar med hjälp av zlib" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:358 msgid "Always run commands in a pseudo-tty" msgstr "Kör alltid kommandon i en pseudo-tty" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:362 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Insticksmodul för stöd för icke-Unix-grupper: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:366 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Katalog i vilken in-/utmatningsloggar lagras: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:370 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fil i vilken in-/utmatningsloggar lagras: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:374 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Lägg till en post till utmp/utmpx-filen när en pty allokeras" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:378 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Sätt användaren i utmp till runas-användaren, inte användaren som anropar" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:382 #, c-format msgid "Set of permitted privileges: %s" msgstr "Uppsättning tillåtna rättigheter: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:386 #, c-format msgid "Set of limit privileges: %s" msgstr "Uppsättning av begränsningsrättigheter: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:390 msgid "Run commands on a pty in the background" msgstr "Kör kommandon i en pty i bakgrunden" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:394 #, c-format msgid "PAM service name to use: %s" msgstr "PAM-tjänstnamn att använda: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:398 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "PAM-tjänstnamn att använda för inloggningsskal: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:402 msgid "Attempt to establish PAM credentials for the target user" msgstr "Försök att etablera PAM-inloggningsuppgifter för målanvändaren" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:406 msgid "Create a new PAM session for the command to run in" msgstr "Skapa en ny PAM-session för kommandot att köra i" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:410 msgid "Perform PAM account validation management" msgstr "Utför valideringshantering av PAM-konto" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:414 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Största sekvensnummer i I/O-logg: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:418 msgid "Enable sudoers netgroup support" msgstr "Aktivera sudoers nätgruppsstöd" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:422 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Kontrollera överordnade kataloger för skrivbarhet när filer redigeras med sudoedit" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:426 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Följ symboliska länkar när filer redigeras med sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:430 msgid "Query the group plugin for unknown system groups" msgstr "Fråga gruppinsticksmodulen efter okända systemgrupper" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:434 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Matcha nätgrupper baserat på hela tupeln: användare, värd och domän" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:438 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Tillåt kommandon att köras även om sudo inte kan skriva till granskningsloggen" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:442 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Tillåt kommandon att köras även om sudo inte kan skriva I/O-loggen" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:446 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Tillåt kommandon att köras även om sudo inte kan skriva till loggfilen" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:450 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Gör namnupplösning för grupper i sudoers och matcha efter grupp-ID, inte namnet" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:454 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Loggposter större än detta värde kommer att delas upp i flera syslog-meddelanden: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:458 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Användare som kommer att äga I/O-loggfilerna: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:462 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupp som kommer att äga I/O-loggfilerna: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:466 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Filrättigheter att använda för I/O-loggfilerna: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:470 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" -msgstr "Exekvera kommandon efter fildeskriptor istället för efter sökväg: %s" +msgstr "Kör kommandon efter fildeskriptor istället för efter sökväg: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:474 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Hoppa över okända Defaults-poster i sudoers istället för att skriva ut en varning" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:478 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Tid i sekunder efter vilka kommandot kommer att avslutas: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:482 msgid "Allow the user to specify a timeout on the command line" msgstr "Tillåt användaren att ange en tidsgräns på kommandoraden" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:486 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Spola ut I/O-loggdata till disk omedelbart istället för att buffra det" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:490 msgid "Include the process ID when logging via syslog" msgstr "Inkludera process-ID:t vid loggning via syslog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:494 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Typ av post för autentiseringstidsstämplar: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:498 #, c-format msgid "Authentication failure message: %s" msgstr "Autentiseringsfelsmeddelande: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:502 msgid "Ignore case when matching user names" msgstr "Matcha användarnamn skiftlägesokänsligt" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:506 msgid "Ignore case when matching group names" msgstr "Matcha gruppnamn skiftlägesokänsligt" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:510 msgid "Log when a command is allowed by sudoers" msgstr "Logga när ett kommando tillåts av sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:514 msgid "Log when a command is denied by sudoers" msgstr "Logga när ett kommando nekas av sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:518 msgid "Sudo log server(s) to connect to with optional port" msgstr "Sudo-loggservrar att ansluta till med valfri port" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:522 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Tidsgräns för sudo-loggserver i sekunder: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:526 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Aktivera SO_KEEPALIVE-kontaktalternativ på kontakten ansluten till loggservern" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:530 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Sökväg till granskningsserverns CA-buntfil: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:534 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Sökväg till sudoers certifikatfil: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:538 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Sökväg till sudoers privata nyckelfil: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:542 msgid "Verify that the log server's certificate is valid" msgstr "Verifiera att loggserverns certifikatfil är giltig" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:546 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Tillåt användningen av okänd runas-användare och/eller grupp-ID" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:550 msgid "Only permit running commands as a user with a valid shell" msgstr "Tillåt endast körning av kommandon som en användare med ett giltigt skal" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:554 msgid "Set the pam remote user to the user running sudo" msgstr "Ställ in pam-fjärranvändaren för användaren som kör sudo" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:558 msgid "Set the pam remote host to the local host name" msgstr "Ställ in pam-fjärrvärden till det lokala värdnamnet" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:562 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d okänd standardpost ”%s”" +msgid "Working directory to change to before executing the command: %s" +msgstr "Arbetskatalog att ändra till före körning av kommandot: %s" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:566 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: okänd standardpost ”%s”" +msgid "Root directory to change to before executing the command: %s" +msgstr "Rotkatalog att ändra till innan kommandot körs: %s" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/def_data.c:570 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d inget värde angivet för ”%s”" +msgid "The format of logs to produce: %s" +msgstr "Formatet för loggarna som ska produceras: %s" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:185 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: inget värde angivet för ”%s”" +msgid "%s:%d:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d:%d: okänd standardpost ”%s”" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:188 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d värden för ”%s” måste börja med ett ”/”" +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: okänd standardpost ”%s”" -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: värden för ”%s” måste börja med ett ”/”" +msgid "%s:%d:%d: no value specified for \"%s\"" +msgstr "%s:%d:%d: inget värde angivet för ”%s”" + +#: plugins/sudoers/defaults.c:237 +#, c-format +msgid "%s: no value specified for \"%s\"" +msgstr "%s: inget värde angivet för ”%s”" -#: plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d flaggan ”%s” tar inte emot något värde" +msgid "%s:%d:%d: option \"%s\" does not take a value" +msgstr "%s:%d:%d: flaggan ”%s” tar inte emot något värde" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:278 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: flaggan ”%s” tar inte emot något värde" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:303 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d ogiltig standardtyp 0x%x för flagga ”%s”" +msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d:%d: ogiltig standardtyp 0x%x för flagga ”%s”" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:306 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: ogiltig standardtyp 0x%x för flagga ”%s”" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:316 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d värdet ”%s” är ogiltigt för flaggan ”%s”" +msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d:%d: värdet ”%s” är ogiltigt för flaggan ”%s”" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:319 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: värdet ”%s” är ogiltigt för flaggan ”%s”" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1030 +#, c-format +msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d:%d: värden för ”%s” måste börja med ett ”/”, ”~” eller ”*”" + +#: plugins/sudoers/defaults.c:1034 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: värden för ”%s” måste börja med ett ”/”, ”~” eller ”*”" + +#: plugins/sudoers/defaults.c:1045 +#, c-format +msgid "%s:%d:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d:%d: värden för ”%s” måste börja med ett ”/”" + +#: plugins/sudoers/defaults.c:1049 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: värden för ”%s” måste börja med ett ”/”" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: trasig envp, längd stämmer inte" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "kan inte återuppbygga miljön" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "du får inte lov att ställa in följande miljövariabler: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "tolkningsfel i %s nära rad %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "tolkningsfel i %s" @@ -1928,7 +2014,7 @@ msgstr "%s måste ägas av uid %d" msgid "%s must only be writable by owner" msgstr "%s får endast vara skrivbar av ägaren" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:571 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:569 #, c-format msgid "unable to load %s: %s" msgstr "kan inte läsa in %s: %s" @@ -1957,122 +2043,78 @@ msgstr "kan inte tolka nätmask ”%s”" msgid "Local IP address and netmask pairs:\n" msgstr "Lokala IP-adress- och nätmaskpar:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:445 +#: plugins/sudoers/sudoers.c:1341 plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "okänd grupp: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:622 +msgid "unable to update sequence file" +msgstr "kan inte uppdatera sekvensfil" + +#: plugins/sudoers/iolog.c:653 plugins/sudoers/iolog.c:841 +#: plugins/sudoers/iolog.c:994 plugins/sudoers/iolog.c:1001 +#: plugins/sudoers/iolog.c:1122 plugins/sudoers/iolog.c:1129 +#: plugins/sudoers/iolog.c:1228 plugins/sudoers/iolog.c:1235 #, c-format msgid "unable to write to I/O log file: %s" msgstr "kan inte skriva till I/O-loggfil: %s" -#: plugins/sudoers/iolog.c:566 -msgid "unable to update sequence file" -msgstr "kan inte uppdatera sekvensfil" - -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:661 #, c-format msgid "unable to create %s/%s" msgstr "kan inte skapa %s/%s" -#: plugins/sudoers/iolog.c:631 -msgid "unable to connect to log server" -msgstr "kan inte ansluta till loggserver" - -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:886 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: internt fel, I/O-loggfil för händelse %d inte öppen" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:979 plugins/sudoers/iolog.c:1107 +#: plugins/sudoers/iolog.c:1212 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "kan inte läsa klockan" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1204 plugins/sudoers/log_client.c:1193 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: internt fel, ogiltig signal %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 -msgid "error in event loop" -msgstr "fel i händelseloop" - -#: plugins/sudoers/iolog_client.c:194 -#, c-format -msgid "Creation of new SSL_CTX object failed: %s" -msgstr "Skapande av nytt SSL_CTX-objekt misslyckades: %s" - -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 -#, c-format -msgid "TLS connection to %s:%s failed: %s" -msgstr "TLS-anslutning till %s:%s misslyckades: %s" - -#: plugins/sudoers/iolog_client.c:496 -msgid "TLS initialization was unsuccessful" -msgstr "TLS-initiering misslyckades" - -#: plugins/sudoers/iolog_client.c:505 -msgid "TLS handshake was unsuccessful" -msgstr "TLS-handskakning misslyckades" - -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 -msgid "unable to get time of day" -msgstr "kan inte hämta tid på dagen" - -#: plugins/sudoers/iolog_client.c:986 -#, c-format -msgid "%s: internal error, invalid exit status %d" -msgstr "%s: internt fel, ogiltig avslutningskod %d" - -#: plugins/sudoers/iolog_client.c:1523 -msgid "lost connection to log server" -msgstr "förlorade kontakten med loggservern" - -#: plugins/sudoers/iolog_client.c:1600 -msgid "missing write buffer" -msgstr "saknar skrivbuffert" - -#: plugins/sudoers/ldap.c:176 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 msgid "starttls not supported when using ldaps" msgstr "starttls stöds inte när ldaps används" -#: plugins/sudoers/ldap.c:247 +#: plugins/sudoers/ldap.c:248 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "kan inte initiera SSL-certifikat och nyckeldatabas: %s" -#: plugins/sudoers/ldap.c:250 +#: plugins/sudoers/ldap.c:251 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "du måste ställa in TLS_CERT i %s för att använda SSL" -#: plugins/sudoers/ldap.c:1658 +#: plugins/sudoers/ldap.c:1660 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kan inte initiera LDAP: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1697 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls angivet men LDAP-bibliotek har inte stöd för ldap_start_tls_s() eller ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1834 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ogiltigt sudoOrder-attribut: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: port är för stor" +#, c-format +msgid "%s: port too large" +msgstr "%s: port för stor" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2083,7 +2125,7 @@ msgstr "LDAP-uri-typ stöds ej: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "kan inte blanda ldap- och ldaps-URI:er" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:553 plugins/sudoers/ldap_util.c:555 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "kan inte konvertera sudoOption: %s%s%s" @@ -2092,66 +2134,91 @@ msgstr "kan inte konvertera sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "kan inte öppna granskningssystem" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "kan inte skicka granskningsmeddelande" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/log_client.c:113 plugins/sudoers/log_client.c:391 +#: plugins/sudoers/log_client.c:1431 plugins/sudoers/log_client.c:2023 +msgid "error in event loop" +msgstr "fel i händelseloop" + +#: plugins/sudoers/log_client.c:193 #, c-format -msgid "unable to open log file: %s" -msgstr "kan inte öppna loggfil: %s" +msgid "Creation of new SSL_CTX object failed: %s" +msgstr "Skapande av nytt SSL_CTX-objekt misslyckades: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/log_client.c:345 plugins/sudoers/log_client.c:350 #, c-format -msgid "unable to lock log file: %s" -msgstr "kan inte låsa loggfil: %s" +msgid "TLS connection to %s:%s failed: %s" +msgstr "TLS-anslutning till %s:%s misslyckades: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/log_client.c:519 +msgid "TLS initialization was unsuccessful" +msgstr "TLS-initiering misslyckades" + +#: plugins/sudoers/log_client.c:528 +msgid "TLS handshake was unsuccessful" +msgstr "TLS-handskakning misslyckades" + +#: plugins/sudoers/log_client.c:1202 #, c-format -msgid "unable to write log file: %s" -msgstr "kan inte skriva till loggfil: %s" +msgid "%s: internal error, invalid exit status %d" +msgstr "%s: internt fel, ogiltig avslutningskod %d" + +#: plugins/sudoers/log_client.c:1738 +msgid "lost connection to log server" +msgstr "förlorade kontakten med loggservern" + +#: plugins/sudoers/log_client.c:1815 +msgid "missing write buffer" +msgstr "saknar skrivbuffert" + +#: plugins/sudoers/log_client.c:1964 +msgid "unable to connect to log server" +msgstr "kan inte ansluta till loggserver" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:244 msgid "user NOT in sudoers" msgstr "användare finns INTE i sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:246 msgid "user NOT authorized on host" msgstr "användaren är INTE auktoriserad på värddatorn" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:248 msgid "command not allowed" msgstr "kommandot tillåts inte" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:269 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s finns inte i filen sudoers. Denna incident kommer att rapporteras.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:272 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s tillåts inte att köra sudo på %s. Denna incident kommer att rapporteras.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:276 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Tyvärr, användaren %s får inte köra sudo på %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:279 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Tyvärr, användaren %s tillåts inte att köra ”%s%s%s” som %s%s%s på %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:316 plugins/sudoers/sudoers.c:583 +#: plugins/sudoers/sudoers.c:585 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:739 +#: plugins/sudoers/sudoers.c:741 #, c-format msgid "%s: command not found" msgstr "%s: kommandot hittades inte" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:579 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2160,47 +2227,37 @@ msgstr "" "ignorerar ”%s” som hittades i ”.”\n" "Använd ”sudo ./%s” om detta är den ”%s” som du vill köra." -#: plugins/sudoers/logging.c:354 -msgid "authentication failure" -msgstr "autentiseringsfel" - -#: plugins/sudoers/logging.c:380 -msgid "a password is required" -msgstr "ett lösenord krävs" - -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:337 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u felaktigt lösenordsförsök" msgstr[1] "%u felaktiga lösenordsförsök" -#: plugins/sudoers/logging.c:714 -#, c-format -msgid "unable to dup stdin: %m" -msgstr "kan inte duplicera stdin: %m" +#: plugins/sudoers/logging.c:393 +msgid "authentication failure" +msgstr "autentiseringsfel" -#: plugins/sudoers/logging.c:751 -#, c-format -msgid "unable to execute %s: %m" -msgstr "kan inte köra %s: %m" +#: plugins/sudoers/logging.c:433 plugins/sudoers/logging.c:453 +msgid "a password is required" +msgstr "ett lösenord krävs" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:729 #, c-format -msgid "unable to fork: %m" -msgstr "kan inte grena process: %m" +msgid "unable to open log file: %s" +msgstr "kan inte öppna loggfil: %s" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:762 #, c-format -msgid "unable to open pipe: %m" -msgstr "kan inte öppna rör: %m" +msgid "unable to write log file: %s" +msgstr "kan inte skriva till loggfil: %s" -#: plugins/sudoers/match_digest.c:116 +#: plugins/sudoers/match_digest.c:129 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "kontrollsumma för %s (%s) är inte på %s-form" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2209,8 +2266,7 @@ msgstr "" "\n" "LDAP-roll: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2218,42 +2274,38 @@ msgstr "" "\n" "Sudoers-post:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " KörSomAnvändare: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " KörSomGrupper: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Flaggor: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Kommandon:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Matchande standardposter för %s på %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas- och kommando-specifika standardvärden för %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Användare %s får köra följande kommandon på %s:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Användaren %s tillåts inte att köra sudo på %s.\n" @@ -2268,48 +2320,58 @@ msgstr "hoppar över ofullständig sudoRole: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "ogiltigt LDIF-attribut: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "ogiltigt %.*s inställt av sudo-framände" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:310 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "kan inte tolka nätverksadresslista" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:455 msgid "user name not set by sudo front-end" msgstr "användarnamn inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:459 msgid "user-ID not set by sudo front-end" msgstr "användar-ID inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:463 msgid "group-ID not set by sudo front-end" msgstr "grupp-ID inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:467 msgid "host name not set by sudo front-end" msgstr "värdnamn inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:643 +#, c-format +msgid "invalid working directory: %s" +msgstr "ogiltig arbetskatalog: %s" + +#: plugins/sudoers/policy.c:811 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "ogiltig chroot-katalog: %s" + +#: plugins/sudoers/policy.c:947 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "kan inte köra %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1111 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers policyinsticksmodul version %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1113 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-filgrammatik version %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "" "\n" @@ -2318,86 +2380,86 @@ msgstr "" "\n" "Sökväg till sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1120 #, c-format msgid "nsswitch path: %s\n" msgstr "Sökväg till nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1122 #, c-format msgid "ldap.conf path: %s\n" msgstr "Sökväg till ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1123 #, c-format msgid "ldap.secret path: %s\n" msgstr "Sökväg till ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1156 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "kan inte registrera krok av typ %d (version %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "kan inte cacha uid %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "kan inte cacha uid %u, finns redan" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "kan inte cacha användare %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "kan inte cacha användare %s, finns redan" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "kan inte cacha gid %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "kan inte cacha gid %u, finns redan" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "kan inte cacha grupp %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "kan inte cacha grupp %s, finns redan" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "kan inte cacha grupplista för %s, finns redan" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "kan inte cacha grupplista för %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "kan inte tolka grupper för %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "kan inte tolka gids för %s" @@ -2461,239 +2523,259 @@ msgstr "trunkerad granskningssökväg user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "trunkerad granskningssökväg argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:572 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "kan inte initiera SSS-källa. Är SSSD installerat på din maskin?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:580 plugins/sudoers/sssd.c:589 +#: plugins/sudoers/sssd.c:598 plugins/sudoers/sssd.c:607 +#: plugins/sudoers/sssd.c:616 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "kan inte hitta symbol ”%s” i %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:214 plugins/sudoers/sudoers.c:1010 msgid "problem with defaults entries" msgstr "problem med standardposter" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:218 msgid "no valid sudoers sources found, quitting" msgstr "inga giltiga sudoers-källor hittades, avslutar" -#: plugins/sudoers/sudoers.c:297 +#: plugins/sudoers/sudoers.c:292 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "användare inte tillåten att ändra rotkatalog till %s" + +#: plugins/sudoers/sudoers.c:294 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "du tillåts inte att använda flaggan -R med %s" + +#: plugins/sudoers/sudoers.c:319 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "användare inte tillåten att ändra katalog till %s" + +#: plugins/sudoers/sudoers.c:320 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "du tillåts inte att använda flaggan -D med %s" + +#: plugins/sudoers/sudoers.c:351 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers anger att root inte tillåts att använda sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:411 msgid "user not allowed to override closefrom limit" msgstr "användare inte tillåten att åsidosätta closefrom-begränsning" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:412 msgid "you are not permitted to use the -C option" msgstr "du tillåts inte att använda flaggan -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:472 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tidsstämpelägare (%s): Det finns ingen sådan användare" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:487 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:488 msgid "sorry, you must have a tty to run sudo" msgstr "tyvärr, du måste ha en tty för att köra sudo" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:495 #, c-format msgid "invalid shell for user %s: %s" msgstr "ogiltigt skal för användare %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:578 msgid "command in current directory" msgstr "kommando i aktuell katalog" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:597 msgid "user not allowed to set a command timeout" msgstr "användare inte tillåten att ställa in en tidsgräns för kommandon" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:599 msgid "sorry, you are not allowed set a command timeout" msgstr "tyvärr, du tillåts inte att ställa in en tidsgräns för kommandon" -#: plugins/sudoers/sudoers.c:534 -msgid "user not allowed to set a preserve the environment" -msgstr "användare inte tillåten att ställa in att behålla miljön" +#: plugins/sudoers/sudoers.c:607 +msgid "user not allowed to preserve the environment" +msgstr "användare inte tillåten att behålla miljön" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:609 msgid "sorry, you are not allowed to preserve the environment" msgstr "tyvärr, du tillåts inte att behålla miljövariabler" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:945 msgid "command too long" msgstr "kommandot för långt" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1003 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit behöver inte köras via sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1057 plugins/sudoers/sudoreplay.c:1547 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "kan inte läsa %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1082 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "kan inte ta status på %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1086 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s är inte en vanlig fil" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/timestamp.c:252 toke.l:1112 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s ägs av uid %u, ska vara %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1094 toke.l:1117 #, c-format msgid "%s is world writable" msgstr "%s är skrivbar för alla" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1098 toke.l:1120 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s ägs av gid %u, ska vara %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1131 #, c-format msgid "only root can use \"-c %s\"" msgstr "endast root kan använda ”-c %s”" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1150 #, c-format msgid "unknown login class: %s" msgstr "okänd inloggningsklass: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1235 plugins/sudoers/sudoers.c:1250 #, c-format msgid "unable to resolve host %s" msgstr "kan inte slå upp värddatorn %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:257 #, c-format msgid "invalid filter option: %s" msgstr "ogiltig filterflagga: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:273 #, c-format msgid "invalid max wait: %s" msgstr "ogiltig största väntan: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:296 #, c-format msgid "invalid speed factor: %s" msgstr "ogiltig hastighetsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:332 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:337 #, c-format msgid "%s/timing: %s" msgstr "%s/tidsmätning: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:341 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:365 #, c-format msgid "Replaying sudo session: %s" msgstr "Spelar upp sudo-session: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:627 msgid "unable to set tty to raw mode" msgstr "kan inte ställa in tty i råläge" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:678 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Varning: din terminal är för liten för att korrekt spela upp loggen.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:679 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Logg-geometri är %d x %d, din terminals geometri är %d x %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:707 msgid "Replay finished, press any key to restore the terminal." msgstr "Uppspelning avslutad, tryck på en tangent för att återställa terminalen." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1197 plugins/sudoers/sudoreplay.c:1227 #, c-format msgid "ambiguous expression \"%s\"" msgstr "tvetydigt uttryck ”%s”" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1249 msgid "unmatched ')' in expression" msgstr "omatchat ”)” i uttryck" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1253 #, c-format msgid "unknown search term \"%s\"" msgstr "okänt sökvillkor ”%s”" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1268 #, c-format msgid "%s requires an argument" msgstr "%s kräver ett argument" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1271 plugins/sudoers/sudoreplay.c:1523 #, c-format msgid "invalid regular expression: %s" msgstr "ogiltigt reguljärt uttryck: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1276 #, c-format msgid "could not parse date \"%s\"" msgstr "kunde inte tolka datumet ”%s”" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1285 msgid "unmatched '(' in expression" msgstr "omatchat ”(” i uttryck" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1287 msgid "illegal trailing \"or\"" msgstr "ogiltigt avslutande ”or”" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1289 msgid "illegal trailing \"!\"" msgstr "ogiltigt efterföljande ”!”" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1347 #, c-format msgid "unknown search type %d" msgstr "okänd söktyp %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1614 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "användning: %s [-hnRS] [-d kat] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1617 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "användning: %s [-h] [-d kat] -l [sökuttryck]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1626 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2702,7 +2784,7 @@ msgstr "" "%s - spela upp loggar från sudo-session\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1628 msgid "" "\n" "Options:\n" @@ -2730,11 +2812,11 @@ msgstr "" " -s, --speed=num påskynda eller fördröj utmatning\n" " -V, --version visa versionsinformation och avsluta" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tvärd omatchad" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2742,7 +2824,7 @@ msgstr "" "\n" "Kommandot tillåts" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2750,7 +2832,7 @@ msgstr "" "\n" "Kommandot nekades" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2795,90 +2877,90 @@ msgstr "sudoedit ska inte anges med en sökväg" msgid "the -x option will be removed in a future release" msgstr "flaggan -x kommer att tas bort i en framtida version" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "överväg att använda verktyget cvtsudoers istället" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "tryck på retur för att redigera %s: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "angiven redigerare (%s) finns inte" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "ingen textredigerare hittad (sökväg för textredigerare = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "skrivfel" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "kan inte hämta filinformation för temporärfil (%s), %s oförändrad" # sebras: not an exact translation, but I think it captures the meaning of the original text. -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "temporärfil tom (%s), %s oförändrad" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redigeraren (%s) misslyckades, %s är oförändrad" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s oförändrad" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "kan inte återöppna temporärfil (%s), %s är oförändrad." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "kan inte tolka temporärfil (%s), okänt fel" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "internt fel, kan inte hitta %s i listan!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kan inte ställa in (uid, gid) för %s till (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s och %s finns inte på samma filsystem, använder mv för att byta namn" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "kommandot misslyckades: ”%s %s %s”, %s är oförändrad" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "fel vid namnbyte för %s, %s är oförändrad" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Nu då? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2890,66 +2972,66 @@ msgstr "" " avsluta (x) utan att spara ändringar i sudoers-filen\n" " Avsluta (Q) och spara ändringar i sudoers-filen (FARLIGT!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "kan inte köra %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: felaktig ägare (uid, gid) ska vara (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: felaktiga rättigheter, bör vara läge 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: tolkad OK\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s är upptagen, försök igen senare" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "kan inte låsa %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Redigera ändå? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1091 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Fel: %s:%d cykel i %s ”%s”" +msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +msgstr "Fel: %s:%d:%d: cykel i %s ”%s”" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1092 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Varning: %s:%d cykel i %s ”%s”" +msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +msgstr "Varning: %s:%d:%d: cykel i %s ”%s”" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1096 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Fel: %s:%d %s ”%s” refererad till men inte definierad" +msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "Fel: %s:%d:%d: %s ”%s” refererad till men inte definierad" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1097 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Varning: %s:%d %s ”%s” refererad till men inte definierad" +msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" +msgstr "Varning: %s:%d:%d: %s ”%s” refererad till men inte definierad" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1188 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Varning: %s:%d oanvänd %s ”%s”" +msgid "Warning: %s:%d:%d: unused %s \"%s\"" +msgstr "Varning: %s:%d:%d: oanvänd %s ”%s”" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1303 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2958,7 +3040,7 @@ msgstr "" "%s - redigera sudoers-filen på ett säkert sätt\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1305 msgid "" "\n" "Options:\n" @@ -2978,10 +3060,43 @@ msgstr "" " -s, --strict strikt syntaxkontroll\n" " -V, --version visa versionsinformation och avsluta\n" -#: toke.l:1032 +#: toke.l:179 +msgid "empty string" +msgstr "tom sträng" + +#: toke.l:189 toke.l:491 +msgid "empty group" +msgstr "tom grupp" + +#: toke.l:197 toke.l:489 +msgid "empty netgroup" +msgstr "tom nätgrupp" + +#: toke.l:293 toke.l:305 toke.l:317 toke.l:333 toke.l:352 toke.l:392 +msgid "invalid line continuation" +msgstr "ogiltig radfortsättning" + +#: toke.l:528 toke.l:540 +msgid "invalid IPv6 address" +msgstr "ogiltig IPv6-adress" + +#: toke.l:764 +msgid "unexpected line break in string" +msgstr "oväntad radbrytning i sträng" + +#: toke.l:1084 msgid "too many levels of includes" msgstr "för många nivåer av inkluderingar" +#~ msgid "Preload the dummy exec functions contained in the sudo_noexec library" +#~ msgstr "Förinläs attrapp-exec-funktioner som finns i biblioteket sudo_noexec" + +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: port är för stor" + +#~ msgid "unable to lock log file: %s" +#~ msgstr "kan inte låsa loggfil: %s" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "SSL_connect misslyckades: ssl_error=%d, stack=%s\n" diff --git a/po/ko.mo b/po/ko.mo index f9db721dadcd7442387f3afc4e243fa3f167d2a6..d10c0650ff68d5d2261570865fbe81a8642005b7 100644 GIT binary patch delta 4804 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 J_5N?R`6pFamvjIC delta 4322 zcmY+`4|Gm-9LMqR$T0SYZ8pt#EQ?_qTQ)}aB#ce1GBFbk6{ci0e91PUv4hj;bWVQ`4yXL-6um$9-u~U=b6>xEpZnbV`+a}E`&e^*$ktaw z0>?UDR%2|9qzf4yYSuc$Y<7E{HG3q=EDV=pcYFeS;co1J$MH%$jWHO{$$prM@i-Yf z<9xgV*P^c5g&oZT_A!kfoH&Y?V++n^VIryzMc4*Qk-ph1%)z5GL% zn~lae)Nv_BU^!OeQjF#K)`IS6WbxP)b5NBiMs;W&Iz7jM9Ph#eJc*eY7VA0`6FDwN z4d^lKiMwzS9>r`drnkE9T1?~lR!4)*STp+Y6eeR-oLLfPA>XxP)C1P474wjegKz-OL{;h; z)Z7PA*B?ifI)?J3;Ski6mZ1+blQR9sMnl`s=|Fe5z87L_V{7Q5}06b;AbK zh)&|wn9Pt`ZJJRJY)|*q z)4|vur{PenL8@q9d!9lDZ(%$|Q_>UFfosr*6OdxsLev9mkgwQ2%*Vhn8oF@`D@KcK z25Ll0kbkzG9qY*UA`9M{Jby%8_b2+W6H8vNS2k*@Mxq|L7&U;c$fN8K>N)3;H#J}p ztPoy(>yBD1ne5c#V$_8ds1dC|bz}?b!EYh|tcji0$OZIa3Qtw(^HCL?hpO0S)c5zG z?*Ao5>HR-JLnXP0bjo~uOCueDD(ytn>Ya~T8_%I0(11St1$E>0yc)Vs52PqI67{ys zVyEv_Bg@BjpgMjKyYYNGOG7v4#8cGMG*m@KBOh4_suIgkYh|N%z7aL&Cs7q@!-pzy zH`EjiLoMP3s41vLb^IGt2U>CvP>)k+a1SfMNUZRz!XX^jphol+YH^ZxuO?VgwVoHX)hNfmve^#L_;)LdCHRfX-M&dct zVr$K>(Ps3arl!L7>Co5zS?3`hwD+_3;gUg zVmX`32|sGiDm@#Jd)h^uidi}C$eu*{YI{+O?lfvq#SC^wmV^2~V?Jt)RG|jC53BGe zEYbTvhdS`)*(W$1&!9Rop5Iw@WIZy?b{JK<)|{lzR)Bt7hAMF*j>K@jtm}$UmD+%p z<1zH(1>{o8;h>M+|AjQ@jMXCR!@fh6D*76C5$2&vRe>7uvv@roMtv`Nn7jH*@j8yH zQ0JSl7$fP;Se%Jk18<`bPoVSvf5dS2J-!z+zoX;54DJv zqB`~tG7I)AssrhiL)Vqz6-`|1yUXypMzrQqfNtlddQ59H-s_?ea)L(ORloQkOJZj{(34LuW7v*<(&OBACIu~{QJk)jDJ&&NKAhgi!*f7*om7%8SCG3me2WaR9QT%+# zQRv4?R0Z~X=YPdCj{Dx|&S?qi1~sS=y@$Q=9O^+yH@S;!3aX=(s0zM;nyT+m0|~Tb zY3g-I!D%=HhvBElGcB^n9oem@lCMNnrVjmh1miGaoco$(BFn_C#|&JD1Mq<7CCue` zz|GEm0#-pIgcG`W4*7s|B`=am1M>9wE7NYY3;k_J*w@`<(?L}k_XI?;Q5H__bwck_D(5uPnj zD}Nn%h6H-E)23Cq-)Xt?{4niV0~BpPqe-2;`}fz_u3+!>?PIY3Bq#v zXB$szGkHqC|JqiNHl&jd*t7s^oR+&|%{W_Y_H9Wn*+^QEmPFe;;!}g|ZSojdqyx6w z$poT>t4#|w&uLZXM1}>X(%j`7@`p3(mmrZm?VZcQGI9&4BzjL4l5EnB^d~!sUQlgI zT%12S)T|>K=v#!}TxUyS-^FdZHQ>c{wjJ!#$pSKztRZ8_yJRsbAn%Yj$XvoNjq?le z5OyHLNsv59{@!}gC@0&=R&q1xOG-(ty0(mlwrDcgY5ltkr+FW_l3YeY$^B$CsUq4s zlPIUc!J|>LS_J1t_YT<^`+I0G yyvv>rEi=leRezK^s$IYA)c)DNjLe+=nZbm#;#R@>%qbzkMFak58(f|HS^Qr>J\n" "Language-Team: Korean \n" "Language: ko\n" @@ -52,17 +52,17 @@ msgstr "레지스트리를 복원할 수 없습니다" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -85,20 +85,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "메모리를 할당할 수 없습니다" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "%s을(를) 열 수 없습니다" @@ -175,12 +175,22 @@ msgstr "%s에 모두가 기록할 수 있습니다" msgid "%s is group writable" msgstr "%s에 그룹 구성원이 기록할 수 있습니다" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: %s 문자열을 0 바이트로 자릅니까? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "%s 덮어쓰지 않음" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "%s을(를) 읽을 수 없습니다" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "%s에 기록할 수 없습니다" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "처리 tty를 설정할 수 없습니다" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "파이프를 만들 수 없습니다" @@ -271,7 +281,7 @@ msgid "unable to receive message from parent" msgstr "상위로부터 메시지를 받을 수 없습니다" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "포킹할 수 없습니다" @@ -279,7 +289,7 @@ msgstr "포킹할 수 없습니다" msgid "unable to restore tty label" msgstr "tty 레이블을 복원할 수 없습니다" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "%s을(를) 실행할 수 없습니다" @@ -330,7 +340,7 @@ msgstr "감사 프로세스에 메시지를 보낼 수 없습니다" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "%s의 %d번째 줄에서 \"%s\" 플러그인을 불러오는 중 오류" @@ -375,67 +385,67 @@ msgstr "%3$s에 주 버전이(%2$d을(를) 기대했지만) %1$d인 비호환 msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "%2$s의 %3$d번째 줄에서 \"%1$s\" 정책 플러그인 무시" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "단일 정책 플러그인을 지정하십시오" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "%2$s에 알 수 없는 정책 유형 %1$d이(가) 있습니다" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "%s 정책 플러그인에 check_policy 메서드가 없습니다" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "내부 오류, %s 오버플로우" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "잘못된 환경 변수 이름: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C의 인자 값은 3보다 크거나 같아야 합니다" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "-i 와 -s 옵션을 함께 지정할 수 없습니다" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "-i 와 -E 옵션을 함께 지정할 수 없습니다" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "-E 옵션은 편집 모드에서 유효하지 않습니다" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "편집 모드에서 환경 변수를 지정할 수 없습니다" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "-U 옵션은 -l 옵션만 함께 사용할 수 있습니다" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "-A 와 -S 옵션을 함께 사용할 수 없습니다" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "이 플랫폼에서 sudoedit를 지원하지 않습니다" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "-e, -h, -i, -K, -l, -s, -v, -V 옵션 중 하나를 지정해야 합니다" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -444,7 +454,7 @@ msgstr "" "%s - 다른 사용자 권한으로 파일을 편집합니다\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -453,8 +463,7 @@ msgstr "" "%s - 다른 사용자 권한으로 명령을 실행합니다\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -462,123 +471,131 @@ msgstr "" "\n" "옵션:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "암호 질문에 보조 프로그램 활용" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "지정 BSD 인증 형식 활용" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "백그라운드에서 명령 실행" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "프롬프트를 띄울 때 알림 소리를 냅니다" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "num 보다 크거나 같은 모든 파일 서술자를 닫습니다" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "지정 BSD 로그인 클래스로 명령을 실행합니다" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "명령 실행 전 작업 디렉터리를 바꿉니다" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "명령을 실행할 때 사용자 환경을 유지합니다" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "지정 환경 변수 값을 유지합니다" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "명령을 실행하는 대신 파일을 편집합니다" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "지정 그룹 이름 또는 ID로 명령을 실행합니다" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "대상 사용자의 내 폴더에 HOME 변수를 지정합니다" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "도움말을 보여주고 빠져나갑니다" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "(플러그인에서 지원한다면)호스트에서 명령을 실행합니다" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "대상 사용자 자격으로 셸에 로그인하며 명령을 지정할 수 있습니다" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "타임스탬프 파일을 완전히 제거합니다" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "타임스탬프 파일을 초기화합니다" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "사용자 권한을 보여주거나 지정 명령을 확인합니다. 긴 형식으로 보려면 옵션을 두 번 사용하십시오" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "비대화형 모드. 프롬프트를 사용하지 않습니다" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "대상을 설정하는 대신 그룹 벡터를 유지합니다" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "지정 암호 프롬프트를 활용합니다" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "명령 실행 전 루트 디렉터리를 바꿉니다" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "지정 역할을 지닌 SELinux 보안 컨텍스트를 만듭니다" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "표준 입력으로 암호를 입력 받습니다" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "셸을 대상 사용자 명의로 실행하며 명령을 지정할 수 있습니다" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "지정 유형의 SELinux 보안 컨텍스트를 만듭니다" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "지정 제한 시간 이후로 명령 실행을 멈춥니다" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "목록 모드에서 사용자 권한을 보여줍니다" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "지정한 사용자 이름 또는 ID로 명령을 실행(또는 파일 편집)" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "버전 정보를 보여주고 나갑니다" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "명령을 실행하지 않고 사용자 타임스탬프를 업데이트합니다" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "명령행 인자 처리를 멈춥니다" @@ -683,16 +700,16 @@ msgstr "exec 컨텍스트를 %s(으)로 설정할 수 없습니다" msgid "unable to set key creation context to %s" msgstr "키 생성 컨텍스트를 %s(으)로 설정할 수 없습니다" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "최소한 하나의 인자가 필요합니다" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "잘못된 파일 서술자 번호: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s(을)를 로그인 쉘로 실행할 수 없습니다" @@ -745,124 +762,124 @@ msgstr "\"%s\" 프로젝트에서 setproject에 실패했습니다" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "경고! \"%s\" 프로젝트에 자원 처리 할당에 실패했습니다" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "sudo 버전 %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "설정 옵션: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "치명적인 오류. 플러그인을 불러올 수 없습니다" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "플러그인에서 실행할 명령을 반환하지 않았습니다" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "예상치 못한 sudo 모드 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "%s 데이터베이스에 없는 사용자입니다" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "tty를 지정할 수 없습니다" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s은(는) %d uid를 소유해야 하며 setuid 비트를 설정해야 합니다" -#: src/sudo.c:908 +#: src/sudo.c:916 #, 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은(는) 유효한 uid가 아닙니다. %s은(는) 'nosuid' 옵션을 설정한 파일 시스템이거나 루트 권한이 없는 NFS 파일 시스템입니까?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "%d은(는) 유효한 uid가 아닙니다. sudo에 setuid root를 설치했습니까?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "추가 그룹 ID를 설정할 수 없습니다" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "유효한 gid를 %u 실행 gid로 설정할 수 없습니다" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "gid를 실행 gid %u(으)로 설정할 수 없습니다" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "예상치 못한 하위 프로세스 중단 상태: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "정책 플러그인을 초기화할 수 없습니다" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "%s 정책 플러그인에 \"check_policy\" 메서드가 빠졌습니다" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "정책을 통해 명령을 거부 했습니다" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "정책 플러그인 오류" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "%s 정책 플러그인에서 권한 조회를 지원하지 않습니다" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "%s 정책 플러그인에서 -v 옵션을 지원하지 않습니다" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "%s 정책 플러그인에서 -k/-K 옵션을 지원하지 않습니다" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "%s 입출력 플러그인 초기화 오류" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "%s 감사 플러그인 초기화 오류" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "%s 승인 플러그인 초기화 오류" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "승인자가 명령을 거부했습니다" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "승인 플러그인 오류" @@ -899,7 +916,7 @@ msgstr "%s 수정하지 않은 상태로 남음" msgid "%s unchanged" msgstr "%s 바꾸지 않음" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "%s에 편집 세션 내용 남음" @@ -912,33 +929,33 @@ msgstr "sesh: 내부 오류: 경로에 잘못된 파일" msgid "sesh: unable to create temporary files" msgstr "sesh: 임시 파일을 만들 수 없습니다" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: 시그널을 받아 죽음" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: 잘못된 오류 %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "원위치에 임시 파일을 복사할 수 없습니다" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "원 위치에 임시 파일 일부를 복사할 수 없습니다" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "uid를 루트로 바꿀 수 없습니다(%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "플러그인 오류: sudoedit에 파일 목록이 빠짐" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "클록을 읽을 수 없습니다" @@ -954,25 +971,25 @@ msgstr "암호를 입력하지 않았습니다" msgid "unable to read password" msgstr "암호를 읽을 수 없습니다" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "암호를 읽으려면 터미널이 필요합니다. -S 옵션을 사용하여 표준 입력으로 암호를 받거나 askpass 도우미를 설정하십시오" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "askpass 프로그램을 지정하지 않았습니다. SUDO_ASKPASS를 설정해보십시오" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "gid를 %u(으)로 설정할 수 없습니다" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "uid를 %u(으)로 설정할 수 없습니다" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "%s을(를) 실행할 수 없습니다" diff --git a/po/sr.mo b/po/sr.mo index 5ce35e0af66bae647f46c48ab191749904a0a9a9..55490417670b97810359ee954e0df11b77bc7d56 100644 GIT binary patch delta 4756 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 BiGKh9 delta 4356 zcmY+`dr(y89meq=s2c?Z#7i)ME-FSez%C#t8U=$8wQ6mQaWzKpenZ1XF-CDs&?F{e zRYEmJW6aGoqDHqEFEKW?OgowBjFwuRQuU8E(>iT6PHRj%HSPB~=cJc2Jo|ai+2y?N z`+MKB@b0CUqZeZ$*OEIn8AmHgBV|6b`(n(Nchyz1my^uma0_POYd9EBV0XNZgYY)? z#1t+DFdI|wDeQx5Z~*Q=eXa$Q%_8+l*cXdYl?b5*REy5YaX9BKn2I+s zALDwtj>dG(!>9>u#|NlbzvD7if}g;;007^JFyPA zI0A>^5>%!3qt-r(`uufNse4kM92|vO(q-t!2Gr6XL4EEQsDa)|r~c|Vfp=A^a^yW* zg&NpS)D6#}W^@xD#=L&+jGji_Xb-AVQDpV(H>d&LMpZK1@AgxI+KkVlKEEYGL#6l# z_1LtdI_%2uHPVq7#CbRxn~*BnuRL!dleai}(ULrf8bB%faRyRMTZ`(j3HcTK1SeqR z8V%hziyfm)wiq>|4akq};)Q)=XOInVZJvKbeeNFmu{T>@k5>_Dsmf6uu18Ja9i%I} zgzD#OxCe&Wp<6Un> zt@%wd13(p|yqyg4pIlh%k{WX9;aN!y3!XrS_>QIm4 zVXVM*R0ji?hDKh2ldu|x;~A{MzoC|FVV?UpqaJ;nZ^bY+;`h+UmkUL(P(Jl%*=-XS zbmK!@2nQ9r9le3`Ilqjof{mj0@8DwmF1Dab>*J;x*d)|I zx8NiAGaQHUTr9!JRIjlUwN`C78~gF45W+f~gO_nL7BP*fcorYS#1i+<>^xKlhj9wt zMpd+wSxv@8sOu;282ZNYMCtiINrU}j0e*WU&PJ`#H5`vY>i8tCLv?%wwU$Ge#xmT8 z%drd7)_`hJmG~TIVk#Sm?PIm52^~b;C+1NtNrYdbQN@KuWRi9VXJ7%nYfT$aGdPbb zY4QaA1mk4X4L`*orck~`H~}@_#NEv#3}S|TWRow*l$rcj;A+` zd>yKTUt<~usGkNl33a3QQ5}AX`uq&0t;$8Q5`9cl=ZjDiIgM-^`x4oYHk3Cbc{JwI z(1@Cl)vz;25$qe}vsOV}>BC;fop=LZ!1dGI(*6teR0JM(cl`oX$v;H)v9;qs>^a@+ z2^@iJAKNkAd;TwSK{xy>GFhwTQz}_2Qbj9c+JkUAvfTDD>W25Q68lr85m=8*-p=As zOrR`zSd4n!t5Fl&jV0JVllt>SSlTSU#V~}L@e$OFw2*9A8-_YxgBnOP(ucL7DwEA4 zqZ!qq267fzZo7-xQ)N$?Ex>xz(%rxu%#X}**Jv*4MlDDYtW%{s(kGDz!S*8?*M5f@ z&`@@)ZcvT7z86Q~?@{;3nCmWS4YI9l7cwXN0&}r+o@=Cr1{>H8UkeMJRSFuE@TYZLpqTTL`N<0tHE)WY$xkvYt#NpOTMB4Vg>|$cv;qDI-x*Prf|{ z(+HCzDRmu@tlBZEjs;v;or8`(^B^dU)3%YB&wD@e$@ zHpf$6Q9tq8nHV4^RffGJpY$SIiH`H+h3M6!rLobP9z$Y|_xgt~+AZx=_YQgCd5u5M zel$KXJUdX}4+e{e1)`}rp_r741uGVWt5&TH7yG9#39qWETJ8_z6y*e?HMzGtMn5PR V92?zGbRnTJ`LX0^eR;;fe*+#>?Faw> diff --git a/po/sr.po b/po/sr.po index ae06debd9d..4f305b84c2 100644 --- a/po/sr.po +++ b/po/sr.po @@ -3,10 +3,10 @@ # Мирослав Николић , 2011—2020. msgid "" msgstr "" -"Project-Id-Version: sudo-1.9.2rc1\n" +"Project-Id-Version: sudo-1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-08-04 11:50+0200\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-12-11 07:41+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -14,7 +14,6 @@ msgstr "" "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" -"X-Generator: Virtaal 0.7.1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: lib/util/aix.c:89 lib/util/aix.c:169 @@ -50,17 +49,17 @@ msgstr "не могу да повратим регистар" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -83,20 +82,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "не могу да отворим %s" @@ -173,12 +172,22 @@ msgstr "%s је светски уписив" msgid "%s is group writable" msgstr "%s је групно уписив" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: да скратим „%s“ на нула бајта? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "не преписујем „%s“" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "не могу да читам из „%s“" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "не могу да упишем у %s" @@ -259,7 +268,7 @@ msgid "unable to set controlling tty" msgstr "не могу да подесим контролисање tty" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "не могу да направим спојку" @@ -268,7 +277,7 @@ msgid "unable to receive message from parent" msgstr "не могу да примим поруку од родитеља" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "не могу да поделим" @@ -276,7 +285,7 @@ msgstr "не могу да поделим" msgid "unable to restore tty label" msgstr "не могу да повратим tty натпис" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим %s" @@ -327,7 +336,7 @@ msgstr "не могу да пошаљем поруку процесу праће #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "грешка у „%s“, %d. ред приликом учитавања прикључка „%s“" @@ -372,67 +381,67 @@ msgstr "пронађено је несагласно главно издање msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "занемарујем прикључак сигурности „%s“ у %s, %d. ред" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "може бити наведен само један прикључак сигурности" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "нађох непознату врсту прикључка %d у „%s“" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "прикључак сигурности %s не садржи метод провере_сигурности" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење функције „%s“" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "неисправан назив променљиве окружења: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент уз -C мора бити број већи или једнак 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "не можете да наведете обе опције „-i“ и „-s“" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "не можете да наведете обе опције „-i“ и „-E“" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "опција „-E“ није исправна у режиму уређивања" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "не можете да одредите променљиве окружења у режиму уређивања" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "опција „-U“ може бити коришћена само са опцијом „-l“" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "опције „-A“ и „-S“ не могу бити коришћене заједно" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "„sudoedit“ није подржано на овој платформи" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Само једна од опција -e, -h, -i, -K, -l, -s, -v или -V може бити наведена" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -441,7 +450,7 @@ msgstr "" "%s — уредите датотеке као други корисник\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -450,8 +459,7 @@ msgstr "" "%s — извршите наредбу као други корисник\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -459,123 +467,131 @@ msgstr "" "\n" "Опције:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "користи програм испомоћи за упит лозинке" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "користи наведену врсту БСД потврде идентитета" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "покреће наредбу у позадини" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "звони приликом постављања упита" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "затвара све описнике датотеке >= fd" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "покреће наредбу са наведеним разредом БСД пријаве" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "мења радни директоријум пре покретања наредбе" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "чува корисничко окружење приликом покретања наредбе" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "чува нарочите променљиве окружења" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "уређује датотеке уместо да изврши наредбу" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "извршава наредбу као наведени назив групе или ИБ" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "подешава променљиву ЛИЧНО у циљну корисничку личну фасциклу" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "приказује поруку помоћи и излази" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "покреће наредбу на домаћину (ако је подржано прикључком)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "покреће љуску пријаве као крајњи корисник; наредба може такође бити наведена" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "потпуно уклања датотеку записа датума и времена" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "чини неисправном датотеку датума и времена" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "исписује привилегије корисника или проверава посебну наредбу; користи се двапута за дуже записе" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "немеђудејствени режим, не користи упите" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "чува вектор групе уместо да подеси на циљеве" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "користи упит наведене лозинке" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "мења корени директоријум пре покретања наредбе" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "чита лозинку са стандардног улаза" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "покреће љуску као крајњи корисник; наредба такође може бити наведена" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "окончава наредбу након наведеног временског ограничења" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "у режиму списка, приказује привилегије за корисника" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "покреће наредбу (или уређује датотеку) као наведени корисник" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "приказује податке о издању и излази" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "освежава кориснички запис датума и времена без покретања наредбе" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "зауставља обрађивање аргумената линије наредби" @@ -680,16 +696,16 @@ msgstr "не могу да подесим извршни контекст за % msgid "unable to set key creation context to %s" msgstr "не могу да подесим контекст стварања кључа за %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "захтева барем један аргумент" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "неисправан број описника датотеке: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "не могу да покренем „%s“ као шкољку пријављивања" @@ -742,124 +758,124 @@ msgstr "подешавање пројекта није успело за про msgid "warning, resource control assignment failed for project \"%s\"" msgstr "упозорење, није успело додељивање контроле ресурса за пројекат „%s“" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Судо издање %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Опције подешавања: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "кобна грешка, не могу да учитам прикључке" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "прикључак није вратио наредбу за извршавање" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неочекивани судо режим 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "не постојите у „%s“ бази података" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "не могу да одредим конзолу" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s мора бити власништвo уида %d и треба да има подешен бит „setuid“" -#: src/sudo.c:908 +#: src/sudo.c:916 #, 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:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "стварни уид није %d, већ сетуид администратор инсталиран судоом?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "не могу да подесим додатне ИБ-ове групе" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не могу да подесим ефективан гид да се покрене_као гид %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не могу да подесим гид да се покрене као гид %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочекивани услов завршетка потпроцеса: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "не могу да започнем прикључак сигурности" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "прикључак сигурности %s не садржи метод „check_policy“" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "наредба је одбачена политиком" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "грешка прикључка политике" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "прикључак сигурности %s не подржава привилегије исписивања" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "прикључак сигурности %s не подржава опцију -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "прикључак сигурности %s не подржава опције -k/-K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "грешка приликом покретања У/И прикључка %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "грешка покретања аудит прикључка „%s“" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "грешка покретања прикључка одобравања „%s“" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "наредбу је одбацио одобравач" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "грешка прикључка одобравања" @@ -896,7 +912,7 @@ msgstr "%s је остао неизмењен" msgid "%s unchanged" msgstr "%s је непромењен" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "садржај сесије уређивања је остао у %s" @@ -909,33 +925,33 @@ msgstr "sesh: унутрашња грешка: непарн број путањ msgid "sesh: unable to create temporary files" msgstr "sesh: не могу да направим привремене датотеке" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: убијено сигналом" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: непозната грешка „%d“" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "не могу да умножим привремене датотеке назад на њихова првобитна места" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "не могу да умножим неке од привремених датотека назад на њихова првобитна места" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "не могу да променим уид у администратора (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "грешка прикључка: недостаје датотеа списка за уређивање судоа" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "не могу да прочитам сат" @@ -951,25 +967,25 @@ msgstr "лозинка није достављена" msgid "unable to read password" msgstr "не могу да прочитам лозинку" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "терминал је потребан за читање лозинке; или користите опцију „-S“ да читате из стандардног улаза или подесите помоћника тражиоца пролаза" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "није наведен програм за пропуштање, покушајте да подесите SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "не могу да подесим гид у %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "не могу да подесим уид у %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" diff --git a/po/sv.mo b/po/sv.mo index 378521a4ede466f81ea06934e9a6d1e3af281b0b..115cc142c13b01fde9a787a714f4d04fece88adf 100644 GIT binary patch delta 4940 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\n" -"Language-Team: Swedish \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4.2\n" "X-Poedit-Bookmarks: -1,0,-1,-1,-1,-1,-1,-1,-1,-1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 @@ -54,17 +54,17 @@ msgstr "kunde inte återställa registret" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:767 src/sudo_edit.c:851 src/sudo_edit.c:971 -#: src/sudo_edit.c:991 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -87,20 +87,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:767 src/sudo_edit.c:851 -#: src/sudo_edit.c:971 src/sudo_edit.c:991 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "kunde inte allokera minne" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "kunde inte öppna %s" @@ -177,12 +177,22 @@ msgstr "%s är skrivbar för alla" msgid "%s is group writable" msgstr "%s är skrivbar för gruppen" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: trunkera %s till noll byte? (y för ja/n för nej) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "skriver inte över %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "kunde inte läsa från %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "kunde inte skriva till %s" @@ -263,7 +273,7 @@ msgid "unable to set controlling tty" msgstr "kan inte ställa in kontrollerande tty" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "kunde inte skapa rör" @@ -272,7 +282,7 @@ msgid "unable to receive message from parent" msgstr "kan inte ta emot meddelande från förälder" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:732 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "kunde inte grena process" @@ -280,7 +290,7 @@ msgstr "kunde inte grena process" msgid "unable to restore tty label" msgstr "kan inte återställa tty-etikett" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "kunde inte köra %s" @@ -331,7 +341,7 @@ msgstr "kan inte skicka meddelande till övervakningsprocess" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "fel i %s, rad %d under inläsning av insticksmodul ”%s”" @@ -376,67 +386,67 @@ msgstr "inkompatibel huvudversion %d för insticksmodul (%d förväntades) hitta msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignorerar policyinsticksmodul ”%s” i %s, rad %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "bara en policyinsticksmodul kan anges" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "okänd insticksmodulstyp %d hittad i %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "policyinsticksmodul %s inkluderar inte en check_policy-metod" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "internt fel, %s spill" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "ogiltigt namn på miljövariabel: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argumentet till -C måste vara ett tal större än eller lika med 3" -#: src/parse_args.c:532 -msgid "you may not specify both the `-i' and `-s' options" -msgstr "du får inte ange flaggorna ”-i” och ”-s” samtidigt" +#: src/parse_args.c:552 +msgid "you may not specify both the -i and -s options" +msgstr "du får inte ange flaggorna -i och -s samtidigt" -#: src/parse_args.c:536 -msgid "you may not specify both the `-i' and `-E' options" -msgstr "du får inte ange flaggorna ”-i” och ”-E” samtidigt" +#: src/parse_args.c:557 +msgid "you may not specify both the -i and -E options" +msgstr "du får inte ange flaggorna -i och -E samtidigt" -#: src/parse_args.c:546 -msgid "the `-E' option is not valid in edit mode" -msgstr "flaggan ”-E” är inte giltig i redigeringsläget" +#: src/parse_args.c:567 +msgid "the -E option is not valid in edit mode" +msgstr "flaggan -E är inte giltig i redigeringsläget" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "du får inte ange miljövariabler i redigeringsläget" -#: src/parse_args.c:557 -msgid "the `-U' option may only be used with the `-l' option" -msgstr "flaggan ”-U” får bara användas med flaggan ”-l”" +#: src/parse_args.c:580 +msgid "the -U option may only be used with the -l option" +msgstr "flaggan -U får bara användas med flaggan -l" -#: src/parse_args.c:561 -msgid "the `-A' and `-S' options may not be used together" -msgstr "flaggorna ”-A” och ”-S” får inte användas tillsammans" +#: src/parse_args.c:584 +msgid "the -A and -S options may not be used together" +msgstr "flaggorna -A och -S får inte användas tillsammans" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit stöds inte på denna plattform" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Endast en av flaggorna -e, -h, -i, -K, -l, -s, -v eller -V får anges" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -445,7 +455,7 @@ msgstr "" "%s - redigera filer som en annan användare\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -454,8 +464,7 @@ msgstr "" "%s - kör ett kommando som en annan användare\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -463,123 +472,131 @@ msgstr "" "\n" "Flaggor:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "använd hjälpprogram för att fråga efter lösenord" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "använd angiven BSD-autentiseringstyp" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "kör kommando i bakgrunden" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "ring i klockan vid fråga" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "stäng alla fildeskriptorer >= num" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "kör kommando med den angivna BSD-inloggningsklassen" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "ändra arbetskatalog innan kommando körs" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "bevara användarens miljö när kommandot körs" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "bevara specifika miljövariabler" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "redigera filer istället för att köra ett kommando" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "kör kommando som angivet gruppnamn eller ID" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "ställ in HOME-variabeln till målanvändarens hemkatalog" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "visa hjälpmeddelande och avsluta" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "kör kommando på värd (om det stöds av instick)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "kör ett inloggningsskal som målanvändaren; ett kommando kan också anges" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "ta bort tidsstämpelfil helt" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "ogiltigförklara tidsstämpelfil" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "lista användarens rättigheter eller kontrollera ett specifikt kommando; använd två gånger för längre format" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "icke-interaktivt läge, inga frågor ställs" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "behåll gruppvektor istället för att ställa in den till målets" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "använd angiven lösenordsprompt" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "ändra rotkatalog innan kommando körs" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "skapa SELinux-säkerhetskontext med angiven roll" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "läs lösenord från standard in" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "kör skal som målanvändaren; ett kommando kan också anges" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "skapa SELinux-säkerhetskontext med angiven typ" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "avsluta kommando efter den angivna tidsgränsen" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "i listläge, visa rättigheter för användaren" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "kör kommando (eller redigera fil) som angivet användarnamn eller ID" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "visa versionsinformation och avsluta" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "uppdatera användarens tidsstämpel utan att köra ett kommando" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "sluta behandla kommandoradsargument" @@ -684,16 +701,16 @@ msgstr "kunde inte ställa in körkontext till %s" msgid "unable to set key creation context to %s" msgstr "kan inte ställa in kontext för nyckelskapande till %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "kräver minst ett argument" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "ogiltigt fildeskriptornummer: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "kunde inte köra %s som ett inloggningsskal" @@ -721,149 +738,149 @@ msgstr "den startande uppgiften är den sista" msgid "could not join project \"%s\"" msgstr "kunde inte gå med i projekt ”%s”" -#: src/solaris.c:87 +#: src/solaris.c:89 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "ingen resurspool som accepterar standardbindningar existerar för projekt ”%s”" -#: src/solaris.c:91 +#: src/solaris.c:93 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "angiven resurspool finns inte för projekt ”%s”" -#: src/solaris.c:95 +#: src/solaris.c:97 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "kunde inte binda till standardresurspool för projekt ”%s”" -#: src/solaris.c:101 +#: src/solaris.c:104 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject misslyckades för projekt ”%s”" -#: src/solaris.c:103 +#: src/solaris.c:106 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "varning, tilldelning av resurskontroll misslyckades för projekt ”%s”" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Konfigurationsflaggor: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "ödesdigert fel, kunde inte läsa in insticksmoduler" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "insticksmodul returnerade ett kommando att exekvera" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "oväntat sudo-läge 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "du existerar inte i %s-databasen" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "kan inte detektera tty" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s måste ägas av uid %d och ha setuid-biten inställd" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "effektivt uid är inte %d, är %s på ett filsystem med flaggan ”nosuid” inställd eller ett NFS-filsystem utan root-rättigheter?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "effektivt uid är inte %d, har sudo installerats som setuid root?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "kan inte ställa in kompletterande grupp-ID:n" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "kunde inte ställa in effektiv gid till runas gid %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "kunde inte ställa in gid för runas gid %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "oväntat barnavslutsvillkor: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "kan inte initiera policy-instick" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format -msgid "policy plugin %s is missing the `check_policy' method" +msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "policyinsticksmodul %s saknar metoden ”check_policy”" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "kommando avböjt enligt policy" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "fel i policyinsticksmodul" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "policyinsticksmodul %s har inte stöd för att lista rättigheter" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "policyinsticksmodul %s har inte stöd för flaggan -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "policyinsticksmodul %s har inte stöd för flaggorna -k/-K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "fel vid initiering av I/O-insticksmodul %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "fel vid initiering av granskningsinsticksmodul %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "fel vid initiering av godkänningsinsticksmodul %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "kommando avböjt av godkännare" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "fel i godkänningsinsticksmodul" @@ -895,51 +912,51 @@ msgstr "%s: att redigera filer i en skrivbar katalog är inte tillåtet" msgid "%s left unmodified" msgstr "%s lämnad oförändrad" -#: src/sudo_edit.c:680 src/sudo_edit.c:868 +#: src/sudo_edit.c:680 src/sudo_edit.c:871 #, c-format msgid "%s unchanged" msgstr "%s oförändrad" -#: src/sudo_edit.c:703 src/sudo_edit.c:904 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "innehåll av redigeringssession finns kvar i %s" -#: src/sudo_edit.c:811 +#: src/sudo_edit.c:814 msgid "sesh: internal error: odd number of paths" msgstr "sesh: internt fel: udda antal sökvägar" -#: src/sudo_edit.c:813 +#: src/sudo_edit.c:816 msgid "sesh: unable to create temporary files" msgstr "sesh: kunde inte skapa temporärfiler" -#: src/sudo_edit.c:815 src/sudo_edit.c:897 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" -msgstr "sesh: dödad en signal" +msgstr "sesh: dödad av en signal" -#: src/sudo_edit.c:817 src/sudo_edit.c:900 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: okänt fel %d" -#: src/sudo_edit.c:891 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "kan inte kopiera temporära filer tillbaka till deras originalplats" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "kan inte kopiera vissa av de temporära filerna tillbaka till deras originalplats" -#: src/sudo_edit.c:938 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "kunde inte ändra uid till root (%u)" -#: src/sudo_edit.c:955 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "insticksfel: fillista för sudoedit saknas" -#: src/sudo_edit.c:1006 src/sudo_edit.c:1019 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "kunde inte läsa klockan" @@ -955,25 +972,25 @@ msgstr "inget lösenord angavs" msgid "unable to read password" msgstr "kan inte läsa lösenord" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "en terminal krävs för att läsa lösenordet; använd antingen flaggan -S för att läsa från standard in, eller konfigurera en askpass-hjälpare" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "inget askpass-program angivet, prova att ställ in SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "kunde inte ställa in gid till %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "kunde inte ställa in uid till %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "kunde inte köra %s" From a29cac8bd6567d403fd15f15f41679bf5cf0ac62 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 21 Dec 2020 10:44:22 -0700 Subject: [PATCH 12/31] Fix the buffer size parameter when serializing the interface list. Problem reported by Matthias Gerstner of SUSE. --- src/net_ifs.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/net_ifs.c b/src/net_ifs.c index 0bdeace649..273ca9a420 100644 --- a/src/net_ifs.c +++ b/src/net_ifs.c @@ -119,7 +119,8 @@ get_net_ifs(char **addrinfo) #else char addrstr[INET_ADDRSTRLEN], maskstr[INET_ADDRSTRLEN]; #endif - int ailen, len, num_interfaces = 0; + int len, num_interfaces = 0; + size_t ailen; char *cp; debug_decl(get_net_ifs, SUDO_DEBUG_NETIF); @@ -172,13 +173,14 @@ get_net_ifs(char **addrinfo) if (inet_ntop(AF_INET, &sin->sin_addr, maskstr, sizeof(maskstr)) == NULL) continue; - len = snprintf(cp, ailen - (*addrinfo - cp), - "%s%s/%s", cp == *addrinfo ? "" : " ", addrstr, maskstr); - if (len < 0 || len >= ailen - (*addrinfo - cp)) { + len = snprintf(cp, ailen, "%s%s/%s", + cp == *addrinfo ? "" : " ", addrstr, maskstr); + if (len < 0 || (size_t)len >= ailen) { sudo_warnx(U_("internal error, %s overflow"), __func__); goto done; } cp += len; + ailen -= len; break; #ifdef HAVE_STRUCT_IN6_ADDR case AF_INET6: @@ -189,13 +191,14 @@ get_net_ifs(char **addrinfo) if (inet_ntop(AF_INET6, &sin6->sin6_addr, maskstr, sizeof(maskstr)) == NULL) continue; - len = snprintf(cp, ailen - (*addrinfo - cp), - "%s%s/%s", cp == *addrinfo ? "" : " ", addrstr, maskstr); - if (len < 0 || len >= ailen - (*addrinfo - cp)) { + len = snprintf(cp, ailen, "%s%s/%s", + cp == *addrinfo ? "" : " ", addrstr, maskstr); + if (len < 0 || (size_t)len >= ailen) { sudo_warnx(U_("internal error, %s overflow"), __func__); goto done; } cp += len; + ailen -= len; break; #endif /* HAVE_STRUCT_IN6_ADDR */ } @@ -223,8 +226,8 @@ get_net_ifs(char **addrinfo) struct ifreq *ifr, *ifr_tmp = (struct ifreq *)ifr_tmpbuf; struct ifconf *ifconf; struct sockaddr_in *sin; - int ailen, i, len, n, sock, num_interfaces = 0; - size_t buflen = sizeof(struct ifconf) + BUFSIZ; + int i, len, n, sock, num_interfaces = 0; + size_t ailen, buflen = sizeof(struct ifconf) + BUFSIZ; char *cp, *previfname = "", *ifconf_buf = NULL; char addrstr[INET_ADDRSTRLEN], maskstr[INET_ADDRSTRLEN]; #ifdef _ISC @@ -334,13 +337,14 @@ get_net_ifs(char **addrinfo) if (inet_ntop(AF_INET, &sin->sin_addr, maskstr, sizeof(maskstr)) == NULL) continue; - len = snprintf(cp, ailen - (*addrinfo - cp), - "%s%s/%s", cp == *addrinfo ? "" : " ", addrstr, maskstr); - if (len < 0 || len >= ailen - (*addrinfo - cp)) { + len = snprintf(cp, ailen, "%s%s/%s", + cp == *addrinfo ? "" : " ", addrstr, maskstr); + if (len < 0 || (size_t)len >= ailen) { sudo_warnx(U_("internal error, %s overflow"), __func__); goto done; } cp += len; + ailen -= len; /* Stash the name of the interface we saved. */ previfname = ifr->ifr_name; From b132def0b19c018ed23093d40d1471b6f2d47e28 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 10:16:00 -0700 Subject: [PATCH 13/31] For sudo, only allow "sudo" or "sudoedit" as the program name. The program name is also used when matching Debug lines in sudo.conf. We don't want the user to be able to influence sudo.conf Debug matching. The string "sudoedit" is treated the same as "sudo" in sudo.conf. Problem reported by Matthias Gerstner of SUSE. --- include/sudo_util.h | 1 + lib/util/progname.c | 36 ++++++++++++++++++++++++++++++++++-- lib/util/util.exp.in | 1 + src/sudo.c | 4 +++- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/include/sudo_util.h b/include/sudo_util.h index 3448149bac..eb4c81c604 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -244,6 +244,7 @@ sudo_dso_public ssize_t sudo_parseln_v2(char **buf, size_t *bufsize, unsigned in /* progname.c */ sudo_dso_public void initprogname(const char *); +sudo_dso_public void initprogname2(const char *, const char * const *); /* roundup.c */ sudo_dso_public unsigned int sudo_pow2_roundup_v1(unsigned int len); diff --git a/lib/util/progname.c b/lib/util/progname.c index 994a86909b..d1bf15d15b 100644 --- a/lib/util/progname.c +++ b/lib/util/progname.c @@ -32,10 +32,11 @@ #ifdef HAVE_GETPROGNAME void -initprogname(const char *name) +initprogname2(const char *name, const char * const * allowed) { # ifdef HAVE_SETPROGNAME const char *progname; + int i; /* Fall back on "name" if getprogname() returns an empty string. */ if ((progname = getprogname()) != NULL && *progname != '\0') @@ -45,6 +46,18 @@ initprogname(const char *name) if (name[0] == 'l' && name[1] == 't' && name[2] == '-' && name[3] != '\0') name += 3; + /* Check allow list if present (first element is the default). */ + if (allowed != NULL) { + for (i = 0; ; i++) { + if (allowed[i] == NULL) { + name = allowed[0]; + break; + } + if (strcmp(allowed[i], name) == 0) + break; + } + } + /* Update internal progname if needed. */ if (name != progname) setprogname(name); @@ -57,8 +70,9 @@ initprogname(const char *name) static const char *progname = ""; void -initprogname(const char *name) +initprogname2(const char *name, const char * const * allowed) { + int i; # ifdef HAVE___PROGNAME extern const char *__progname; @@ -76,6 +90,18 @@ initprogname(const char *name) if (progname[0] == 'l' && progname[1] == 't' && progname[2] == '-' && progname[3] != '\0') progname += 3; + + /* Check allow list if present (first element is the default). */ + if (allowed != NULL) { + for (i = 0; ; i++) { + if (allowed[i] == NULL) { + progname = allowed[0]; + break; + } + if (strcmp(allowed[i], progname) == 0) + break; + } + } } const char * @@ -84,3 +110,9 @@ sudo_getprogname(void) return progname; } #endif /* !HAVE_GETPROGNAME */ + +void +initprogname(const char *name) +{ + initprogname2(name, NULL); +} diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index 6095623fd3..b0b56f09b4 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -1,4 +1,5 @@ @COMPAT_EXP@initprogname +initprogname2 sudo_conf_askpass_path_v1 sudo_conf_clear_paths_v1 sudo_conf_debug_files_v1 diff --git a/src/sudo.c b/src/sudo.c index 9d60e1b6d5..e4669b3053 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -152,12 +152,14 @@ main(int argc, char *argv[], char *envp[]) int nargc, status = 0; char **nargv, **env_add, **user_info; char **command_info = NULL, **argv_out = NULL, **user_env_out = NULL; + const char * const allowed_prognames[] = { "sudo", "sudoedit", NULL }; struct sudo_settings *settings; int submit_optind; sigset_t mask; debug_decl_vars(main, SUDO_DEBUG_MAIN); - initprogname(argc > 0 ? argv[0] : "sudo"); + /* Only allow "sudo" or "sudoedit" as the program name. */ + initprogname2(argc > 0 ? argv[0] : "sudo", allowed_prognames); /* Crank resource limits to unlimited. */ unlimit_sudo(); From 71339c574fdc5f641e91d4a2acba2c89367e9087 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 10:16:00 -0700 Subject: [PATCH 14/31] Check the return value of fcntl() when setting FD_CLOEXEC. This should never fail unless the fd is invalid. Problem reported by Matthias Gerstner of SUSE. --- lib/iolog/iolog_fileio.c | 11 ++++++----- lib/util/sudo_debug.c | 5 ++++- plugins/group_file/getgrent.c | 18 ++++++++++++++---- plugins/sudoers/linux_audit.c | 6 ++++-- plugins/sudoers/tsgetgrpw.c | 36 +++++++++++++++++++++++++++-------- 5 files changed, 56 insertions(+), 20 deletions(-) diff --git a/lib/iolog/iolog_fileio.c b/lib/iolog/iolog_fileio.c index 34600cb8f7..84aeaa85b6 100644 --- a/lib/iolog/iolog_fileio.c +++ b/lib/iolog/iolog_fileio.c @@ -596,13 +596,14 @@ iolog_open(struct iolog_file *iol, int dfd, int iofd, const char *mode) iol->compressed = true; } } - (void)fcntl(fd, F_SETFD, FD_CLOEXEC); + if (fcntl(fd, F_SETFD, FD_CLOEXEC) != -1) { #ifdef HAVE_ZLIB_H - if (iol->compressed) - iol->fd.g = gzdopen(fd, mode); - else + if (iol->compressed) + iol->fd.g = gzdopen(fd, mode); + else #endif - iol->fd.f = fdopen(fd, mode); + iol->fd.f = fdopen(fd, mode); + } if (iol->fd.v != NULL) { switch ((flags & O_ACCMODE)) { case O_WRONLY: diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index 6822b0006f..b98e05c562 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -180,7 +180,10 @@ sudo_debug_new_output(struct sudo_debug_instance *instance, } ignore_result(fchown(output->fd, (uid_t)-1, 0)); } - (void)fcntl(output->fd, F_SETFD, FD_CLOEXEC); + if (fcntl(output->fd, F_SETFD, FD_CLOEXEC) == -1) { + sudo_warn_nodebug("%s", output->filename); + goto bad; + } if (sudo_debug_fds_size < output->fd) { /* Bump fds size to the next multiple of 4 * NBBY. */ const int old_size = sudo_debug_fds_size / NBBY; diff --git a/plugins/group_file/getgrent.c b/plugins/group_file/getgrent.c index c8f5138344..142fd39e16 100644 --- a/plugins/group_file/getgrent.c +++ b/plugins/group_file/getgrent.c @@ -64,8 +64,12 @@ mysetgrent(void) { if (grf == NULL) { grf = fopen(grfile, "r"); - if (grf != NULL) - (void)fcntl(fileno(grf), F_SETFD, FD_CLOEXEC); + if (grf != NULL) { + if (fcntl(fileno(grf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(grf); + grf = NULL; + } + } } else { rewind(grf); } @@ -139,7 +143,10 @@ mygetgrnam(const char *name) if (grf == NULL) { if ((grf = fopen(grfile, "r")) == NULL) return NULL; - (void)fcntl(fileno(grf), F_SETFD, FD_CLOEXEC); + if (fcntl(fileno(grf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(grf); + return NULL; + } } else { rewind(grf); } @@ -162,7 +169,10 @@ mygetgrgid(gid_t gid) if (grf == NULL) { if ((grf = fopen(grfile, "r")) == NULL) return NULL; - (void)fcntl(fileno(grf), F_SETFD, FD_CLOEXEC); + if (fcntl(fileno(grf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(grf); + return NULL; + } } else { rewind(grf); } diff --git a/plugins/sudoers/linux_audit.c b/plugins/sudoers/linux_audit.c index 4f57f45610..e5eb2c2cca 100644 --- a/plugins/sudoers/linux_audit.c +++ b/plugins/sudoers/linux_audit.c @@ -56,8 +56,10 @@ linux_audit_open(void) au_fd = AUDIT_NOT_CONFIGURED; else sudo_warn("%s", U_("unable to open audit system")); - } else { - (void)fcntl(au_fd, F_SETFD, FD_CLOEXEC); + } else if (fcntl(au_fd, F_SETFD, FD_CLOEXEC) == -1) { + sudo_warn("%s", U_("unable to open audit system")); + audit_close(au_fd); + au_fd = -1; } debug_return_int(au_fd); } diff --git a/plugins/sudoers/tsgetgrpw.c b/plugins/sudoers/tsgetgrpw.c index dcb1c3fea7..3e5d616bb3 100644 --- a/plugins/sudoers/tsgetgrpw.c +++ b/plugins/sudoers/tsgetgrpw.c @@ -86,8 +86,12 @@ setpwent(void) { if (pwf == NULL) { pwf = fopen(pwfile, "r"); - if (pwf != NULL) - (void)fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC); + if (pwf != NULL) { + if (fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(pwf); + pwf = NULL; + } + } } else { rewind(pwf); } @@ -164,7 +168,10 @@ getpwnam(const char *name) if (pwf == NULL) { if ((pwf = fopen(pwfile, "r")) == NULL) return NULL; - (void)fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC); + if (fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(pwf); + return NULL; + } } else { rewind(pwf); } @@ -187,7 +194,10 @@ getpwuid(uid_t uid) if (pwf == NULL) { if ((pwf = fopen(pwfile, "r")) == NULL) return NULL; - (void)fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC); + if (fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(pwf); + return NULL; + } } else { rewind(pwf); } @@ -215,8 +225,12 @@ setgrent(void) { if (grf == NULL) { grf = fopen(grfile, "r"); - if (grf != NULL) - (void)fcntl(fileno(grf), F_SETFD, FD_CLOEXEC); + if (grf != NULL) { + if (fcntl(fileno(grf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(grf); + grf = NULL; + } + } } else { rewind(grf); } @@ -290,7 +304,10 @@ getgrnam(const char *name) if (grf == NULL) { if ((grf = fopen(grfile, "r")) == NULL) return NULL; - (void)fcntl(fileno(grf), F_SETFD, FD_CLOEXEC); + if (fcntl(fileno(grf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(grf); + grf = NULL; + } } else { rewind(grf); } @@ -313,7 +330,10 @@ getgrgid(gid_t gid) if (grf == NULL) { if ((grf = fopen(grfile, "r")) == NULL) return NULL; - (void)fcntl(fileno(grf), F_SETFD, FD_CLOEXEC); + if (fcntl(fileno(grf), F_SETFD, FD_CLOEXEC) == -1) { + fclose(grf); + grf = NULL; + } } else { rewind(grf); } From db1f27c0350e9e437c93780ffe88648ae1984467 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 10:16:00 -0700 Subject: [PATCH 15/31] Fix potential directory existing info leak in sudoedit. When creating a new file, sudoedit checks to make sure the parent directory exists so it can provide the user with a sensible error message. However, this could be used to test for the existence of directories not normally accessible to the user by pointing to them with a symbolic link when the parent directory is controlled by the user. Problem reported by Matthias Gerstner of SUSE. --- src/sudo_edit.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 82e04a71b9..5502b7bd94 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -541,14 +541,33 @@ sudo_edit_create_tfiles(struct command_details *command_details, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details); if (ofd != -1 || errno == ENOENT) { if (ofd == -1) { - /* New file, verify parent dir exists unless in cwd. */ + /* + * New file, verify parent dir exists unless in cwd. + * This fails early so the user knows ahead of time if the + * edit won't succeed. Additional checks are performed + * when copying the temporary file back to the origin. + */ char *slash = strrchr(files[i], '/'); if (slash != NULL && slash != files[i]) { - int serrno = errno; + const int sflags = command_details->flags; + const int serrno = errno; + int dfd; + + /* + * The parent directory is allowed to be a symbolic + * link as long as *its* parent is not writable. + */ *slash = '\0'; - if (stat(files[i], &sb) == 0 && S_ISDIR(sb.st_mode)) { - memset(&sb, 0, sizeof(sb)); - rc = 0; + SET(command_details->flags, CD_SUDOEDIT_FOLLOW); + dfd = sudo_edit_open(files[i], DIR_OPEN_FLAGS, + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details); + command_details->flags = sflags; + if (dfd != -1) { + if (fstat(dfd, &sb) == 0 && S_ISDIR(sb.st_mode)) { + memset(&sb, 0, sizeof(sb)); + rc = 0; + } + close(dfd); } *slash = '/'; errno = serrno; From 7cd36222e765d8fc561e5a52a59a1c3a4feb38bb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 10:16:00 -0700 Subject: [PATCH 16/31] Add security checks before using temp files for SELinux RBAC sudoedit. Otherwise, it may be possible for the user running sudoedit to replace the newly-created temporary files with a symbolic link and have sudoedit set the owner of an arbitrary file. Problem reported by Matthias Gerstner of SUSE. --- src/copy_file.c | 35 +++++++++++++++- src/sesh.c | 27 ++++++++----- src/sudo_edit.c | 104 +++++++++++++++++++++++++++++++----------------- src/sudo_exec.h | 4 +- 4 files changed, 121 insertions(+), 49 deletions(-) diff --git a/src/copy_file.c b/src/copy_file.c index a90a3743cd..08a59fe11e 100644 --- a/src/copy_file.c +++ b/src/copy_file.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2020 Todd C. Miller + * Copyright (c) 2020-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -23,6 +23,8 @@ #include +#include + #include #include #include @@ -134,3 +136,34 @@ sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, sudo_warn(U_("unable to write to %s"), dst); debug_return_int(-1); } + +#ifdef HAVE_SELINUX +bool +sudo_check_temp_file(int tfd, const char *tfile, uid_t uid, struct stat *sb) +{ + struct stat sbuf; + debug_decl(sudo_check_temp_file, SUDO_DEBUG_UTIL); + + if (sb == NULL) + sb = &sbuf; + + if (fstat(tfd, sb) == -1) { + sudo_warn(U_("unable to stat %s"), tfile); + debug_return_bool(false); + } + if (!S_ISREG(sb->st_mode)) { + sudo_warnx(U_("%s: not a regular file"), tfile); + debug_return_bool(false); + } + if ((sb->st_mode & ALLPERMS) != (S_IRUSR|S_IWUSR)) { + sudo_warnx(U_("%s: bad file mode: 0%o"), tfile, sb->st_mode & ALLPERMS); + debug_return_bool(false); + } + if (sb->st_uid != uid) { + sudo_warnx(U_("%s is owned by uid %u, should be %u"), + tfile, (unsigned int)sb->st_uid, (unsigned int)uid); + debug_return_bool(false); + } + debug_return_bool(true); +} +#endif /* SELINUX */ diff --git a/src/sesh.c b/src/sesh.c index 8241f13f1b..abbef25773 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2008, 2010-2018, 2020 Todd C. Miller + * Copyright (c) 2008, 2010-2018, 2020-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -132,7 +132,7 @@ main(int argc, char *argv[], char *envp[]) static int sesh_sudoedit(int argc, char *argv[]) { - int i, oflags_dst, post, ret = SESH_ERR_FAILURE; + int i, oflags_src, oflags_dst, post, ret = SESH_ERR_FAILURE; int fd_src = -1, fd_dst = -1, follow = 0; struct stat sb; struct timespec times[2]; @@ -174,10 +174,12 @@ sesh_sudoedit(int argc, char *argv[]) debug_return_int(SESH_ERR_BAD_PATHS); /* - * Use O_EXCL if we are not in the post editing stage - * so that it's ensured that the temporary files are - * created by us and that we are not opening any symlinks. + * In the pre-editing stage, use O_EXCL to ensure that the temporary + * files are created by us and that we are not opening any symlinks. + * In the post-editing stage, use O_NOFOLLOW so we don't follow symlinks + * when opening the temporary files. */ + oflags_src = O_RDONLY|(post ? O_NONBLOCK|O_NOFOLLOW : follow); oflags_dst = O_WRONLY|O_CREAT|(post ? follow : O_EXCL); for (i = 0; i < argc - 1; i += 2) { const char *path_src = argv[i]; @@ -187,7 +189,7 @@ sesh_sudoedit(int argc, char *argv[]) * doesn't exist, that's OK, we'll create an empty * destination file. */ - if ((fd_src = open(path_src, O_RDONLY|follow, S_IRUSR|S_IWUSR)) < 0) { + if ((fd_src = open(path_src, oflags_src, S_IRUSR|S_IWUSR)) < 0) { if (errno != ENOENT) { sudo_warn("%s", path_src); if (post) { @@ -197,6 +199,14 @@ sesh_sudoedit(int argc, char *argv[]) goto cleanup_0; } } + if (post) { + /* Make sure the temporary file is safe and has the proper owner. */ + if (!sudo_check_temp_file(fd_src, path_src, geteuid(), &sb)) { + ret = SESH_ERR_SOME_FILES; + goto nocleanup; + } + fcntl(fd_src, F_SETFL, fcntl(fd_src, F_GETFL, 0) & ~O_NONBLOCK); + } if ((fd_dst = open(path_dst, oflags_dst, post ? (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) : (S_IRUSR|S_IWUSR))) < 0) { @@ -214,10 +224,7 @@ sesh_sudoedit(int argc, char *argv[]) off_t len_dst = -1; if (post) { - if (fstat(fd_src, &sb) != 0) { - ret = SESH_ERR_SOME_FILES; - goto nocleanup; - } + /* sudo_check_temp_file() filled in sb for us. */ len_src = sb.st_size; if (fstat(fd_dst, &sb) != 0) { ret = SESH_ERR_SOME_FILES; diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 5502b7bd94..93810c346f 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2004-2008, 2010-2020 Todd C. Miller + * Copyright (c) 2004-2008, 2010-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -259,8 +259,10 @@ sudo_edit_mktemp(const char *ofile, char **tfile) } else { len = asprintf(tfile, "%s/%s.XXXXXXXX", edit_tmpdir, cp); } - if (len == -1) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + if (len == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } tfd = mkstemps(*tfile, suff ? strlen(suff) : 0); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "%s -> %s, fd %d", ofile, *tfile, tfd); @@ -735,7 +737,8 @@ sudo_edit_copy_tfiles(struct command_details *command_details, #ifdef HAVE_SELINUX static int -selinux_run_helper(char *argv[], char *envp[]) +selinux_run_helper(uid_t uid, gid_t gid, int ngroups, GETGROUPS_T *groups, + char *const argv[], char *const envp[]) { int status, ret = SESH_ERR_FAILURE; const char *sesh; @@ -755,8 +758,10 @@ selinux_run_helper(char *argv[], char *envp[]) break; case 0: /* child runs sesh in new context */ - if (selinux_setcon() == 0) + if (selinux_setcon() == 0) { + switch_user(uid, gid, ngroups, groups); execve(sesh, argv, envp); + } _exit(SESH_ERR_FAILURE); default: /* parent waits */ @@ -775,7 +780,7 @@ selinux_edit_create_tfiles(struct command_details *command_details, struct tempfile *tf, char *files[], int nfiles) { char **sesh_args, **sesh_ap; - int i, rc, sesh_nargs; + int i, error, sesh_nargs, ret = -1; struct stat sb; debug_decl(selinux_edit_create_tfiles, SUDO_DEBUG_EDIT); @@ -787,7 +792,7 @@ selinux_edit_create_tfiles(struct command_details *command_details, sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); if (sesh_args == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_int(-1); + goto done; } *sesh_ap++ = "sesh"; *sesh_ap++ = "-e"; @@ -795,7 +800,6 @@ selinux_edit_create_tfiles(struct command_details *command_details, *sesh_ap++ = "-h"; *sesh_ap++ = "0"; - /* XXX - temp files should be created with user's context */ for (i = 0; i < nfiles; i++) { char *tfile, *ofile = files[i]; int tfd; @@ -813,8 +817,7 @@ selinux_edit_create_tfiles(struct command_details *command_details, if (tfd == -1) { sudo_warn("mkstemps"); free(tfile); - free(sesh_args); - debug_return_int(-1); + goto done; } /* Helper will re-create temp file with proper security context. */ close(tfd); @@ -825,8 +828,10 @@ selinux_edit_create_tfiles(struct command_details *command_details, *sesh_ap = NULL; /* Run sesh -e [-h] 0 ... */ - rc = selinux_run_helper(sesh_args, command_details->envp); - switch (rc) { + error = selinux_run_helper(command_details->uid, command_details->gid, + command_details->ngroups, command_details->groups, sesh_args, + command_details->envp); + switch (error) { case SESH_SUCCESS: break; case SESH_ERR_BAD_PATHS: @@ -836,21 +841,35 @@ selinux_edit_create_tfiles(struct command_details *command_details, case SESH_ERR_KILLED: sudo_fatalx("%s", U_("sesh: killed by a signal")); default: - sudo_fatalx(U_("sesh: unknown error %d"), rc); + sudo_warnx(U_("sesh: unknown error %d"), error); + goto done; } - /* Chown to user's UID so they can edit the temporary files. */ for (i = 0; i < nfiles; i++) { - if (chown(tf[i].tfile, user_details.uid, user_details.gid) != 0) { + int tfd = open(tf[i].tfile, O_RDONLY|O_NONBLOCK|O_NOFOLLOW); + if (tfd == -1) { + sudo_warn(U_("unable to open %s"), tf[i].tfile); + goto done; + } + if (!sudo_check_temp_file(tfd, tf[i].tfile, command_details->uid, NULL)) { + close(tfd); + goto done; + } + if (fchown(tfd, user_details.uid, user_details.gid) != 0) { sudo_warn("unable to chown(%s) to %d:%d for editing", tf[i].tfile, user_details.uid, user_details.gid); + close(tfd); + goto done; } + close(tfd); } + ret = nfiles; +done: /* Contents of tf will be freed by caller. */ free(sesh_args); - return (nfiles); + debug_return_int(ret); } static int @@ -858,7 +877,8 @@ selinux_edit_copy_tfiles(struct command_details *command_details, struct tempfile *tf, int nfiles, struct timespec *times) { char **sesh_args, **sesh_ap; - int i, rc, sesh_nargs, ret = 1; + int i, error, sesh_nargs, ret = 1; + int tfd = -1; struct timespec ts; struct stat sb; debug_decl(selinux_edit_copy_tfiles, SUDO_DEBUG_EDIT); @@ -879,33 +899,43 @@ selinux_edit_copy_tfiles(struct command_details *command_details, /* Construct args for sesh -e 1 */ for (i = 0; i < nfiles; i++) { - if (stat(tf[i].tfile, &sb) == 0) { - mtim_get(&sb, ts); - if (tf[i].osize == sb.st_size && sudo_timespeccmp(&tf[i].omtim, &ts, ==)) { - /* - * If mtime and size match but the user spent no measurable - * time in the editor we can't tell if the file was changed. - */ - if (sudo_timespeccmp(×[0], ×[1], !=)) { - sudo_warnx(U_("%s unchanged"), tf[i].ofile); - unlink(tf[i].tfile); - continue; - } + if (tfd != -1) + close(tfd); + if ((tfd = open(tf[i].tfile, O_RDONLY|O_NONBLOCK|O_NOFOLLOW)) == -1) { + sudo_warn(U_("unable to open %s"), tf[i].tfile); + continue; + } + if (!sudo_check_temp_file(tfd, tf[i].tfile, user_details.uid, &sb)) + continue; + mtim_get(&sb, ts); + if (tf[i].osize == sb.st_size && sudo_timespeccmp(&tf[i].omtim, &ts, ==)) { + /* + * If mtime and size match but the user spent no measurable + * time in the editor we can't tell if the file was changed. + */ + if (sudo_timespeccmp(×[0], ×[1], !=)) { + sudo_warnx(U_("%s unchanged"), tf[i].ofile); + unlink(tf[i].tfile); + continue; } } *sesh_ap++ = tf[i].tfile; *sesh_ap++ = tf[i].ofile; - if (chown(tf[i].tfile, command_details->uid, command_details->gid) != 0) { + if (fchown(tfd, command_details->uid, command_details->gid) != 0) { sudo_warn("unable to chown(%s) back to %d:%d", tf[i].tfile, command_details->uid, command_details->gid); } } *sesh_ap = NULL; + if (tfd != -1) + close(tfd); if (sesh_ap - sesh_args > 3) { /* Run sesh -e 1 ... */ - rc = selinux_run_helper(sesh_args, command_details->envp); - switch (rc) { + error = selinux_run_helper(command_details->uid, command_details->gid, + command_details->ngroups, command_details->groups, sesh_args, + command_details->envp); + switch (error) { case SESH_SUCCESS: ret = 0; break; @@ -921,7 +951,7 @@ selinux_edit_copy_tfiles(struct command_details *command_details, sudo_warnx("%s", U_("sesh: killed by a signal")); break; default: - sudo_warnx(U_("sesh: unknown error %d"), rc); + sudo_warnx(U_("sesh: unknown error %d"), error); break; } if (ret != 0) @@ -943,7 +973,7 @@ sudo_edit(struct command_details *command_details) { struct command_details saved_command_details; char **nargv = NULL, **ap, **files = NULL; - int errors, i, ac, nargc, rc; + int errors, i, ac, nargc, ret; int editor_argc = 0, nfiles = 0; struct timespec times[2]; struct tempfile *tf = NULL; @@ -1038,7 +1068,7 @@ sudo_edit(struct command_details *command_details) command_details->ngroups = user_details.ngroups; command_details->groups = user_details.groups; command_details->argv = nargv; - rc = run_command(command_details); + ret = run_command(command_details); if (sudo_gettime_real(×[1]) == -1) { sudo_warn("%s", U_("unable to read the clock")); goto cleanup; @@ -1062,14 +1092,14 @@ sudo_edit(struct command_details *command_details) errors = sudo_edit_copy_tfiles(command_details, tf, nfiles, times); if (errors) { /* Preserve the edited temporary files. */ - rc = W_EXITCODE(1, 0); + ret = W_EXITCODE(1, 0); } for (i = 0; i < nfiles; i++) free(tf[i].tfile); free(tf); free(nargv); - debug_return_int(rc); + debug_return_int(ret); cleanup: /* Clean up temp files and return. */ diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 39164a7854..ec213a6f0b 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010-2016 Todd C. Miller + * Copyright (c) 2010-2017, 2020-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -84,9 +84,11 @@ */ struct command_details; struct command_status; +struct stat; /* copy_file.c */ int sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, int dst_fd, off_t dst_len); +bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb); /* exec.c */ void exec_cmnd(struct command_details *details, int errfd); From 397a07e86f5e2ccfe046f4c76aff8d21b1980b24 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 17/31] In sudoedit, use sudo_check_temp_file() for non-SELinux too. --- src/copy_file.c | 2 -- src/sudo_edit.c | 13 +++---------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/copy_file.c b/src/copy_file.c index 08a59fe11e..1930e9e6a7 100644 --- a/src/copy_file.c +++ b/src/copy_file.c @@ -137,7 +137,6 @@ sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, debug_return_int(-1); } -#ifdef HAVE_SELINUX bool sudo_check_temp_file(int tfd, const char *tfile, uid_t uid, struct stat *sb) { @@ -166,4 +165,3 @@ sudo_check_temp_file(int tfd, const char *tfile, uid_t uid, struct stat *sb) } debug_return_bool(true); } -#endif /* SELINUX */ diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 93810c346f..ba8e99c128 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -667,24 +667,17 @@ sudo_edit_copy_tfiles(struct command_details *command_details, /* Copy contents of temp files to real ones. */ for (i = 0; i < nfiles; i++) { - int rc = -1; sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "seteuid(%u)", (unsigned int)user_details.uid); if (seteuid(user_details.uid) != 0) sudo_fatal("seteuid(%u)", (unsigned int)user_details.uid); tfd = sudo_edit_open(tf[i].tfile, O_RDONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, NULL); - if (tfd != -1) - rc = fstat(tfd, &sb); - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "seteuid(%u)", ROOT_UID); if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); - if (rc == -1 || !S_ISREG(sb.st_mode)) { - if (rc == -1) - sudo_warn("%s", tf[i].tfile); - else - sudo_warnx(U_("%s: not a regular file"), tf[i].tfile); + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "seteuid(%u)", ROOT_UID); + if (tfd == -1 || !sudo_check_temp_file(tfd, tf[i].tfile, user_details.uid, &sb)) { sudo_warnx(U_("%s left unmodified"), tf[i].ofile); if (tfd != -1) close(tfd); From a5be62c68fca656beab7e68590d817154cbf6a4c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 18/31] Move safe open code out of sudo_edit.c and into edit_open.c. --- MANIFEST | 2 + src/Makefile.in | 42 +++-- src/edit_open.c | 404 ++++++++++++++++++++++++++++++++++++++++++++++++ src/sesh.c | 1 + src/sudo_edit.c | 398 +---------------------------------------------- src/sudo_edit.h | 53 +++++++ src/sudo_exec.h | 4 - 7 files changed, 497 insertions(+), 407 deletions(-) create mode 100644 src/edit_open.c create mode 100644 src/sudo_edit.h diff --git a/MANIFEST b/MANIFEST index 623e9c452a..2d7746da8b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -995,6 +995,7 @@ scripts/unanon src/Makefile.in src/conversation.c src/copy_file.c +src/edit_open.c src/env_hooks.c src/exec.c src/exec_common.c @@ -1019,6 +1020,7 @@ src/solaris.c src/sudo.c src/sudo.h src/sudo_edit.c +src/sudo_edit.h src/sudo_exec.h src/sudo_noexec.c src/sudo_plugin_int.h diff --git a/src/Makefile.in b/src/Makefile.in index 82c9f0efa4..06b75ec12b 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2010-2018 Todd C. Miller +# Copyright (c) 2010-2021 # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -123,8 +123,8 @@ SHELL = @SHELL@ PROGS = @PROGS@ -OBJS = conversation.o copy_file.o env_hooks.o exec.o exec_common.o \ - exec_monitor.o exec_nopty.o exec_pty.o get_pty.o hooks.o \ +OBJS = conversation.o copy_file.o edit_open.o env_hooks.o exec.o \ + exec_common.o exec_monitor.o exec_nopty.o exec_pty.o get_pty.o hooks.o \ limits.o load_plugins.o net_ifs.o parse_args.o preserve_fds.o \ signal.o sudo.o sudo_edit.o tcsetpgrp_nobg.o tgetpass.o \ ttyname.o utmp.o @SUDO_OBJS@ @@ -362,6 +362,24 @@ copy_file.i: $(srcdir)/copy_file.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< copy_file.plog: copy_file.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/copy_file.c --i-file $< --output-file $@ +edit_open.o: $(srcdir)/edit_open.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_edit.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/edit_open.c +edit_open.i: $(srcdir)/edit_open.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_edit.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -E -o $@ $(CPPFLAGS) $< +edit_open.plog: edit_open.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/edit_open.c --i-file $< --output-file $@ env_hooks.o: $(srcdir)/env_hooks.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ @@ -643,14 +661,14 @@ selinux.plog: selinux.i sesh.o: $(srcdir)/sesh.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_edit.h \ + $(srcdir)/sudo_exec.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sesh.c sesh.i: $(srcdir)/sesh.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_edit.h \ + $(srcdir)/sudo_exec.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< sesh.plog: sesh.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sesh.c --i-file $< --output-file $@ @@ -711,16 +729,18 @@ sudo_edit.o: $(srcdir)/sudo_edit.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_edit.h \ + $(srcdir)/sudo_exec.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_edit.c sudo_edit.i: $(srcdir)/sudo_edit.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_edit.h \ + $(srcdir)/sudo_exec.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< sudo_edit.plog: sudo_edit.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sudo_edit.c --i-file $< --output-file $@ diff --git a/src/edit_open.c b/src/edit_open.c new file mode 100644 index 0000000000..287bee3811 --- /dev/null +++ b/src/edit_open.c @@ -0,0 +1,404 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2015-2021 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sudo.h" +#include "sudo_edit.h" + +#if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETEUID) + +void +switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) +{ + int serrno = errno; + debug_decl(switch_user, SUDO_DEBUG_EDIT); + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "set uid:gid to %u:%u(%u)", (unsigned int)euid, (unsigned int)egid, + ngroups ? (unsigned int)groups[0] : (unsigned int)egid); + + /* When restoring root, change euid first; otherwise change it last. */ + if (euid == ROOT_UID) { + if (seteuid(ROOT_UID) != 0) + sudo_fatal("seteuid(ROOT_UID)"); + } + if (setegid(egid) != 0) + sudo_fatal("setegid(%d)", (int)egid); + if (ngroups != -1) { + if (sudo_setgroups(ngroups, groups) != 0) + sudo_fatal("setgroups"); + } + if (euid != ROOT_UID) { + if (seteuid(euid) != 0) + sudo_fatal("seteuid(%u)", (unsigned int)euid); + } + errno = serrno; + + debug_return; +} + +#if defined(HAVE_FACCESSAT) && defined(AT_EACCESS) +/* + * Returns true if the open directory fd is owned or writable by the user. + */ +int +dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) +{ + struct stat sb; + int rc; + debug_decl(dir_is_writable, SUDO_DEBUG_EDIT); + + if (fstat(dfd, &sb) == -1) + debug_return_int(-1); + + /* If the user owns the dir we always consider it writable. */ + if (sb.st_uid == ud->uid) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user uid %u matches directory uid %u", (unsigned int)ud->uid, + (unsigned int)sb.st_uid); + debug_return_int(true); + } + + /* Change uid/gid/groups to invoking user, usually needs root perms. */ + if (cd->euid != ROOT_UID) { + if (seteuid(ROOT_UID) != 0) + sudo_fatal("seteuid(ROOT_UID)"); + } + switch_user(ud->uid, ud->gid, ud->ngroups, ud->groups); + + /* Access checks are done using the euid/egid and group vector. */ + rc = faccessat(dfd, ".", W_OK, AT_EACCESS); + + /* Change uid/gid/groups back to target user, may need root perms. */ + if (ud->uid != ROOT_UID) { + if (seteuid(ROOT_UID) != 0) + sudo_fatal("seteuid(ROOT_UID)"); + } + switch_user(cd->euid, cd->egid, cd->ngroups, cd->groups); + + if (rc == 0) + debug_return_int(true); + if (errno == EACCES || errno == EROFS) + debug_return_int(false); + debug_return_int(-1); +} +#else +static bool +group_matches(gid_t target, gid_t gid, int ngroups, GETGROUPS_T *groups) +{ + int i; + debug_decl(group_matches, SUDO_DEBUG_EDIT); + + if (target == gid) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user gid %u matches directory gid %u", (unsigned int)gid, + (unsigned int)target); + debug_return_bool(true); + } + for (i = 0; i < ngroups; i++) { + if (target == groups[i]) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user gid %u matches directory gid %u", (unsigned int)gid, + (unsigned int)target); + debug_return_bool(true); + } + } + debug_return_bool(false); +} + +/* + * Returns true if the open directory fd is owned or writable by the user. + */ +int +dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) +{ + struct stat sb; + debug_decl(dir_is_writable, SUDO_DEBUG_EDIT); + + if (fstat(dfd, &sb) == -1) + debug_return_int(-1); + + /* If the user owns the dir we always consider it writable. */ + if (sb.st_uid == ud->uid) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user uid %u matches directory uid %u", (unsigned int)ud->uid, + (unsigned int)sb.st_uid); + debug_return_int(true); + } + + /* Other writable? */ + if (ISSET(sb.st_mode, S_IWOTH)) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "directory is writable by other"); + debug_return_int(true); + } + + /* Group writable? */ + if (ISSET(sb.st_mode, S_IWGRP)) { + if (group_matches(sb.st_gid, ud->gid, ud->ngroups, ud->groups)) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "directory is writable by one of the user's groups"); + debug_return_int(true); + } + } + + errno = EACCES; + debug_return_int(false); +} +#endif /* HAVE_FACCESSAT && AT_EACCESS */ + +#ifdef O_NOFOLLOW +static int +sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) +{ + debug_decl(sudo_edit_openat_nofollow, SUDO_DEBUG_EDIT); + + debug_return_int(openat(dfd, path, oflags|O_NOFOLLOW, mode)); +} +#else +/* + * Returns true if fd and path don't match or path is a symlink. + * Used on older systems without O_NOFOLLOW. + */ +static bool +sudo_edit_is_symlink(int fd, char *path) +{ + struct stat sb1, sb2; + debug_decl(sudo_edit_is_symlink, SUDO_DEBUG_EDIT); + + /* + * Treat [fl]stat() failure like there was a symlink. + */ + if (fstat(fd, &sb1) == -1 || lstat(path, &sb2) == -1) + debug_return_bool(true); + + /* + * Make sure we did not open a link and that what we opened + * matches what is currently on the file system. + */ + if (S_ISLNK(sb2.st_mode) || + sb1.st_dev != sb2.st_dev || sb1.st_ino != sb2.st_ino) { + debug_return_bool(true); + } + + debug_return_bool(false); +} + +static int +sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) +{ + int fd = -1, odfd = -1; + struct stat sb; + debug_decl(sudo_edit_openat_nofollow, SUDO_DEBUG_EDIT); + + /* Save cwd and chdir to dfd */ + if ((odfd = open(".", O_RDONLY)) == -1) + debug_return_int(-1); + if (fchdir(dfd) == -1) { + close(odfd); + debug_return_int(-1); + } + + /* + * Check if path is a symlink. This is racey but we detect whether + * we lost the race in sudo_edit_is_symlink() after the open. + */ + if (lstat(path, &sb) == -1 && errno != ENOENT) + goto done; + if (S_ISLNK(sb.st_mode)) { + errno = ELOOP; + goto done; + } + + fd = open(path, oflags, mode); + if (fd == -1) + goto done; + + /* + * Post-open symlink check. This will leave a zero-length file if + * O_CREAT was specified but it is too dangerous to try and remove it. + */ + if (sudo_edit_is_symlink(fd, path)) { + close(fd); + fd = -1; + errno = ELOOP; + } + +done: + /* Restore cwd */ + if (odfd != -1) { + if (fchdir(odfd) == -1) + sudo_fatal("%s", U_("unable to restore current working directory")); + close(odfd); + } + + debug_return_int(fd); +} +#endif /* O_NOFOLLOW */ + +static int +sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, + struct user_details *ud, struct command_details *cd) +{ + const int dflags = DIR_OPEN_FLAGS; + int dfd, fd, is_writable; + debug_decl(sudo_edit_open_nonwritable, SUDO_DEBUG_EDIT); + + if (path[0] == '/') { + dfd = open("/", dflags); + path++; + } else { + dfd = open(".", dflags); + if (path[0] == '.' && path[1] == '/') + path += 2; + } + if (dfd == -1) + debug_return_int(-1); + + for (;;) { + char *slash; + int subdfd; + + /* + * Look up one component at a time, avoiding symbolic links in + * writable directories. + */ + is_writable = dir_is_writable(dfd, ud, cd); + if (is_writable == -1) { + close(dfd); + debug_return_int(-1); + } + + path += strspn(path, "/"); + slash = strchr(path, '/'); + if (slash == NULL) + break; + *slash = '\0'; + if (is_writable) + subdfd = sudo_edit_openat_nofollow(dfd, path, dflags, 0); + else + subdfd = openat(dfd, path, dflags, 0); + *slash = '/'; /* restore path */ + close(dfd); + if (subdfd == -1) + debug_return_int(-1); + path = slash + 1; + dfd = subdfd; + } + + if (is_writable) { + close(dfd); + errno = EISDIR; + debug_return_int(-1); + } + + /* + * For "sudoedit /" we will receive ENOENT from openat() and sudoedit + * will try to create a file with an empty name. We treat an empty + * path as the cwd so sudoedit can give a sensible error message. + */ + fd = openat(dfd, *path ? path : ".", oflags, mode); + close(dfd); + debug_return_int(fd); +} + +#ifdef O_NOFOLLOW +int +sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, + struct command_details *cd) +{ + const int sflags = cd ? cd->flags : 0; + int fd; + debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); + + if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) + oflags |= O_NOFOLLOW; + if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && ud->uid != ROOT_UID) { + fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, ud, cd); + } else { + fd = open(path, oflags|O_NONBLOCK, mode); + } + if (fd != -1 && !ISSET(oflags, O_NONBLOCK)) + (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); + debug_return_int(fd); +} +#else +int +sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, + struct command_details *cd) +{ + const int sflags = cd ? cd->flags : 0; + struct stat sb; + int fd; + debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); + + /* + * Check if path is a symlink. This is racey but we detect whether + * we lost the race in sudo_edit_is_symlink() after the file is opened. + */ + if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) { + if (lstat(path, &sb) == -1 && errno != ENOENT) + debug_return_int(-1); + if (S_ISLNK(sb.st_mode)) { + errno = ELOOP; + debug_return_int(-1); + } + } + + if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && ud->uid != ROOT_UID) { + fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, ud, cd); + } else { + fd = open(path, oflags|O_NONBLOCK, mode); + } + if (fd == -1) + debug_return_int(-1); + if (!ISSET(oflags, O_NONBLOCK)) + (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); + + /* + * Post-open symlink check. This will leave a zero-length file if + * O_CREAT was specified but it is too dangerous to try and remove it. + */ + if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW) && sudo_edit_is_symlink(fd, path)) { + close(fd); + fd = -1; + errno = ELOOP; + } + + debug_return_int(fd); +} +#endif /* O_NOFOLLOW */ + +#endif /* HAVE_SETRESUID || HAVE_SETREUID || HAVE_SETEUID */ diff --git a/src/sesh.c b/src/sesh.c index abbef25773..c2bf29ac3b 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -42,6 +42,7 @@ #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" +#include "sudo_edit.h" #include "sudo_exec.h" #include "sudo_fatal.h" #include "sudo_gettext.h" diff --git a/src/sudo_edit.c b/src/sudo_edit.c index ba8e99c128..4e0a38dc00 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -39,6 +38,7 @@ #include #include "sudo.h" +#include "sudo_edit.h" #include "sudo_exec.h" #if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETEUID) @@ -55,146 +55,6 @@ struct tempfile { static char edit_tmpdir[MAX(sizeof(_PATH_VARTMP), sizeof(_PATH_TMP))]; -static void -switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) -{ - int serrno = errno; - debug_decl(switch_user, SUDO_DEBUG_EDIT); - - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "set uid:gid to %u:%u(%u)", (unsigned int)euid, (unsigned int)egid, - ngroups ? (unsigned int)groups[0] : (unsigned int)egid); - - /* When restoring root, change euid first; otherwise change it last. */ - if (euid == ROOT_UID) { - if (seteuid(ROOT_UID) != 0) - sudo_fatal("seteuid(ROOT_UID)"); - } - if (setegid(egid) != 0) - sudo_fatal("setegid(%d)", (int)egid); - if (ngroups != -1) { - if (sudo_setgroups(ngroups, groups) != 0) - sudo_fatal("setgroups"); - } - if (euid != ROOT_UID) { - if (seteuid(euid) != 0) - sudo_fatal("seteuid(%u)", (unsigned int)euid); - } - errno = serrno; - - debug_return; -} - -#if defined(HAVE_FACCESSAT) && defined(AT_EACCESS) -/* - * Returns true if the open directory fd is owned or writable by the user. - */ -static int -dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) -{ - struct stat sb; - int rc; - debug_decl(dir_is_writable, SUDO_DEBUG_EDIT); - - if (fstat(dfd, &sb) == -1) - debug_return_int(-1); - - /* If the user owns the dir we always consider it writable. */ - if (sb.st_uid == ud->uid) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user uid %u matches directory uid %u", (unsigned int)ud->uid, - (unsigned int)sb.st_uid); - debug_return_int(true); - } - - /* Change uid/gid/groups to invoking user, usually needs root perms. */ - if (cd->euid != ROOT_UID) { - if (seteuid(ROOT_UID) != 0) - sudo_fatal("seteuid(ROOT_UID)"); - } - switch_user(ud->uid, ud->gid, ud->ngroups, ud->groups); - - /* Access checks are done using the euid/egid and group vector. */ - rc = faccessat(dfd, ".", W_OK, AT_EACCESS); - - /* Change uid/gid/groups back to target user, may need root perms. */ - if (ud->uid != ROOT_UID) { - if (seteuid(ROOT_UID) != 0) - sudo_fatal("seteuid(ROOT_UID)"); - } - switch_user(cd->euid, cd->egid, cd->ngroups, cd->groups); - - if (rc == 0) - debug_return_int(true); - if (errno == EACCES || errno == EROFS) - debug_return_int(false); - debug_return_int(-1); -} -#else -static bool -group_matches(gid_t target, gid_t gid, int ngroups, GETGROUPS_T *groups) -{ - int i; - debug_decl(group_matches, SUDO_DEBUG_EDIT); - - if (target == gid) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user gid %u matches directory gid %u", (unsigned int)gid, - (unsigned int)target); - debug_return_bool(true); - } - for (i = 0; i < ngroups; i++) { - if (target == groups[i]) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user gid %u matches directory gid %u", (unsigned int)gid, - (unsigned int)target); - debug_return_bool(true); - } - } - debug_return_bool(false); -} - -/* - * Returns true if the open directory fd is owned or writable by the user. - */ -static int -dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) -{ - struct stat sb; - debug_decl(dir_is_writable, SUDO_DEBUG_EDIT); - - if (fstat(dfd, &sb) == -1) - debug_return_int(-1); - - /* If the user owns the dir we always consider it writable. */ - if (sb.st_uid == ud->uid) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user uid %u matches directory uid %u", (unsigned int)ud->uid, - (unsigned int)sb.st_uid); - debug_return_int(true); - } - - /* Other writable? */ - if (ISSET(sb.st_mode, S_IWOTH)) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "directory is writable by other"); - debug_return_int(true); - } - - /* Group writable? */ - if (ISSET(sb.st_mode, S_IWGRP)) { - if (group_matches(sb.st_gid, ud->gid, ud->ngroups, ud->groups)) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "directory is writable by one of the user's groups"); - debug_return_int(true); - } - } - - errno = EACCES; - debug_return_int(false); -} -#endif /* HAVE_FACCESSAT && AT_EACCESS */ - /* * Find our temporary directory, one of /var/tmp, /usr/tmp, or /tmp * Returns true on success, else false; @@ -269,253 +129,6 @@ sudo_edit_mktemp(const char *ofile, char **tfile) debug_return_int(tfd); } -#ifdef O_NOFOLLOW -static int -sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) -{ - debug_decl(sudo_edit_openat_nofollow, SUDO_DEBUG_EDIT); - - debug_return_int(openat(dfd, path, oflags|O_NOFOLLOW, mode)); -} -#else -/* - * Returns true if fd and path don't match or path is a symlink. - * Used on older systems without O_NOFOLLOW. - */ -static bool -sudo_edit_is_symlink(int fd, char *path) -{ - struct stat sb1, sb2; - debug_decl(sudo_edit_is_symlink, SUDO_DEBUG_EDIT); - - /* - * Treat [fl]stat() failure like there was a symlink. - */ - if (fstat(fd, &sb1) == -1 || lstat(path, &sb2) == -1) - debug_return_bool(true); - - /* - * Make sure we did not open a link and that what we opened - * matches what is currently on the file system. - */ - if (S_ISLNK(sb2.st_mode) || - sb1.st_dev != sb2.st_dev || sb1.st_ino != sb2.st_ino) { - debug_return_bool(true); - } - - debug_return_bool(false); -} - -static int -sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) -{ - int fd = -1, odfd = -1; - struct stat sb; - debug_decl(sudo_edit_openat_nofollow, SUDO_DEBUG_EDIT); - - /* Save cwd and chdir to dfd */ - if ((odfd = open(".", O_RDONLY)) == -1) - debug_return_int(-1); - if (fchdir(dfd) == -1) { - close(odfd); - debug_return_int(-1); - } - - /* - * Check if path is a symlink. This is racey but we detect whether - * we lost the race in sudo_edit_is_symlink() after the open. - */ - if (lstat(path, &sb) == -1 && errno != ENOENT) - goto done; - if (S_ISLNK(sb.st_mode)) { - errno = ELOOP; - goto done; - } - - fd = open(path, oflags, mode); - if (fd == -1) - goto done; - - /* - * Post-open symlink check. This will leave a zero-length file if - * O_CREAT was specified but it is too dangerous to try and remove it. - */ - if (sudo_edit_is_symlink(fd, path)) { - close(fd); - fd = -1; - errno = ELOOP; - } - -done: - /* Restore cwd */ - if (odfd != -1) { - if (fchdir(odfd) == -1) - sudo_fatal("%s", U_("unable to restore current working directory")); - close(odfd); - } - - debug_return_int(fd); -} -#endif /* O_NOFOLLOW */ - -/* - * Directory open flags for use with openat(2). - * Use O_SEARCH/O_PATH and/or O_DIRECTORY where possible. - */ -#if defined(O_SEARCH) -# if defined(O_DIRECTORY) -# define DIR_OPEN_FLAGS (O_SEARCH|O_DIRECTORY) -# else -# define DIR_OPEN_FLAGS (O_SEARCH) -# endif -#elif defined(O_PATH) -# if defined(O_DIRECTORY) -# define DIR_OPEN_FLAGS (O_PATH|O_DIRECTORY) -# else -# define DIR_OPEN_FLAGS (O_PATH) -# endif -#elif defined(O_DIRECTORY) -# define DIR_OPEN_FLAGS (O_RDONLY|O_DIRECTORY) -#else -# define DIR_OPEN_FLAGS (O_RDONLY|O_NONBLOCK) -#endif - -static int -sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, - struct command_details *command_details) -{ - const int dflags = DIR_OPEN_FLAGS; - int dfd, fd, is_writable; - debug_decl(sudo_edit_open_nonwritable, SUDO_DEBUG_EDIT); - - if (path[0] == '/') { - dfd = open("/", dflags); - path++; - } else { - dfd = open(".", dflags); - if (path[0] == '.' && path[1] == '/') - path += 2; - } - if (dfd == -1) - debug_return_int(-1); - - for (;;) { - char *slash; - int subdfd; - - /* - * Look up one component at a time, avoiding symbolic links in - * writable directories. - */ - is_writable = dir_is_writable(dfd, &user_details, command_details); - if (is_writable == -1) { - close(dfd); - debug_return_int(-1); - } - - while (path[0] == '/') - path++; - slash = strchr(path, '/'); - if (slash == NULL) - break; - *slash = '\0'; - if (is_writable) - subdfd = sudo_edit_openat_nofollow(dfd, path, dflags, 0); - else - subdfd = openat(dfd, path, dflags, 0); - *slash = '/'; /* restore path */ - close(dfd); - if (subdfd == -1) - debug_return_int(-1); - path = slash + 1; - dfd = subdfd; - } - - if (is_writable) { - close(dfd); - errno = EISDIR; - debug_return_int(-1); - } - - /* - * For "sudoedit /" we will receive ENOENT from openat() and sudoedit - * will try to create a file with an empty name. We treat an empty - * path as the cwd so sudoedit can give a sensible error message. - */ - fd = openat(dfd, *path ? path : ".", oflags, mode); - close(dfd); - debug_return_int(fd); -} - -#ifdef O_NOFOLLOW -static int -sudo_edit_open(char *path, int oflags, mode_t mode, - struct command_details *command_details) -{ - const int sflags = command_details ? command_details->flags : 0; - int fd; - debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); - - if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) - oflags |= O_NOFOLLOW; - if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_details.uid != ROOT_UID) { - fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, - command_details); - } else { - fd = open(path, oflags|O_NONBLOCK, mode); - } - if (fd != -1 && !ISSET(oflags, O_NONBLOCK)) - (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); - debug_return_int(fd); -} -#else -static int -sudo_edit_open(char *path, int oflags, mode_t mode, - struct command_details *command_details) -{ - const int sflags = command_details ? command_details->flags : 0; - struct stat sb; - int fd; - debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); - - /* - * Check if path is a symlink. This is racey but we detect whether - * we lost the race in sudo_edit_is_symlink() after the file is opened. - */ - if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) { - if (lstat(path, &sb) == -1 && errno != ENOENT) - debug_return_int(-1); - if (S_ISLNK(sb.st_mode)) { - errno = ELOOP; - debug_return_int(-1); - } - } - - if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_details.uid != ROOT_UID) { - fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, - command_details); - } else { - fd = open(path, oflags|O_NONBLOCK, mode); - } - if (fd == -1) - debug_return_int(-1); - if (!ISSET(oflags, O_NONBLOCK)) - (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); - - /* - * Post-open symlink check. This will leave a zero-length file if - * O_CREAT was specified but it is too dangerous to try and remove it. - */ - if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW) && sudo_edit_is_symlink(fd, path)) { - close(fd); - fd = -1; - errno = ELOOP; - } - - debug_return_int(fd); -} -#endif /* O_NOFOLLOW */ - /* * Create temporary copies of files[] and store the temporary path name * along with the original name, size and mtime in tf. @@ -540,7 +153,7 @@ sudo_edit_create_tfiles(struct command_details *command_details, switch_user(command_details->euid, command_details->egid, command_details->ngroups, command_details->groups); ofd = sudo_edit_open(files[i], O_RDONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, command_details); if (ofd != -1 || errno == ENOENT) { if (ofd == -1) { /* @@ -562,7 +175,8 @@ sudo_edit_create_tfiles(struct command_details *command_details, *slash = '\0'; SET(command_details->flags, CD_SUDOEDIT_FOLLOW); dfd = sudo_edit_open(files[i], DIR_OPEN_FLAGS, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, + command_details); command_details->flags = sflags; if (dfd != -1) { if (fstat(dfd, &sb) == 0 && S_ISDIR(sb.st_mode)) { @@ -672,7 +286,7 @@ sudo_edit_copy_tfiles(struct command_details *command_details, if (seteuid(user_details.uid) != 0) sudo_fatal("seteuid(%u)", (unsigned int)user_details.uid); tfd = sudo_edit_open(tf[i].tfile, O_RDONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, NULL); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, NULL); if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, @@ -701,7 +315,7 @@ sudo_edit_copy_tfiles(struct command_details *command_details, command_details->ngroups, command_details->groups); oldmask = umask(command_details->umask); ofd = sudo_edit_open(tf[i].ofile, O_WRONLY|O_CREAT, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, command_details); umask(oldmask); switch_user(ROOT_UID, user_details.egid, user_details.ngroups, user_details.groups); diff --git a/src/sudo_edit.h b/src/sudo_edit.h new file mode 100644 index 0000000000..9a81dfd130 --- /dev/null +++ b/src/sudo_edit.h @@ -0,0 +1,53 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2021 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SUDO_EDIT_H +#define SUDO_EDIT_H + +/* + * Directory open flags for use with openat(2). + * Use O_SEARCH/O_PATH and/or O_DIRECTORY where possible. + */ +#if defined(O_SEARCH) +# if defined(O_DIRECTORY) +# define DIR_OPEN_FLAGS (O_SEARCH|O_DIRECTORY) +# else +# define DIR_OPEN_FLAGS (O_SEARCH) +# endif +#elif defined(O_PATH) +# if defined(O_DIRECTORY) +# define DIR_OPEN_FLAGS (O_PATH|O_DIRECTORY) +# else +# define DIR_OPEN_FLAGS (O_PATH) +# endif +#elif defined(O_DIRECTORY) +# define DIR_OPEN_FLAGS (O_RDONLY|O_DIRECTORY) +#else +# define DIR_OPEN_FLAGS (O_RDONLY|O_NONBLOCK) +#endif + +/* copy_file.c */ +int sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, int dst_fd, off_t dst_len); +bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb); + +/* edit_open.c */ +void switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups); +int sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, struct command_details *cd); +int dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd); + +#endif /* SUDO_EDIT_H */ diff --git a/src/sudo_exec.h b/src/sudo_exec.h index ec213a6f0b..1e086d2cc4 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -86,10 +86,6 @@ struct command_details; struct command_status; struct stat; -/* copy_file.c */ -int sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, int dst_fd, off_t dst_len); -bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb); - /* exec.c */ void exec_cmnd(struct command_details *details, int errfd); void terminate_command(pid_t pid, bool use_pgrp); From 46e2d7290a0df7b7257e8489181ade5095e9cae5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 19/31] Add directory writability checks for SELinux RBAC sudoedit. These were never added to the SELinux RBAC path. --- src/Makefile.in | 20 +++--- src/edit_open.c | 53 +++++++++++++++ src/sesh.c | 176 ++++++++++++++++++++++++++++++++++++++---------- src/sudo_edit.c | 105 +++++++++++++++++------------ src/sudo_edit.h | 1 + 5 files changed, 267 insertions(+), 88 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 06b75ec12b..772a5d63aa 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -133,7 +133,7 @@ IOBJS = $(OBJS:.o=.i) sesh.i POBJS = $(IOBJS:.i=.plog) -SESH_OBJS = copy_file.o exec_common.o sesh.o +SESH_OBJS = copy_file.o edit_open.o exec_common.o sesh.o CHECK_NOEXEC_OBJS = check_noexec.o exec_common.o @@ -659,16 +659,18 @@ selinux.i: $(srcdir)/selinux.c $(incdir)/compat/stdbool.h \ selinux.plog: selinux.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/selinux.c --i-file $< --output-file $@ sesh.o: $(srcdir)/sesh.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_edit.h \ - $(srcdir)/sudo_exec.h $(top_builddir)/config.h + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/sudo.h $(srcdir)/sudo_edit.h $(srcdir)/sudo_exec.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sesh.c sesh.i: $(srcdir)/sesh.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_edit.h \ - $(srcdir)/sudo_exec.h $(top_builddir)/config.h + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/sudo.h $(srcdir)/sudo_edit.h $(srcdir)/sudo_exec.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< sesh.plog: sesh.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sesh.c --i-file $< --output-file $@ diff --git a/src/edit_open.c b/src/edit_open.c index 287bee3811..a30c5f4d19 100644 --- a/src/edit_open.c +++ b/src/edit_open.c @@ -401,4 +401,57 @@ sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, } #endif /* O_NOFOLLOW */ +/* + * Verify that the parent dir of a new file exists and is not writable + * by the user. This fails early so the user knows ahead of time if the + * edit won't succeed. Additional checks are performed when copying the + * temporary file back to the origin so there are no TOCTOU issues. + * Does not modify the value of errno. + */ +bool +sudo_edit_parent_valid(char *path, struct user_details *ud, + struct command_details *cd) +{ + const int serrno = errno; + const int sflags = cd->flags; + struct stat sb; + bool ret = false; + char *slash; + int dfd; + debug_decl(sudo_edit_parent_valid, SUDO_DEBUG_EDIT); + + /* Get dirname of path (the slash is restored later). */ + slash = strrchr(path, '/'); + if (slash == NULL) { + /* cwd */ + path = "."; + } else if (slash == path) { + path = "/"; + slash = NULL; + } else { + *slash = '\0'; + } + + /* + * The parent directory is allowed to be a symbolic link unless + * *its* parent is writable and CD_SUDOEDIT_CHECK is set. + */ + SET(cd->flags, CD_SUDOEDIT_FOLLOW); + dfd = sudo_edit_open(path, DIR_OPEN_FLAGS, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, + ud, cd); + cd->flags = sflags; + if (dfd != -1) { + if (fstat(dfd, &sb) == 0 && S_ISDIR(sb.st_mode)) + ret = true; + close(dfd); + } + if (slash != NULL) + *slash = '/'; + + /* Restore errno. */ + errno = serrno; + + debug_return_bool(ret); +} + #endif /* HAVE_SETRESUID || HAVE_SETREUID || HAVE_SETEUID */ diff --git a/src/sesh.c b/src/sesh.c index c2bf29ac3b..3a1b596eb1 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -39,15 +39,9 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ -#include "sudo_compat.h" -#include "sudo_conf.h" -#include "sudo_debug.h" -#include "sudo_edit.h" +#include "sudo.h" #include "sudo_exec.h" -#include "sudo_fatal.h" -#include "sudo_gettext.h" -#include "sudo_plugin.h" -#include "sudo_util.h" +#include "sudo_edit.h" sudo_dso_public int main(int argc, char *argv[], char *envp[]); @@ -130,20 +124,85 @@ main(int argc, char *argv[], char *envp[]) _exit(ret); } +/* + * Destructively parse a string in the format: + * uid:gid:groups,... + * + * On success, fills in ud and returns true, else false. + */ +static bool +parse_user(char *userstr, struct user_details *ud) +{ + char *cp, *ep; + const char *errstr; + debug_decl(parse_user, SUDO_DEBUG_EDIT); + + /* UID */ + cp = userstr; + if ((ep = strchr(cp, ':')) == NULL) { + sudo_warnx(U_("%s: %s"), cp, U_("invalid value")); + debug_return_bool(false); + } + *ep++ = '\0'; + ud->uid = sudo_strtoid(cp, &errstr); + if (errstr != NULL) { + sudo_warnx(U_("%s: %s"), cp, errstr); + debug_return_bool(false); + } + + /* GID */ + cp = ep; + if ((ep = strchr(cp, ':')) == NULL) { + sudo_warnx(U_("%s: %s"), cp, U_("invalid value")); + debug_return_bool(false); + } + *ep++ = '\0'; + ud->gid = sudo_strtoid(cp, &errstr); + if (errstr != NULL) { + sudo_warnx(U_("%s: %s"), cp, errstr); + debug_return_bool(false); + } + + /* group vector */ + cp = ep; + ud->ngroups = sudo_parse_gids(cp, NULL, &ud->groups); + if (ud->ngroups == -1) + debug_return_bool(false); + + debug_return_bool(true); +} + static int sesh_sudoedit(int argc, char *argv[]) { - int i, oflags_src, oflags_dst, post, ret = SESH_ERR_FAILURE; - int fd_src = -1, fd_dst = -1, follow = 0; - struct stat sb; + int i, post, ret = SESH_ERR_FAILURE; + int fd_src = -1, fd_dst = -1; + struct command_details command_details; + struct user_details edit_user; struct timespec times[2]; + struct stat sb; debug_decl(sesh_sudoedit, SUDO_DEBUG_EDIT); + memset(&edit_user, 0, sizeof(edit_user)); + memset(&command_details, 0, sizeof(command_details)); + command_details.flags = CD_SUDOEDIT_FOLLOW; + /* Check for -h flag (don't follow links). */ - if (strcmp(argv[2], "-h") == 0) { + if (argv[2] != NULL && strcmp(argv[2], "-h") == 0) { argv++; argc--; - follow = O_NOFOLLOW; + CLR(command_details.flags, CD_SUDOEDIT_FOLLOW); + } + + /* Check for -w flag (disallow directories writable by the user). */ + if (argv[2] != NULL && strcmp(argv[2], "-w") == 0) { + SET(command_details.flags, CD_SUDOEDIT_CHECKDIR); + + /* Parse uid:gid:gid1,gid2,... */ + if (argv[3] == NULL || !parse_user(argv[3], &edit_user)) + debug_return_int(SESH_ERR_FAILURE); + argv += 2; + argc -= 2; } if (argc < 3) @@ -175,42 +234,87 @@ sesh_sudoedit(int argc, char *argv[]) debug_return_int(SESH_ERR_BAD_PATHS); /* - * In the pre-editing stage, use O_EXCL to ensure that the temporary - * files are created by us and that we are not opening any symlinks. - * In the post-editing stage, use O_NOFOLLOW so we don't follow symlinks - * when opening the temporary files. + * sudoedit runs us with the effective user-ID and group-ID of + * the target user as well as with the target user's group list. */ - oflags_src = O_RDONLY|(post ? O_NONBLOCK|O_NOFOLLOW : follow); - oflags_dst = O_WRONLY|O_CREAT|(post ? follow : O_EXCL); + command_details.uid = command_details.euid = geteuid(); + command_details.gid = command_details.egid = getegid(); + command_details.ngroups = getgroups(0, NULL); + if (command_details.ngroups > 0) { + command_details.groups = reallocarray(NULL, command_details.ngroups, + sizeof(GETGROUPS_T)); + if (command_details.groups == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_int(SESH_ERR_FAILURE); + } + if (getgroups(command_details.ngroups, command_details.groups) < 0) { + sudo_warn("%s", U_("unable to get group list")); + debug_return_int(SESH_ERR_FAILURE); + } + } + for (i = 0; i < argc - 1; i += 2) { - const char *path_src = argv[i]; - const char *path_dst = argv[i + 1]; + char *path_src = argv[i]; + char *path_dst = argv[i + 1]; /* - * Try to open the source file for reading. If it - * doesn't exist, that's OK, we'll create an empty - * destination file. + * Try to open the source (original or temporary) file for reading. + * If it doesn't exist, we'll create an empty destination file. */ - if ((fd_src = open(path_src, oflags_src, S_IRUSR|S_IWUSR)) < 0) { - if (errno != ENOENT) { - sudo_warn("%s", path_src); + if (post) { + fd_src = open(path_src, O_RDONLY|O_NONBLOCK|O_NOFOLLOW); + } else { + fd_src = sudo_edit_open(path_src, post ? O_RDONLY|O_NOFOLLOW : O_RDONLY, + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &edit_user, &command_details); + } + if (fd_src == -1) { + if (post || errno != ENOENT) { + if (errno == ELOOP) { + sudo_warnx(U_("%s: editing symbolic links is not " + "permitted"), path_src); + } else if (errno == EISDIR) { + sudo_warnx(U_("%s: editing files in a writable directory " + "is not permitted"), path_src); + } else { + sudo_warn("%s", path_src); + } if (post) { ret = SESH_ERR_SOME_FILES; goto nocleanup; } else goto cleanup_0; } + /* New file, verify parent dir exists and is not writable. */ + if (!sudo_edit_parent_valid(path_src, &edit_user, &command_details)) + goto cleanup_0; } if (post) { /* Make sure the temporary file is safe and has the proper owner. */ - if (!sudo_check_temp_file(fd_src, path_src, geteuid(), &sb)) { + if (!sudo_check_temp_file(fd_src, path_src, command_details.uid, &sb)) { ret = SESH_ERR_SOME_FILES; goto nocleanup; } - fcntl(fd_src, F_SETFL, fcntl(fd_src, F_GETFL, 0) & ~O_NONBLOCK); - } + (void) fcntl(fd_src, F_SETFL, fcntl(fd_src, F_GETFL, 0) & ~O_NONBLOCK); - if ((fd_dst = open(path_dst, oflags_dst, post ? - (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) : (S_IRUSR|S_IWUSR))) < 0) { + /* Create destination file. */ + fd_dst = sudo_edit_open(path_dst, O_WRONLY|O_CREAT, + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &edit_user, &command_details); + } else { + if (fd_src == -1) { + /* New file. */ + memset(&sb, 0, sizeof(sb)); + } else if (fstat(fd_src, &sb) == -1 || !S_ISREG(sb.st_mode)) { + sudo_warnx(U_("%s: not a regular file"), path_src); + goto cleanup_0; + } + + /* + * Create temporary file using O_EXCL to ensure that temporary + * files are created by us and that we do not open any symlinks. + */ + fd_dst = open(path_dst, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); + } + if (fd_dst == -1) { /* error - cleanup */ sudo_warn("%s", path_dst); if (post) { @@ -246,9 +350,7 @@ sesh_sudoedit(int argc, char *argv[]) } if (!post) { - if (fd_src == -1 || fstat(fd_src, &sb) != 0) - memset(&sb, 0, sizeof(sb)); - /* Make mtime on temp file match src. */ + /* Make mtime on temp file match src (sb filled in above). */ mtim_get(&sb, times[0]); times[1].tv_sec = times[0].tv_sec; times[1].tv_nsec = times[0].tv_nsec; @@ -276,7 +378,7 @@ sesh_sudoedit(int argc, char *argv[]) close(fd_dst); if (fd_src != -1) close(fd_src); - return(ret); + debug_return_int(ret); cleanup_0: /* Remove temporary files (post=0) */ for (i = 0; i < argc - 1; i += 2) @@ -285,5 +387,5 @@ sesh_sudoedit(int argc, char *argv[]) close(fd_dst); if (fd_src != -1) close(fd_src); - return(SESH_ERR_NO_FILES); + debug_return_int(SESH_ERR_NO_FILES); } diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 4e0a38dc00..8fae0fc599 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -155,44 +155,13 @@ sudo_edit_create_tfiles(struct command_details *command_details, ofd = sudo_edit_open(files[i], O_RDONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, command_details); if (ofd != -1 || errno == ENOENT) { - if (ofd == -1) { - /* - * New file, verify parent dir exists unless in cwd. - * This fails early so the user knows ahead of time if the - * edit won't succeed. Additional checks are performed - * when copying the temporary file back to the origin. - */ - char *slash = strrchr(files[i], '/'); - if (slash != NULL && slash != files[i]) { - const int sflags = command_details->flags; - const int serrno = errno; - int dfd; - - /* - * The parent directory is allowed to be a symbolic - * link as long as *its* parent is not writable. - */ - *slash = '\0'; - SET(command_details->flags, CD_SUDOEDIT_FOLLOW); - dfd = sudo_edit_open(files[i], DIR_OPEN_FLAGS, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, - command_details); - command_details->flags = sflags; - if (dfd != -1) { - if (fstat(dfd, &sb) == 0 && S_ISDIR(sb.st_mode)) { - memset(&sb, 0, sizeof(sb)); - rc = 0; - } - close(dfd); - } - *slash = '/'; - errno = serrno; - } else { - memset(&sb, 0, sizeof(sb)); - rc = 0; - } - } else { + if (ofd != -1) { rc = fstat(ofd, &sb); + } else { + /* New file, verify parent dir exists and is not writable. */ + memset(&sb, 0, sizeof(sb)); + if (sudo_edit_parent_valid(files[i], &user_details, command_details)) + rc = 0; } } switch_user(ROOT_UID, user_details.egid, @@ -382,11 +351,42 @@ selinux_run_helper(uid_t uid, gid_t gid, int ngroups, GETGROUPS_T *groups, debug_return_int(ret); } +static char * +selinux_fmt_sudo_user(void) +{ + char *cp, *user_str; + size_t user_size; + int i, len; + debug_decl(selinux_fmt_sudo_user, SUDO_DEBUG_EDIT); + + user_size = (MAX_UID_T_LEN + 1) * (2 + user_details.ngroups); + if ((user_str = malloc(user_size)) == NULL) + debug_return_ptr(NULL); + + /* UID:GID: */ + len = snprintf(user_str, user_size, "%u:%u:", + (unsigned int)user_details.uid, (unsigned int)user_details.gid); + if (len < 0 || (size_t)len >= user_size) + sudo_fatalx(U_("internal error, %s overflow"), __func__); + + /* Supplementary GIDs */ + cp = user_str + len; + for (i = 0; i < user_details.ngroups; i++) { + len = snprintf(cp, user_size - (cp - user_str), "%s%u", + i ? "," : "", (unsigned int)user_details.groups[i]); + if (len < 0 || (size_t)len >= user_size - (cp - user_str)) + sudo_fatalx(U_("internal error, %s overflow"), __func__); + cp += len; + } + + debug_return_ptr(user_str); +} + static int selinux_edit_create_tfiles(struct command_details *command_details, struct tempfile *tf, char *files[], int nfiles) { - char **sesh_args, **sesh_ap; + char **sesh_args, **sesh_ap, *user_str = NULL; int i, error, sesh_nargs, ret = -1; struct stat sb; debug_decl(selinux_edit_create_tfiles, SUDO_DEBUG_EDIT); @@ -395,7 +395,7 @@ selinux_edit_create_tfiles(struct command_details *command_details, debug_return_int(0); /* Construct common args for sesh */ - sesh_nargs = 4 + (nfiles * 2) + 1; + sesh_nargs = 6 + (nfiles * 2) + 1; sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); if (sesh_args == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); @@ -405,6 +405,14 @@ selinux_edit_create_tfiles(struct command_details *command_details, *sesh_ap++ = "-e"; if (!ISSET(command_details->flags, CD_SUDOEDIT_FOLLOW)) *sesh_ap++ = "-h"; + if (ISSET(command_details->flags, CD_SUDOEDIT_CHECKDIR)) { + if ((user_str = selinux_fmt_sudo_user()) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + *sesh_ap++ = "-w"; + *sesh_ap++ = user_str; + } *sesh_ap++ = "0"; for (i = 0; i < nfiles; i++) { @@ -475,6 +483,7 @@ selinux_edit_create_tfiles(struct command_details *command_details, done: /* Contents of tf will be freed by caller. */ free(sesh_args); + free(user_str); debug_return_int(ret); } @@ -483,7 +492,7 @@ static int selinux_edit_copy_tfiles(struct command_details *command_details, struct tempfile *tf, int nfiles, struct timespec *times) { - char **sesh_args, **sesh_ap; + char **sesh_args, **sesh_ap, *user_str = NULL; int i, error, sesh_nargs, ret = 1; int tfd = -1; struct timespec ts; @@ -494,14 +503,22 @@ selinux_edit_copy_tfiles(struct command_details *command_details, debug_return_int(0); /* Construct common args for sesh */ - sesh_nargs = 3 + (nfiles * 2) + 1; + sesh_nargs = 5 + (nfiles * 2) + 1; sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); if (sesh_args == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_int(-1); + goto done; } *sesh_ap++ = "sesh"; *sesh_ap++ = "-e"; + if (ISSET(command_details->flags, CD_SUDOEDIT_CHECKDIR)) { + if ((user_str = selinux_fmt_sudo_user()) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + *sesh_ap++ = "-w"; + *sesh_ap++ = user_str; + } *sesh_ap++ = "1"; /* Construct args for sesh -e 1 */ @@ -564,7 +581,11 @@ selinux_edit_copy_tfiles(struct command_details *command_details, if (ret != 0) sudo_warnx(U_("contents of edit session left in %s"), edit_tmpdir); } + +done: + /* Contents of tf will be freed by caller. */ free(sesh_args); + free(user_str); debug_return_int(ret); } diff --git a/src/sudo_edit.h b/src/sudo_edit.h index 9a81dfd130..69f62b1ce1 100644 --- a/src/sudo_edit.h +++ b/src/sudo_edit.h @@ -49,5 +49,6 @@ bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb void switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups); int sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, struct command_details *cd); int dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd); +bool sudo_edit_parent_valid(char *path, struct user_details *ud, struct command_details *cd); #endif /* SUDO_EDIT_H */ From ece5adc6626d698f4fcbd7f08a361f2c19153ae4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 20/31] Add struct sudo_cred to hold the invoking or runas user credentials. We can use this when we need to pass around credential info instead of the user_details and command_details structs. --- src/edit_open.c | 75 ++++++++++++++-------------- src/exec.c | 14 +++--- src/exec_pty.c | 4 +- src/sesh.c | 50 +++++++++---------- src/sudo.c | 126 ++++++++++++++++++++++++------------------------ src/sudo.h | 26 +++++----- src/sudo_edit.c | 84 +++++++++++++++----------------- src/sudo_edit.h | 7 +-- src/tgetpass.c | 10 ++-- 9 files changed, 194 insertions(+), 202 deletions(-) diff --git a/src/edit_open.c b/src/edit_open.c index a30c5f4d19..3bbcc2cd85 100644 --- a/src/edit_open.c +++ b/src/edit_open.c @@ -47,7 +47,7 @@ switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "set uid:gid to %u:%u(%u)", (unsigned int)euid, (unsigned int)egid, - ngroups ? (unsigned int)groups[0] : (unsigned int)egid); + ngroups > 0 ? (unsigned int)groups[0] : (unsigned int)egid); /* When restoring root, change euid first; otherwise change it last. */ if (euid == ROOT_UID) { @@ -74,7 +74,7 @@ switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) * Returns true if the open directory fd is owned or writable by the user. */ int -dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) +dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred) { struct stat sb; int rc; @@ -84,29 +84,31 @@ dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) debug_return_int(-1); /* If the user owns the dir we always consider it writable. */ - if (sb.st_uid == ud->uid) { + if (sb.st_uid == user_cred->uid) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user uid %u matches directory uid %u", (unsigned int)ud->uid, - (unsigned int)sb.st_uid); + "user uid %u matches directory uid %u", + (unsigned int)user_cred->uid, (unsigned int)sb.st_uid); debug_return_int(true); } /* Change uid/gid/groups to invoking user, usually needs root perms. */ - if (cd->euid != ROOT_UID) { + if (run_cred->euid != ROOT_UID) { if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); } - switch_user(ud->uid, ud->gid, ud->ngroups, ud->groups); + switch_user(user_cred->uid, user_cred->gid, user_cred->ngroups, + user_cred->groups); /* Access checks are done using the euid/egid and group vector. */ rc = faccessat(dfd, ".", W_OK, AT_EACCESS); /* Change uid/gid/groups back to target user, may need root perms. */ - if (ud->uid != ROOT_UID) { + if (user_cred->uid != ROOT_UID) { if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); } - switch_user(cd->euid, cd->egid, cd->ngroups, cd->groups); + switch_user(run_cred->euid, run_cred->egid, run_cred->ngroups, + run_cred->groups); if (rc == 0) debug_return_int(true); @@ -116,21 +118,21 @@ dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) } #else static bool -group_matches(gid_t target, gid_t gid, int ngroups, GETGROUPS_T *groups) +group_matches(gid_t target, struct sudo_cred *cred) { int i; debug_decl(group_matches, SUDO_DEBUG_EDIT); - if (target == gid) { + if (target == cred->gid) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user gid %u matches directory gid %u", (unsigned int)gid, + "user gid %u matches directory gid %u", (unsigned int)cred->gid, (unsigned int)target); debug_return_bool(true); } - for (i = 0; i < ngroups; i++) { - if (target == groups[i]) { + for (i = 0; i < cred->ngroups; i++) { + if (target == cred->groups[i]) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user gid %u matches directory gid %u", (unsigned int)gid, + "user gid %u matches directory gid %u", cred->groups[i], (unsigned int)target); debug_return_bool(true); } @@ -142,7 +144,7 @@ group_matches(gid_t target, gid_t gid, int ngroups, GETGROUPS_T *groups) * Returns true if the open directory fd is owned or writable by the user. */ int -dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) +dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred) { struct stat sb; debug_decl(dir_is_writable, SUDO_DEBUG_EDIT); @@ -151,10 +153,10 @@ dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) debug_return_int(-1); /* If the user owns the dir we always consider it writable. */ - if (sb.st_uid == ud->uid) { + if (sb.st_uid == user_cred->uid) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "user uid %u matches directory uid %u", (unsigned int)ud->uid, - (unsigned int)sb.st_uid); + "user uid %u matches directory uid %u", + (unsigned int)user_cred->uid, (unsigned int)sb.st_uid); debug_return_int(true); } @@ -167,7 +169,7 @@ dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) /* Group writable? */ if (ISSET(sb.st_mode, S_IWGRP)) { - if (group_matches(sb.st_gid, ud->gid, ud->ngroups, ud->groups)) { + if (group_matches(sb.st_gid, user_cred)) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "directory is writable by one of the user's groups"); debug_return_int(true); @@ -270,7 +272,7 @@ sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) static int sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, - struct user_details *ud, struct command_details *cd) + struct sudo_cred *user_cred, struct sudo_cred *run_cred) { const int dflags = DIR_OPEN_FLAGS; int dfd, fd, is_writable; @@ -295,7 +297,7 @@ sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, * Look up one component at a time, avoiding symbolic links in * writable directories. */ - is_writable = dir_is_writable(dfd, ud, cd); + is_writable = dir_is_writable(dfd, user_cred, run_cred); if (is_writable == -1) { close(dfd); debug_return_int(-1); @@ -336,17 +338,17 @@ sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, #ifdef O_NOFOLLOW int -sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, - struct command_details *cd) +sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, + struct sudo_cred *user_cred, struct sudo_cred *run_cred) { - const int sflags = cd ? cd->flags : 0; int fd; debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) oflags |= O_NOFOLLOW; - if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && ud->uid != ROOT_UID) { - fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, ud, cd); + if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_cred->uid != ROOT_UID) { + fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, + user_cred, run_cred); } else { fd = open(path, oflags|O_NONBLOCK, mode); } @@ -356,10 +358,9 @@ sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, } #else int -sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, - struct command_details *cd) +sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, + struct sudo_cred *user_cred, struct sudo_cred *run_cred) { - const int sflags = cd ? cd->flags : 0; struct stat sb; int fd; debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); @@ -377,8 +378,9 @@ sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, } } - if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && ud->uid != ROOT_UID) { - fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, ud, cd); + if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_cred->uid != ROOT_UID) { + fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, + user_cred, run_cred); } else { fd = open(path, oflags|O_NONBLOCK, mode); } @@ -409,11 +411,10 @@ sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, * Does not modify the value of errno. */ bool -sudo_edit_parent_valid(char *path, struct user_details *ud, - struct command_details *cd) +sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, + struct sudo_cred *run_cred) { const int serrno = errno; - const int sflags = cd->flags; struct stat sb; bool ret = false; char *slash; @@ -436,10 +437,8 @@ sudo_edit_parent_valid(char *path, struct user_details *ud, * The parent directory is allowed to be a symbolic link unless * *its* parent is writable and CD_SUDOEDIT_CHECK is set. */ - SET(cd->flags, CD_SUDOEDIT_FOLLOW); dfd = sudo_edit_open(path, DIR_OPEN_FLAGS, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, - ud, cd); - cd->flags = sflags; + sflags|CD_SUDOEDIT_FOLLOW, user_cred, run_cred); if (dfd != -1) { if (fstat(dfd, &sb) == 0 && S_ISDIR(sb.st_mode)) ret = true; diff --git a/src/exec.c b/src/exec.c index 3c4e749c17..ffee016aa8 100644 --- a/src/exec.c +++ b/src/exec.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2020 Todd C. Miller + * Copyright (c) 2009-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -179,22 +179,22 @@ exec_setup(struct command_details *details, int errfd) unlimit_nproc(); #if defined(HAVE_SETRESUID) - if (setresuid(details->uid, details->euid, details->euid) != 0) { + if (setresuid(details->cred.uid, details->cred.euid, details->cred.euid) != 0) { sudo_warn(U_("unable to change to runas uid (%u, %u)"), - (unsigned int)details->uid, (unsigned int)details->euid); + (unsigned int)details->cred.uid, (unsigned int)details->cred.euid); goto done; } #elif defined(HAVE_SETREUID) - if (setreuid(details->uid, details->euid) != 0) { + if (setreuid(details->cred.uid, details->cred.euid) != 0) { sudo_warn(U_("unable to change to runas uid (%u, %u)"), - (unsigned int)details->uid, (unsigned int)details->euid); + (unsigned int)details->cred.uid, (unsigned int)details->cred.euid); goto done; } #else /* Cannot support real user-ID that is different from effective user-ID. */ - if (setuid(details->euid) != 0) { + if (setuid(details->cred.euid) != 0) { sudo_warn(U_("unable to change to runas uid (%u, %u)"), - (unsigned int)details->euid, (unsigned int)details->euid); + (unsigned int)details->cred.euid, (unsigned int)details->cred.euid); goto done; } #endif /* !HAVE_SETRESUID && !HAVE_SETREUID */ diff --git a/src/exec_pty.c b/src/exec_pty.c index 40ddbeb98c..cfe4929dd2 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2020 Todd C. Miller + * Copyright (c) 2009-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -148,7 +148,7 @@ pty_setup(struct command_details *details, const char *tty) } if (!get_pty(&io_fds[SFD_LEADER], &io_fds[SFD_FOLLOWER], - ptyname, sizeof(ptyname), details->euid)) + ptyname, sizeof(ptyname), details->cred.euid)) sudo_fatal("%s", U_("unable to allocate pty")); /* Update tty name in command details (used by SELinux and AIX). */ diff --git a/src/sesh.c b/src/sesh.c index 3a1b596eb1..4efe06556f 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -131,7 +131,7 @@ main(int argc, char *argv[], char *envp[]) * On success, fills in ud and returns true, else false. */ static bool -parse_user(char *userstr, struct user_details *ud) +parse_user(char *userstr, struct sudo_cred *cred) { char *cp, *ep; const char *errstr; @@ -144,7 +144,7 @@ parse_user(char *userstr, struct user_details *ud) debug_return_bool(false); } *ep++ = '\0'; - ud->uid = sudo_strtoid(cp, &errstr); + cred->uid = cred->euid = sudo_strtoid(cp, &errstr); if (errstr != NULL) { sudo_warnx(U_("%s: %s"), cp, errstr); debug_return_bool(false); @@ -157,7 +157,7 @@ parse_user(char *userstr, struct user_details *ud) debug_return_bool(false); } *ep++ = '\0'; - ud->gid = sudo_strtoid(cp, &errstr); + cred->gid = cred->egid = sudo_strtoid(cp, &errstr); if (errstr != NULL) { sudo_warnx(U_("%s: %s"), cp, errstr); debug_return_bool(false); @@ -165,8 +165,8 @@ parse_user(char *userstr, struct user_details *ud) /* group vector */ cp = ep; - ud->ngroups = sudo_parse_gids(cp, NULL, &ud->groups); - if (ud->ngroups == -1) + cred->ngroups = sudo_parse_gids(cp, NULL, &cred->groups); + if (cred->ngroups == -1) debug_return_bool(false); debug_return_bool(true); @@ -176,30 +176,29 @@ static int sesh_sudoedit(int argc, char *argv[]) { int i, post, ret = SESH_ERR_FAILURE; - int fd_src = -1, fd_dst = -1; - struct command_details command_details; - struct user_details edit_user; + int edit_flags, fd_src = -1, fd_dst = -1; + struct sudo_cred user_cred, run_cred; struct timespec times[2]; struct stat sb; debug_decl(sesh_sudoedit, SUDO_DEBUG_EDIT); - memset(&edit_user, 0, sizeof(edit_user)); - memset(&command_details, 0, sizeof(command_details)); - command_details.flags = CD_SUDOEDIT_FOLLOW; + memset(&user_cred, 0, sizeof(user_cred)); + memset(&run_cred, 0, sizeof(run_cred)); + edit_flags = CD_SUDOEDIT_FOLLOW; /* Check for -h flag (don't follow links). */ if (argv[2] != NULL && strcmp(argv[2], "-h") == 0) { argv++; argc--; - CLR(command_details.flags, CD_SUDOEDIT_FOLLOW); + CLR(edit_flags, CD_SUDOEDIT_FOLLOW); } /* Check for -w flag (disallow directories writable by the user). */ if (argv[2] != NULL && strcmp(argv[2], "-w") == 0) { - SET(command_details.flags, CD_SUDOEDIT_CHECKDIR); + SET(edit_flags, CD_SUDOEDIT_CHECKDIR); /* Parse uid:gid:gid1,gid2,... */ - if (argv[3] == NULL || !parse_user(argv[3], &edit_user)) + if (argv[3] == NULL || !parse_user(argv[3], &user_cred)) debug_return_int(SESH_ERR_FAILURE); argv += 2; argc -= 2; @@ -237,18 +236,18 @@ sesh_sudoedit(int argc, char *argv[]) * sudoedit runs us with the effective user-ID and group-ID of * the target user as well as with the target user's group list. */ - command_details.uid = command_details.euid = geteuid(); - command_details.gid = command_details.egid = getegid(); - command_details.ngroups = getgroups(0, NULL); - if (command_details.ngroups > 0) { - command_details.groups = reallocarray(NULL, command_details.ngroups, + run_cred.uid = run_cred.euid = geteuid(); + run_cred.gid = run_cred.egid = getegid(); + run_cred.ngroups = getgroups(0, NULL); + if (run_cred.ngroups > 0) { + run_cred.groups = reallocarray(NULL, run_cred.ngroups, sizeof(GETGROUPS_T)); - if (command_details.groups == NULL) { + if (run_cred.groups == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_int(SESH_ERR_FAILURE); } - if (getgroups(command_details.ngroups, command_details.groups) < 0) { + if (getgroups(run_cred.ngroups, run_cred.groups) < 0) { sudo_warn("%s", U_("unable to get group list")); debug_return_int(SESH_ERR_FAILURE); } @@ -265,7 +264,7 @@ sesh_sudoedit(int argc, char *argv[]) fd_src = open(path_src, O_RDONLY|O_NONBLOCK|O_NOFOLLOW); } else { fd_src = sudo_edit_open(path_src, post ? O_RDONLY|O_NOFOLLOW : O_RDONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &edit_user, &command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_cred, &run_cred); } if (fd_src == -1) { if (post || errno != ENOENT) { @@ -285,12 +284,12 @@ sesh_sudoedit(int argc, char *argv[]) goto cleanup_0; } /* New file, verify parent dir exists and is not writable. */ - if (!sudo_edit_parent_valid(path_src, &edit_user, &command_details)) + if (!sudo_edit_parent_valid(path_src, edit_flags, &user_cred, &run_cred)) goto cleanup_0; } if (post) { /* Make sure the temporary file is safe and has the proper owner. */ - if (!sudo_check_temp_file(fd_src, path_src, command_details.uid, &sb)) { + if (!sudo_check_temp_file(fd_src, path_src, run_cred.uid, &sb)) { ret = SESH_ERR_SOME_FILES; goto nocleanup; } @@ -298,7 +297,8 @@ sesh_sudoedit(int argc, char *argv[]) /* Create destination file. */ fd_dst = sudo_edit_open(path_dst, O_WRONLY|O_CREAT, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &edit_user, &command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, edit_flags, &user_cred, + &run_cred); } else { if (fd_src == -1) { /* New file. */ diff --git a/src/sudo.c b/src/sudo.c index e4669b3053..f2d8d666e5 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2020 Todd C. Miller + * Copyright (c) 2009-2021 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -220,7 +220,7 @@ main(int argc, char *argv[], char *envp[]) /* Print sudo version early, in case of plugin init failure. */ if (ISSET(sudo_mode, MODE_VERSION)) { printf(_("Sudo version %s\n"), PACKAGE_VERSION); - if (user_details.uid == ROOT_UID) + if (user_details.cred.uid == ROOT_UID) (void) printf(_("Configure options: %s\n"), CONFIGURE_ARGS); } @@ -242,12 +242,12 @@ main(int argc, char *argv[], char *envp[]) switch (sudo_mode & MODE_MASK) { case MODE_VERSION: - policy_show_version(!user_details.uid); - iolog_show_version(!user_details.uid, settings, user_info, + policy_show_version(!user_details.cred.uid); + iolog_show_version(!user_details.cred.uid, settings, user_info, nargc, nargv, envp); - approval_show_version(!user_details.uid, settings, user_info, + approval_show_version(!user_details.cred.uid, settings, user_info, submit_optind, argv, envp); - audit_show_version(!user_details.uid); + audit_show_version(!user_details.cred.uid); break; case MODE_VALIDATE: case MODE_VALIDATE|MODE_INVALIDATE: @@ -383,7 +383,7 @@ fix_fds(void) * Returns 0 on success and -1 on failure. */ static int -fill_group_list(struct user_details *ud) +fill_group_list(const char *user, struct sudo_cred *cred) { int ret = -1; debug_decl(fill_group_list, SUDO_DEBUG_UTIL); @@ -392,41 +392,41 @@ fill_group_list(struct user_details *ud) * If user specified a max number of groups, use it, otherwise let * sudo_getgrouplist2() allocate the group vector. */ - ud->ngroups = sudo_conf_max_groups(); - if (ud->ngroups > 0) { - ud->groups = reallocarray(NULL, ud->ngroups, sizeof(GETGROUPS_T)); - if (ud->groups != NULL) { + cred->ngroups = sudo_conf_max_groups(); + if (cred->ngroups > 0) { + cred->groups = reallocarray(NULL, cred->ngroups, sizeof(GETGROUPS_T)); + if (cred->groups != NULL) { /* No error on insufficient space if user specified max_groups. */ - (void)sudo_getgrouplist2(ud->username, ud->gid, &ud->groups, - &ud->ngroups); + (void)sudo_getgrouplist2(user, cred->gid, + &cred->groups, &cred->ngroups); ret = 0; } } else { - ud->groups = NULL; - ret = sudo_getgrouplist2(ud->username, ud->gid, &ud->groups, - &ud->ngroups); + cred->groups = NULL; + ret = sudo_getgrouplist2(user, cred->gid, &cred->groups, + &cred->ngroups); } if (ret == -1) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, "%s: %s: unable to get groups via sudo_getgrouplist2()", - __func__, ud->username); + __func__, user); } else { sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %s: got %d groups via sudo_getgrouplist2()", - __func__, ud->username, ud->ngroups); + __func__, user, cred->ngroups); } debug_return_int(ret); } static char * -get_user_groups(struct user_details *ud) +get_user_groups(const char *user, struct sudo_cred *cred) { char *cp, *gid_list = NULL; size_t glsize; int i, len, group_source; debug_decl(get_user_groups, SUDO_DEBUG_UTIL); - ud->groups = NULL; + cred->groups = NULL; group_source = sudo_conf_group_source(); if (group_source != GROUP_SOURCE_DYNAMIC) { int maxgroups = (int)sysconf(_SC_NGROUPS_MAX); @@ -434,46 +434,46 @@ get_user_groups(struct user_details *ud) maxgroups = NGROUPS_MAX; /* Note that macOS may return ngroups > NGROUPS_MAX. */ - if ((ud->ngroups = getgroups(0, NULL)) > 0) { + if ((cred->ngroups = getgroups(0, NULL)) > 0) { /* Use groups from kernel if not at limit or source is static. */ - if (ud->ngroups != maxgroups || group_source == GROUP_SOURCE_STATIC) { - ud->groups = reallocarray(NULL, ud->ngroups, sizeof(GETGROUPS_T)); - if (ud->groups == NULL) + if (cred->ngroups != maxgroups || group_source == GROUP_SOURCE_STATIC) { + cred->groups = reallocarray(NULL, cred->ngroups, sizeof(GETGROUPS_T)); + if (cred->groups == NULL) goto done; - if (getgroups(ud->ngroups, ud->groups) < 0) { + if (getgroups(cred->ngroups, cred->groups) < 0) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, - "%s: %s: unable to get %d groups via getgroups()", - __func__, ud->username, ud->ngroups); - free(ud->groups); - ud->groups = NULL; + "%s: unable to get %d groups via getgroups()", + __func__, cred->ngroups); + free(cred->groups); + cred->groups = NULL; } else { sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: %s: got %d groups via getgroups()", - __func__, ud->username, ud->ngroups); + "%s: got %d groups via getgroups()", + __func__, cred->ngroups); } } } } - if (ud->groups == NULL) { + if (cred->groups == NULL) { /* * Query group database if kernel list is too small or disabled. * Typically, this is because NFS can only support up to 16 groups. */ - if (fill_group_list(ud) == -1) + if (fill_group_list(user, cred) == -1) goto done; } /* * Format group list as a comma-separated string of gids. */ - glsize = sizeof("groups=") - 1 + (ud->ngroups * (MAX_UID_T_LEN + 1)); + glsize = sizeof("groups=") - 1 + (cred->ngroups * (MAX_UID_T_LEN + 1)); if ((gid_list = malloc(glsize)) == NULL) goto done; memcpy(gid_list, "groups=", sizeof("groups=") - 1); cp = gid_list + sizeof("groups=") - 1; - for (i = 0; i < ud->ngroups; i++) { + for (i = 0; i < cred->ngroups; i++) { len = snprintf(cp, glsize - (cp - gid_list), "%s%u", - i ? "," : "", (unsigned int)ud->groups[i]); + i ? "," : "", (unsigned int)cred->groups[i]); if (len < 0 || (size_t)len >= glsize - (cp - gid_list)) sudo_fatalx(U_("internal error, %s overflow"), __func__); cp += len; @@ -529,15 +529,15 @@ get_user_info(struct user_details *ud) if ((ud->sid = getsid(0)) == -1) ud->sid = 0; - ud->uid = getuid(); - ud->euid = geteuid(); - ud->gid = getgid(); - ud->egid = getegid(); + ud->cred.uid = getuid(); + ud->cred.euid = geteuid(); + ud->cred.gid = getgid(); + ud->cred.egid = getegid(); #ifdef HAVE_SETAUTHDB - aix_setauthdb(IDtouser(ud->uid), NULL); + aix_setauthdb(IDtouser(ud->cred.uid), NULL); #endif - pw = getpwuid(ud->uid); + pw = getpwuid(ud->cred.uid); #ifdef HAVE_SETAUTHDB aix_restoreauthdb(); #endif @@ -566,16 +566,16 @@ get_user_info(struct user_details *ud) goto oom; if (asprintf(&user_info[++i], "sid=%d", (int)ud->sid) == -1) goto oom; - if (asprintf(&user_info[++i], "uid=%u", (unsigned int)ud->uid) == -1) + if (asprintf(&user_info[++i], "uid=%u", (unsigned int)ud->cred.uid) == -1) goto oom; - if (asprintf(&user_info[++i], "euid=%u", (unsigned int)ud->euid) == -1) + if (asprintf(&user_info[++i], "euid=%u", (unsigned int)ud->cred.euid) == -1) goto oom; - if (asprintf(&user_info[++i], "gid=%u", (unsigned int)ud->gid) == -1) + if (asprintf(&user_info[++i], "gid=%u", (unsigned int)ud->cred.gid) == -1) goto oom; - if (asprintf(&user_info[++i], "egid=%u", (unsigned int)ud->egid) == -1) + if (asprintf(&user_info[++i], "egid=%u", (unsigned int)ud->cred.egid) == -1) goto oom; - if ((cp = get_user_groups(ud)) == NULL) + if ((cp = get_user_groups(ud->username, &ud->cred)) == NULL) goto oom; user_info[++i] = cp; @@ -749,7 +749,7 @@ command_info_to_details(char * const info[], struct command_details *details) id = sudo_strtoid(cp, &errstr); if (errstr != NULL) sudo_fatalx(U_("%s: %s"), info[i], U_(errstr)); - details->egid = (gid_t)id; + details->cred.egid = (gid_t)id; SET(details->flags, CD_SET_EGID); break; } @@ -758,7 +758,7 @@ command_info_to_details(char * const info[], struct command_details *details) id = sudo_strtoid(cp, &errstr); if (errstr != NULL) sudo_fatalx(U_("%s: %s"), info[i], U_(errstr)); - details->euid = (uid_t)id; + details->cred.euid = (uid_t)id; SET(details->flags, CD_SET_EUID); break; } @@ -767,15 +767,15 @@ command_info_to_details(char * const info[], struct command_details *details) id = sudo_strtoid(cp, &errstr); if (errstr != NULL) sudo_fatalx(U_("%s: %s"), info[i], U_(errstr)); - details->gid = (gid_t)id; + details->cred.gid = (gid_t)id; SET(details->flags, CD_SET_GID); break; } if (strncmp("runas_groups=", info[i], sizeof("runas_groups=") - 1) == 0) { cp = info[i] + sizeof("runas_groups=") - 1; - details->ngroups = sudo_parse_gids(cp, NULL, &details->groups); + details->cred.ngroups = sudo_parse_gids(cp, NULL, &details->cred.groups); /* sudo_parse_gids() will print a warning on error. */ - if (details->ngroups == -1) + if (details->cred.ngroups == -1) exit(EXIT_FAILURE); /* XXX */ break; } @@ -784,7 +784,7 @@ command_info_to_details(char * const info[], struct command_details *details) id = sudo_strtoid(cp, &errstr); if (errstr != NULL) sudo_fatalx(U_("%s: %s"), info[i], U_(errstr)); - details->uid = (uid_t)id; + details->cred.uid = (uid_t)id; SET(details->flags, CD_SET_UID); break; } @@ -847,19 +847,19 @@ command_info_to_details(char * const info[], struct command_details *details) } if (!ISSET(details->flags, CD_SET_EUID)) - details->euid = details->uid; + details->cred.euid = details->cred.uid; if (!ISSET(details->flags, CD_SET_EGID)) - details->egid = details->gid; + details->cred.egid = details->cred.gid; if (!ISSET(details->flags, CD_SET_UMASK)) CLR(details->flags, CD_OVERRIDE_UMASK); #ifdef HAVE_SETAUTHDB - aix_setauthdb(IDtouser(details->euid), NULL); + aix_setauthdb(IDtouser(details->cred.euid), NULL); #endif if (details->runas_user != NULL) details->pw = getpwnam(details->runas_user); if (details->pw == NULL) - details->pw = getpwuid(details->euid); + details->pw = getpwuid(details->cred.euid); #ifdef HAVE_SETAUTHDB aix_restoreauthdb(); #endif @@ -933,23 +933,23 @@ set_user_groups(struct command_details *details) debug_decl(set_user_groups, SUDO_DEBUG_EXEC); if (!ISSET(details->flags, CD_PRESERVE_GROUPS)) { - if (details->ngroups >= 0) { - if (sudo_setgroups(details->ngroups, details->groups) < 0) { + if (details->cred.ngroups >= 0) { + if (sudo_setgroups(details->cred.ngroups, details->cred.groups) < 0) { sudo_warn("%s", U_("unable to set supplementary group IDs")); goto done; } } } #ifdef HAVE_SETEUID - if (ISSET(details->flags, CD_SET_EGID) && setegid(details->egid)) { + if (ISSET(details->flags, CD_SET_EGID) && setegid(details->cred.egid)) { sudo_warn(U_("unable to set effective gid to runas gid %u"), - (unsigned int)details->egid); + (unsigned int)details->cred.egid); goto done; } #endif - if (ISSET(details->flags, CD_SET_GID) && setgid(details->gid)) { + if (ISSET(details->flags, CD_SET_GID) && setgid(details->cred.gid)) { sudo_warn(U_("unable to set gid to runas gid %u"), - (unsigned int)details->gid); + (unsigned int)details->cred.gid); goto done; } ret = true; diff --git a/src/sudo.h b/src/sudo.h index 06f47c544e..7f48ece790 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1993-1996, 1998-2005, 2007-2016 + * Copyright (c) 1993-1996, 1998-2005, 2007-2021 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -92,23 +92,28 @@ struct sudo_settings { const char *value; }; +/* Sudo user credentials */ +struct sudo_cred { + uid_t uid; + uid_t euid; + uid_t gid; + uid_t egid; + int ngroups; + GETGROUPS_T *groups; +}; + struct user_details { + struct sudo_cred cred; pid_t pid; pid_t ppid; pid_t pgid; pid_t tcpgid; pid_t sid; - uid_t uid; - uid_t euid; - uid_t gid; - uid_t egid; const char *username; const char *cwd; const char *tty; const char *host; const char *shell; - GETGROUPS_T *groups; - int ngroups; int ts_rows; int ts_cols; }; @@ -143,21 +148,16 @@ struct preserved_fd { TAILQ_HEAD(preserved_fd_list, preserved_fd); struct command_details { - uid_t uid; - uid_t euid; - gid_t gid; - gid_t egid; + struct sudo_cred cred; mode_t umask; int priority; int timeout; - int ngroups; int closefrom; int flags; int execfd; int cwd_optional; struct preserved_fd_list preserved_fds; struct passwd *pw; - GETGROUPS_T *groups; const char *command; const char *runas_user; const char *cwd; diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 8fae0fc599..27262762a1 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -77,7 +77,7 @@ set_tmpdir(struct command_details *command_details) for (i = 0; tdir == NULL && i < nitems(tmpdirs); i++) { if ((dfd = open(tmpdirs[i], O_RDONLY)) != -1) { - if (dir_is_writable(dfd, &user_details, command_details) == true) + if (dir_is_writable(dfd, &user_details.cred, &command_details->cred) == true) tdir = tmpdirs[i]; close(dfd); } @@ -150,22 +150,23 @@ sudo_edit_create_tfiles(struct command_details *command_details, */ for (i = 0, j = 0; i < nfiles; i++) { rc = -1; - switch_user(command_details->euid, command_details->egid, - command_details->ngroups, command_details->groups); + switch_user(command_details->cred.euid, command_details->cred.egid, + command_details->cred.ngroups, command_details->cred.groups); ofd = sudo_edit_open(files[i], O_RDONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details->flags, + &user_details.cred, &command_details->cred); if (ofd != -1 || errno == ENOENT) { if (ofd != -1) { rc = fstat(ofd, &sb); } else { /* New file, verify parent dir exists and is not writable. */ memset(&sb, 0, sizeof(sb)); - if (sudo_edit_parent_valid(files[i], &user_details, command_details)) + if (sudo_edit_parent_valid(files[i], command_details->flags, &user_details.cred, &command_details->cred)) rc = 0; } } - switch_user(ROOT_UID, user_details.egid, - user_details.ngroups, user_details.groups); + switch_user(ROOT_UID, user_details.cred.egid, + user_details.cred.ngroups, user_details.cred.groups); if (ofd != -1 && !S_ISREG(sb.st_mode)) { sudo_warnx(U_("%s: not a regular file"), files[i]); close(ofd); @@ -190,9 +191,9 @@ sudo_edit_create_tfiles(struct command_details *command_details, tf[j].osize = sb.st_size; mtim_get(&sb, tf[j].omtim); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "seteuid(%u)", (unsigned int)user_details.uid); - if (seteuid(user_details.uid) != 0) - sudo_fatal("seteuid(%u)", (unsigned int)user_details.uid); + "seteuid(%u)", (unsigned int)user_details.cred.uid); + if (seteuid(user_details.cred.uid) != 0) + sudo_fatal("seteuid(%u)", (unsigned int)user_details.cred.uid); tfd = sudo_edit_mktemp(tf[j].ofile, &tf[j].tfile); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "seteuid(%u)", ROOT_UID); @@ -251,16 +252,16 @@ sudo_edit_copy_tfiles(struct command_details *command_details, /* Copy contents of temp files to real ones. */ for (i = 0; i < nfiles; i++) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "seteuid(%u)", (unsigned int)user_details.uid); - if (seteuid(user_details.uid) != 0) - sudo_fatal("seteuid(%u)", (unsigned int)user_details.uid); + "seteuid(%u)", (unsigned int)user_details.cred.uid); + if (seteuid(user_details.cred.uid) != 0) + sudo_fatal("seteuid(%u)", (unsigned int)user_details.cred.uid); tfd = sudo_edit_open(tf[i].tfile, O_RDONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, NULL); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, 0, &user_details.cred, NULL); if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "seteuid(%u)", ROOT_UID); - if (tfd == -1 || !sudo_check_temp_file(tfd, tf[i].tfile, user_details.uid, &sb)) { + if (tfd == -1 || !sudo_check_temp_file(tfd, tf[i].tfile, user_details.cred.uid, &sb)) { sudo_warnx(U_("%s left unmodified"), tf[i].ofile); if (tfd != -1) close(tfd); @@ -280,14 +281,15 @@ sudo_edit_copy_tfiles(struct command_details *command_details, continue; } } - switch_user(command_details->euid, command_details->egid, - command_details->ngroups, command_details->groups); + switch_user(command_details->cred.euid, command_details->cred.egid, + command_details->cred.ngroups, command_details->cred.groups); oldmask = umask(command_details->umask); ofd = sudo_edit_open(tf[i].ofile, O_WRONLY|O_CREAT, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_details, command_details); + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, command_details->flags, + &user_details.cred, &command_details->cred); umask(oldmask); - switch_user(ROOT_UID, user_details.egid, - user_details.ngroups, user_details.groups); + switch_user(ROOT_UID, user_details.cred.egid, + user_details.cred.ngroups, user_details.cred.groups); if (ofd == -1) { sudo_warn(U_("unable to write to %s"), tf[i].ofile); goto bad; @@ -359,21 +361,21 @@ selinux_fmt_sudo_user(void) int i, len; debug_decl(selinux_fmt_sudo_user, SUDO_DEBUG_EDIT); - user_size = (MAX_UID_T_LEN + 1) * (2 + user_details.ngroups); + user_size = (MAX_UID_T_LEN + 1) * (2 + user_details.cred.ngroups); if ((user_str = malloc(user_size)) == NULL) debug_return_ptr(NULL); /* UID:GID: */ len = snprintf(user_str, user_size, "%u:%u:", - (unsigned int)user_details.uid, (unsigned int)user_details.gid); + (unsigned int)user_details.cred.uid, (unsigned int)user_details.cred.gid); if (len < 0 || (size_t)len >= user_size) sudo_fatalx(U_("internal error, %s overflow"), __func__); /* Supplementary GIDs */ cp = user_str + len; - for (i = 0; i < user_details.ngroups; i++) { + for (i = 0; i < user_details.cred.ngroups; i++) { len = snprintf(cp, user_size - (cp - user_str), "%s%u", - i ? "," : "", (unsigned int)user_details.groups[i]); + i ? "," : "", (unsigned int)user_details.cred.groups[i]); if (len < 0 || (size_t)len >= user_size - (cp - user_str)) sudo_fatalx(U_("internal error, %s overflow"), __func__); cp += len; @@ -443,8 +445,8 @@ selinux_edit_create_tfiles(struct command_details *command_details, *sesh_ap = NULL; /* Run sesh -e [-h] 0 ... */ - error = selinux_run_helper(command_details->uid, command_details->gid, - command_details->ngroups, command_details->groups, sesh_args, + error = selinux_run_helper(command_details->cred.uid, command_details->cred.gid, + command_details->cred.ngroups, command_details->cred.groups, sesh_args, command_details->envp); switch (error) { case SESH_SUCCESS: @@ -466,13 +468,13 @@ selinux_edit_create_tfiles(struct command_details *command_details, sudo_warn(U_("unable to open %s"), tf[i].tfile); goto done; } - if (!sudo_check_temp_file(tfd, tf[i].tfile, command_details->uid, NULL)) { + if (!sudo_check_temp_file(tfd, tf[i].tfile, command_details->cred.uid, NULL)) { close(tfd); goto done; } - if (fchown(tfd, user_details.uid, user_details.gid) != 0) { + if (fchown(tfd, user_details.cred.uid, user_details.cred.gid) != 0) { sudo_warn("unable to chown(%s) to %d:%d for editing", - tf[i].tfile, user_details.uid, user_details.gid); + tf[i].tfile, user_details.cred.uid, user_details.cred.gid); close(tfd); goto done; } @@ -529,7 +531,7 @@ selinux_edit_copy_tfiles(struct command_details *command_details, sudo_warn(U_("unable to open %s"), tf[i].tfile); continue; } - if (!sudo_check_temp_file(tfd, tf[i].tfile, user_details.uid, &sb)) + if (!sudo_check_temp_file(tfd, tf[i].tfile, user_details.cred.uid, &sb)) continue; mtim_get(&sb, ts); if (tf[i].osize == sb.st_size && sudo_timespeccmp(&tf[i].omtim, &ts, ==)) { @@ -545,9 +547,9 @@ selinux_edit_copy_tfiles(struct command_details *command_details, } *sesh_ap++ = tf[i].tfile; *sesh_ap++ = tf[i].ofile; - if (fchown(tfd, command_details->uid, command_details->gid) != 0) { + if (fchown(tfd, command_details->cred.uid, command_details->cred.gid) != 0) { sudo_warn("unable to chown(%s) back to %d:%d", tf[i].tfile, - command_details->uid, command_details->gid); + command_details->cred.uid, command_details->cred.gid); } } *sesh_ap = NULL; @@ -556,8 +558,8 @@ selinux_edit_copy_tfiles(struct command_details *command_details, if (sesh_ap - sesh_args > 3) { /* Run sesh -e 1 ... */ - error = selinux_run_helper(command_details->uid, command_details->gid, - command_details->ngroups, command_details->groups, sesh_args, + error = selinux_run_helper(command_details->cred.uid, command_details->cred.gid, + command_details->cred.ngroups, command_details->cred.groups, sesh_args, command_details->envp); switch (error) { case SESH_SUCCESS: @@ -689,12 +691,7 @@ sudo_edit(struct command_details *command_details) goto cleanup; } memcpy(&saved_command_details, command_details, sizeof(struct command_details)); - command_details->uid = user_details.uid; - command_details->euid = user_details.uid; - command_details->gid = user_details.gid; - command_details->egid = user_details.gid; - command_details->ngroups = user_details.ngroups; - command_details->groups = user_details.groups; + command_details->cred = user_details.cred; command_details->argv = nargv; ret = run_command(command_details); if (sudo_gettime_real(×[1]) == -1) { @@ -703,12 +700,7 @@ sudo_edit(struct command_details *command_details) } /* Restore saved command_details. */ - command_details->uid = saved_command_details.uid; - command_details->euid = saved_command_details.euid; - command_details->gid = saved_command_details.gid; - command_details->egid = saved_command_details.egid; - command_details->ngroups = saved_command_details.ngroups; - command_details->groups = saved_command_details.groups; + command_details->cred = saved_command_details.cred; command_details->argv = saved_command_details.argv; /* Copy contents of temp files to real ones. */ diff --git a/src/sudo_edit.h b/src/sudo_edit.h index 69f62b1ce1..0714642b0b 100644 --- a/src/sudo_edit.h +++ b/src/sudo_edit.h @@ -46,9 +46,10 @@ int sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb); /* edit_open.c */ +struct sudo_cred; void switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups); -int sudo_edit_open(char *path, int oflags, mode_t mode, struct user_details *ud, struct command_details *cd); -int dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd); -bool sudo_edit_parent_valid(char *path, struct user_details *ud, struct command_details *cd); +int sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, struct sudo_cred *user_cred, struct sudo_cred *run_cred); +int dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred); +bool sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, struct sudo_cred *run_cred); #endif /* SUDO_EDIT_H */ diff --git a/src/tgetpass.c b/src/tgetpass.c index 5ccb5136e0..87f01dc389 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1996, 1998-2005, 2007-2018 + * Copyright (c) 1996, 1998-2005, 2007-2021 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -323,12 +323,12 @@ sudo_askpass(const char *askpass, const char *prompt) restore_limits(); /* But avoid a setuid() failure on Linux due to RLIMIT_NPROC. */ unlimit_nproc(); - if (setgid(user_details.gid)) { - sudo_warn(U_("unable to set gid to %u"), (unsigned int)user_details.gid); + if (setgid(user_details.cred.gid)) { + sudo_warn(U_("unable to set gid to %u"), (unsigned int)user_details.cred.gid); _exit(255); } - if (setuid(user_details.uid)) { - sudo_warn(U_("unable to set uid to %u"), (unsigned int)user_details.uid); + if (setuid(user_details.cred.uid)) { + sudo_warn(U_("unable to set uid to %u"), (unsigned int)user_details.cred.uid); _exit(255); } restore_nproc(); From 7788581473283e6c1e381562f39dfbbf9cf6fd1c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 21/31] Rename run_cred -> cur_cred and stash existing creds in set_tmpdir(). For sudo_edit_open() et al what we need is a copy of the current cred to restore after dir_is_writable() changes to the user cred. --- src/edit_open.c | 28 ++++++++++++++-------------- src/sesh.c | 3 +++ src/sudo_edit.c | 45 +++++++++++++++++++++++++++++++++++++-------- src/sudo_edit.h | 6 +++--- 4 files changed, 57 insertions(+), 25 deletions(-) diff --git a/src/edit_open.c b/src/edit_open.c index 3bbcc2cd85..8795218a9e 100644 --- a/src/edit_open.c +++ b/src/edit_open.c @@ -74,7 +74,7 @@ switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) * Returns true if the open directory fd is owned or writable by the user. */ int -dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred) +dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *cur_cred) { struct stat sb; int rc; @@ -92,7 +92,7 @@ dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred } /* Change uid/gid/groups to invoking user, usually needs root perms. */ - if (run_cred->euid != ROOT_UID) { + if (cur_cred->euid != ROOT_UID) { if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); } @@ -102,13 +102,13 @@ dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred /* Access checks are done using the euid/egid and group vector. */ rc = faccessat(dfd, ".", W_OK, AT_EACCESS); - /* Change uid/gid/groups back to target user, may need root perms. */ + /* Restore uid/gid/groups, may need root perms. */ if (user_cred->uid != ROOT_UID) { if (seteuid(ROOT_UID) != 0) sudo_fatal("seteuid(ROOT_UID)"); } - switch_user(run_cred->euid, run_cred->egid, run_cred->ngroups, - run_cred->groups); + switch_user(cur_cred->euid, cur_cred->egid, cur_cred->ngroups, + cur_cred->groups); if (rc == 0) debug_return_int(true); @@ -144,7 +144,7 @@ group_matches(gid_t target, struct sudo_cred *cred) * Returns true if the open directory fd is owned or writable by the user. */ int -dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred) +dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *cur_cred) { struct stat sb; debug_decl(dir_is_writable, SUDO_DEBUG_EDIT); @@ -272,7 +272,7 @@ sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) static int sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, - struct sudo_cred *user_cred, struct sudo_cred *run_cred) + struct sudo_cred *user_cred, struct sudo_cred *cur_cred) { const int dflags = DIR_OPEN_FLAGS; int dfd, fd, is_writable; @@ -297,7 +297,7 @@ sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, * Look up one component at a time, avoiding symbolic links in * writable directories. */ - is_writable = dir_is_writable(dfd, user_cred, run_cred); + is_writable = dir_is_writable(dfd, user_cred, cur_cred); if (is_writable == -1) { close(dfd); debug_return_int(-1); @@ -339,7 +339,7 @@ sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, #ifdef O_NOFOLLOW int sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, - struct sudo_cred *user_cred, struct sudo_cred *run_cred) + struct sudo_cred *user_cred, struct sudo_cred *cur_cred) { int fd; debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT); @@ -348,7 +348,7 @@ sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, oflags |= O_NOFOLLOW; if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_cred->uid != ROOT_UID) { fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, - user_cred, run_cred); + user_cred, cur_cred); } else { fd = open(path, oflags|O_NONBLOCK, mode); } @@ -359,7 +359,7 @@ sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, #else int sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, - struct sudo_cred *user_cred, struct sudo_cred *run_cred) + struct sudo_cred *user_cred, struct sudo_cred *cur_cred) { struct stat sb; int fd; @@ -380,7 +380,7 @@ sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_cred->uid != ROOT_UID) { fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, - user_cred, run_cred); + user_cred, cur_cred); } else { fd = open(path, oflags|O_NONBLOCK, mode); } @@ -412,7 +412,7 @@ sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, */ bool sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, - struct sudo_cred *run_cred) + struct sudo_cred *cur_cred) { const int serrno = errno; struct stat sb; @@ -438,7 +438,7 @@ sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, * *its* parent is writable and CD_SUDOEDIT_CHECK is set. */ dfd = sudo_edit_open(path, DIR_OPEN_FLAGS, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, - sflags|CD_SUDOEDIT_FOLLOW, user_cred, run_cred); + sflags|CD_SUDOEDIT_FOLLOW, user_cred, cur_cred); if (dfd != -1) { if (fstat(dfd, &sb) == 0 && S_ISDIR(sb.st_mode)) ret = true; diff --git a/src/sesh.c b/src/sesh.c index 4efe06556f..338e401457 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -251,6 +251,9 @@ sesh_sudoedit(int argc, char *argv[]) sudo_warn("%s", U_("unable to get group list")); debug_return_int(SESH_ERR_FAILURE); } + } else { + run_cred.ngroups = 0; + run_cred.groups = NULL; } for (i = 0; i < argc - 1; i += 2) { diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 27262762a1..396f1c6b10 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -60,7 +60,7 @@ static char edit_tmpdir[MAX(sizeof(_PATH_VARTMP), sizeof(_PATH_TMP))]; * Returns true on success, else false; */ static bool -set_tmpdir(struct command_details *command_details) +set_tmpdir(struct sudo_cred *user_cred) { const char *tdir = NULL; const char *tmpdirs[] = { @@ -70,21 +70,49 @@ set_tmpdir(struct command_details *command_details) #endif _PATH_TMP }; + struct sudo_cred saved_cred; unsigned int i; size_t len; int dfd; debug_decl(set_tmpdir, SUDO_DEBUG_EDIT); + /* Stash old credentials. */ + saved_cred.uid = getuid(); + saved_cred.euid = geteuid(); + saved_cred.gid = getgid(); + saved_cred.egid = getegid(); + saved_cred.ngroups = getgroups(0, NULL); + if (saved_cred.ngroups > 0) { + saved_cred.groups = + reallocarray(NULL, saved_cred.ngroups, sizeof(GETGROUPS_T)); + if (saved_cred.groups == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + if (getgroups(saved_cred.ngroups, saved_cred.groups) < 0) { + sudo_warn("%s", U_("unable to get group list")); + free(saved_cred.groups); + debug_return_bool(false); + } + } else { + saved_cred.ngroups = 0; + saved_cred.groups = NULL; + } + for (i = 0; tdir == NULL && i < nitems(tmpdirs); i++) { if ((dfd = open(tmpdirs[i], O_RDONLY)) != -1) { - if (dir_is_writable(dfd, &user_details.cred, &command_details->cred) == true) + if (dir_is_writable(dfd, user_cred, &saved_cred) == true) tdir = tmpdirs[i]; close(dfd); } } - if (tdir == NULL) - sudo_fatalx("%s", U_("no writable temporary directory found")); - + free(saved_cred.groups); + + if (tdir == NULL) { + sudo_warnx("%s", U_("no writable temporary directory found")); + debug_return_bool(false); + } + len = strlcpy(edit_tmpdir, tdir, sizeof(edit_tmpdir)); if (len >= sizeof(edit_tmpdir)) { errno = ENAMETOOLONG; @@ -609,9 +637,6 @@ sudo_edit(struct command_details *command_details) struct tempfile *tf = NULL; debug_decl(sudo_edit, SUDO_DEBUG_EDIT); - if (!set_tmpdir(command_details)) - goto cleanup; - /* * Set real, effective and saved uids to root. * We will change the euid as needed below. @@ -623,6 +648,10 @@ sudo_edit(struct command_details *command_details) goto cleanup; } + /* Find a temporary directory writable by the user. */ + if (!set_tmpdir(&user_details.cred)) + goto cleanup; + /* * The user's editor must be separated from the files to be * edited by a "--" option. diff --git a/src/sudo_edit.h b/src/sudo_edit.h index 0714642b0b..87e6e9f6ae 100644 --- a/src/sudo_edit.h +++ b/src/sudo_edit.h @@ -48,8 +48,8 @@ bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb /* edit_open.c */ struct sudo_cred; void switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups); -int sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, struct sudo_cred *user_cred, struct sudo_cred *run_cred); -int dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *run_cred); -bool sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, struct sudo_cred *run_cred); +int sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, struct sudo_cred *user_cred, struct sudo_cred *cur_cred); +int dir_is_writable(int dfd, struct sudo_cred *user_cred, struct sudo_cred *cur_cred); +bool sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, struct sudo_cred *cur_cred); #endif /* SUDO_EDIT_H */ From 9e068c15e07cfe3a915dd4e71aa3e4be90be4306 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 22/31] Add setprogname(3) for those without it. --- configure | 17 ++++++++++++++++- configure.ac | 7 +++++-- include/sudo_compat.h | 5 +++++ lib/util/progname.c | 21 +++++++++++++++++++-- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 7ea34399a6..2467429c83 100755 --- a/configure +++ b/configure @@ -22930,7 +22930,8 @@ if test "x$ac_cv_func_getprogname" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPROGNAME 1 _ACEOF - for ac_func in setprogname + + for ac_func in setprogname do : ac_fn_c_check_func "$LINENO" "setprogname" "ac_cv_func_setprogname" if test "x$ac_cv_func_setprogname" = xyes; then : @@ -22938,9 +22939,17 @@ if test "x$ac_cv_func_setprogname" = xyes; then : #define HAVE_SETPROGNAME 1 _ACEOF +else + + for _sym in sudo_setprogname; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + fi done + else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5 @@ -22982,6 +22991,12 @@ $as_echo "$sudo_cv___progname" >&6; } done + for _sym in sudo_setprogname; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + fi done diff --git a/configure.ac b/configure.ac index 7c1503fdd2..4221dbec8e 100644 --- a/configure.ac +++ b/configure.ac @@ -3309,9 +3309,11 @@ esac LIBS="$OLIBS" dnl -dnl Check for getprogname() or __progname +dnl Check for getprogname()/setprogname() or __progname dnl -AC_CHECK_FUNCS([getprogname], [AC_CHECK_FUNCS([setprogname])], [ +AC_CHECK_FUNCS([getprogname], [ + AC_CHECK_FUNCS([setprogname], [], [SUDO_APPEND_COMPAT_EXP(sudo_setprogname)]) +], [ AC_MSG_CHECKING([for __progname]) AC_CACHE_VAL(sudo_cv___progname, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; if (__progname[0] == '\0') return 1;]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])]) @@ -3320,6 +3322,7 @@ AC_CHECK_FUNCS([getprogname], [AC_CHECK_FUNCS([setprogname])], [ fi AC_MSG_RESULT($sudo_cv___progname) SUDO_APPEND_COMPAT_EXP(sudo_getprogname) + SUDO_APPEND_COMPAT_EXP(sudo_setprogname) ]) dnl dnl Check for __func__ or __FUNCTION__ diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 095dd04d0c..15aeeca703 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -575,6 +575,11 @@ sudo_dso_public const char *sudo_getprogname(void); # undef getprogname # define getprogname() sudo_getprogname() #endif /* HAVE_GETPROGNAME */ +#ifndef HAVE_SETPROGNAME +sudo_dso_public void sudo_setprogname(const char *name); +# undef setprogname +# define setprogname(_a) sudo_setprogname(_a) +#endif /* HAVE_SETPROGNAME */ #ifndef HAVE_REALLOCARRAY sudo_dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size); # undef reallocarray diff --git a/lib/util/progname.c b/lib/util/progname.c index d1bf15d15b..57a8c03af0 100644 --- a/lib/util/progname.c +++ b/lib/util/progname.c @@ -31,10 +31,21 @@ #ifdef HAVE_GETPROGNAME +# ifndef HAVE_SETPROGNAME +/* Assume __progname if have getprogname(3) but not setprogname(3). */ +extern const char *__progname; + +void +sudo_setprogname(const char *name) +{ + const char *base = strrchr(name, '/'); + __progname = base ? base : name; +} +# endif + void initprogname2(const char *name, const char * const * allowed) { -# ifdef HAVE_SETPROGNAME const char *progname; int i; @@ -61,7 +72,6 @@ initprogname2(const char *name, const char * const * allowed) /* Update internal progname if needed. */ if (name != progname) setprogname(name); -# endif return; } @@ -109,6 +119,13 @@ sudo_getprogname(void) { return progname; } + +void +sudo_setprogname(const char *name) +{ + const char *base = strrchr(name, '/'); + progname = base ? base : name; +} #endif /* !HAVE_GETPROGNAME */ void From 83ff1646907e46d97630c5186a16d670352ef681 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 23/31] Split up sesh_sudoedit() so it is organized more like sudo_edit.c. The new sesh_edit_create_tfiles() and sesh_edit_copy_tfiles() functions are analogous to sudo_edit_create_tfiles() and sudo_edit_copy_tfiles(). Also use "sudoedit" in the warning/error messages from sesh_sudoedit(). Otherwise, the user gets a mix of messages from sudoedit and sesh. --- src/sesh.c | 306 ++++++++++++++++++++++++++---------------------- src/sudo_edit.c | 2 - 2 files changed, 168 insertions(+), 140 deletions(-) diff --git a/src/sesh.c b/src/sesh.c index 338e401457..5f8f984b4b 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -173,13 +173,171 @@ parse_user(char *userstr, struct sudo_cred *cred) } static int -sesh_sudoedit(int argc, char *argv[]) +sesh_edit_create_tfiles(int edit_flags, struct sudo_cred *user_cred, + struct sudo_cred *run_cred, int argc, char *argv[]) { - int i, post, ret = SESH_ERR_FAILURE; - int edit_flags, fd_src = -1, fd_dst = -1; - struct sudo_cred user_cred, run_cred; + int i, fd_src = -1, fd_dst = -1; struct timespec times[2]; struct stat sb; + debug_decl(sesh_edit_create_tfiles, SUDO_DEBUG_EDIT); + + for (i = 0; i < argc - 1; i += 2) { + char *path_src = argv[i]; + const char *path_dst = argv[i + 1]; + + /* + * Try to open the source file for reading. + * If it doesn't exist, we'll create an empty destination file. + */ + fd_src = sudo_edit_open(path_src, O_RDONLY, + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, edit_flags, user_cred, run_cred); + if (fd_src == -1) { + if (errno != ENOENT) { + if (errno == ELOOP) { + sudo_warnx(U_("%s: editing symbolic links is not " + "permitted"), path_src); + } else if (errno == EISDIR) { + sudo_warnx(U_("%s: editing files in a writable directory " + "is not permitted"), path_src); + } else { + sudo_warn("%s", path_src); + } + goto cleanup; + } + /* New file, verify parent dir exists and is not writable. */ + if (!sudo_edit_parent_valid(path_src, edit_flags, user_cred, run_cred)) + goto cleanup; + } + if (fd_src == -1) { + /* New file. */ + memset(&sb, 0, sizeof(sb)); + } else if (fstat(fd_src, &sb) == -1 || !S_ISREG(sb.st_mode)) { + sudo_warnx(U_("%s: not a regular file"), path_src); + goto cleanup; + } + + /* + * Create temporary file using O_EXCL to ensure that temporary + * files are created by us and that we do not open any symlinks. + */ + fd_dst = open(path_dst, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); + if (fd_dst == -1) { + sudo_warn("%s", path_dst); + goto cleanup; + } + + if (fd_src != -1) { + if (sudo_copy_file(path_src, fd_src, -1, path_dst, fd_dst, -1) == -1) + goto cleanup; + close(fd_src); + } + + /* Make mtime on temp file match src (sb filled in above). */ + mtim_get(&sb, times[0]); + times[1].tv_sec = times[0].tv_sec; + times[1].tv_nsec = times[0].tv_nsec; + if (futimens(fd_dst, times) == -1) { + if (utimensat(AT_FDCWD, path_dst, times, 0) == -1) + sudo_warn("%s", path_dst); + } + close(fd_dst); + fd_dst = -1; + } + debug_return_int(SESH_SUCCESS); + +cleanup: + /* Remove temporary files. */ + for (i = 0; i < argc - 1; i += 2) + unlink(argv[i + 1]); + if (fd_src != -1) + close(fd_src); + if (fd_dst != -1) + close(fd_dst); + debug_return_int(SESH_ERR_NO_FILES); +} + +static int +sesh_edit_copy_tfiles(int edit_flags, struct sudo_cred *user_cred, + struct sudo_cred *run_cred, int argc, char *argv[]) +{ + int i, ret = SESH_SUCCESS; + int fd_src = -1, fd_dst = -1; + debug_decl(sesh_edit_copy_tfiles, SUDO_DEBUG_EDIT); + + for (i = 0; i < argc - 1; i += 2) { + const char *path_src = argv[i]; + char *path_dst = argv[i + 1]; + off_t len_src, len_dst; + struct stat sb; + + /* Open temporary file for reading. */ + if (fd_src != -1) + close(fd_src); + fd_src = open(path_src, O_RDONLY|O_NONBLOCK|O_NOFOLLOW); + if (fd_src == -1) { + sudo_warn("%s", path_src); + ret = SESH_ERR_SOME_FILES; + continue; + } + /* Make sure the temporary file is safe and has the proper owner. */ + if (!sudo_check_temp_file(fd_src, path_src, run_cred->uid, &sb)) { + sudo_warnx(U_("contents of edit session left in %s"), path_src); + ret = SESH_ERR_SOME_FILES; + continue; + } + (void) fcntl(fd_src, F_SETFL, fcntl(fd_src, F_GETFL, 0) & ~O_NONBLOCK); + + /* Create destination file. */ + if (fd_dst != -1) + close(fd_dst); + fd_dst = sudo_edit_open(path_dst, O_WRONLY|O_CREAT, + S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, edit_flags, user_cred, run_cred); + if (fd_dst == -1) { + if (errno == ELOOP) { + sudo_warnx(U_("%s: editing symbolic links is not " + "permitted"), path_dst); + } else if (errno == EISDIR) { + sudo_warnx(U_("%s: editing files in a writable directory " + "is not permitted"), path_dst); + } else { + sudo_warn("%s", path_dst); + } + sudo_warnx(U_("contents of edit session left in %s"), path_src); + ret = SESH_ERR_SOME_FILES; + continue; + } + + /* sudo_check_temp_file() filled in sb for us. */ + len_src = sb.st_size; + if (fstat(fd_dst, &sb) != 0) { + sudo_warn("%s", path_dst); + sudo_warnx(U_("contents of edit session left in %s"), path_src); + ret = SESH_ERR_SOME_FILES; + continue; + } + len_dst = sb.st_size; + + if (sudo_copy_file(path_src, fd_src, len_src, path_dst, fd_dst, + len_dst) == -1) { + sudo_warnx(U_("contents of edit session left in %s"), path_src); + ret = SESH_ERR_SOME_FILES; + continue; + } + unlink(path_src); + } + if (fd_src != -1) + close(fd_src); + if (fd_dst != -1) + close(fd_dst); + + debug_return_int(ret); +} + +static int +sesh_sudoedit(int argc, char *argv[]) +{ + int edit_flags, post, ret; + struct sudo_cred user_cred, run_cred; debug_decl(sesh_sudoedit, SUDO_DEBUG_EDIT); memset(&user_cred, 0, sizeof(user_cred)); @@ -232,6 +390,9 @@ sesh_sudoedit(int argc, char *argv[]) if (argc & 1) debug_return_int(SESH_ERR_BAD_PATHS); + /* Masquerade as sudoedit so the user gets consistent error messages. */ + setprogname("sudoedit"); + /* * sudoedit runs us with the effective user-ID and group-ID of * the target user as well as with the target user's group list. @@ -256,139 +417,8 @@ sesh_sudoedit(int argc, char *argv[]) run_cred.groups = NULL; } - for (i = 0; i < argc - 1; i += 2) { - char *path_src = argv[i]; - char *path_dst = argv[i + 1]; - /* - * Try to open the source (original or temporary) file for reading. - * If it doesn't exist, we'll create an empty destination file. - */ - if (post) { - fd_src = open(path_src, O_RDONLY|O_NONBLOCK|O_NOFOLLOW); - } else { - fd_src = sudo_edit_open(path_src, post ? O_RDONLY|O_NOFOLLOW : O_RDONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &user_cred, &run_cred); - } - if (fd_src == -1) { - if (post || errno != ENOENT) { - if (errno == ELOOP) { - sudo_warnx(U_("%s: editing symbolic links is not " - "permitted"), path_src); - } else if (errno == EISDIR) { - sudo_warnx(U_("%s: editing files in a writable directory " - "is not permitted"), path_src); - } else { - sudo_warn("%s", path_src); - } - if (post) { - ret = SESH_ERR_SOME_FILES; - goto nocleanup; - } else - goto cleanup_0; - } - /* New file, verify parent dir exists and is not writable. */ - if (!sudo_edit_parent_valid(path_src, edit_flags, &user_cred, &run_cred)) - goto cleanup_0; - } - if (post) { - /* Make sure the temporary file is safe and has the proper owner. */ - if (!sudo_check_temp_file(fd_src, path_src, run_cred.uid, &sb)) { - ret = SESH_ERR_SOME_FILES; - goto nocleanup; - } - (void) fcntl(fd_src, F_SETFL, fcntl(fd_src, F_GETFL, 0) & ~O_NONBLOCK); - - /* Create destination file. */ - fd_dst = sudo_edit_open(path_dst, O_WRONLY|O_CREAT, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, edit_flags, &user_cred, - &run_cred); - } else { - if (fd_src == -1) { - /* New file. */ - memset(&sb, 0, sizeof(sb)); - } else if (fstat(fd_src, &sb) == -1 || !S_ISREG(sb.st_mode)) { - sudo_warnx(U_("%s: not a regular file"), path_src); - goto cleanup_0; - } - - /* - * Create temporary file using O_EXCL to ensure that temporary - * files are created by us and that we do not open any symlinks. - */ - fd_dst = open(path_dst, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); - } - if (fd_dst == -1) { - /* error - cleanup */ - sudo_warn("%s", path_dst); - if (post) { - ret = SESH_ERR_SOME_FILES; - goto nocleanup; - } else - goto cleanup_0; - } - - if (fd_src != -1) { - off_t len_src = -1; - off_t len_dst = -1; - - if (post) { - /* sudo_check_temp_file() filled in sb for us. */ - len_src = sb.st_size; - if (fstat(fd_dst, &sb) != 0) { - ret = SESH_ERR_SOME_FILES; - goto nocleanup; - } - len_dst = sb.st_size; - } - - if (sudo_copy_file(path_src, fd_src, len_src, path_dst, fd_dst, - len_dst) == -1) { - if (post) { - ret = SESH_ERR_SOME_FILES; - goto nocleanup; - } else { - goto cleanup_0; - } - } - } - - if (!post) { - /* Make mtime on temp file match src (sb filled in above). */ - mtim_get(&sb, times[0]); - times[1].tv_sec = times[0].tv_sec; - times[1].tv_nsec = times[0].tv_nsec; - if (futimens(fd_dst, times) == -1) { - if (utimensat(AT_FDCWD, path_dst, times, 0) == -1) - sudo_warn("%s", path_dst); - } - } - close(fd_dst); - fd_dst = -1; - if (fd_src != -1) { - close(fd_src); - fd_src = -1; - } - } - - ret = SESH_SUCCESS; - if (post) { - /* Remove temporary files (post=1) */ - for (i = 0; i < argc - 1; i += 2) - unlink(argv[i]); - } -nocleanup: - if (fd_dst != -1) - close(fd_dst); - if (fd_src != -1) - close(fd_src); + ret = post ? + sesh_edit_copy_tfiles(edit_flags, &user_cred, &run_cred, argc, argv) : + sesh_edit_create_tfiles(edit_flags, &user_cred, &run_cred, argc, argv); debug_return_int(ret); -cleanup_0: - /* Remove temporary files (post=0) */ - for (i = 0; i < argc - 1; i += 2) - unlink(argv[i + 1]); - if (fd_dst != -1) - close(fd_dst); - if (fd_src != -1) - close(fd_src); - debug_return_int(SESH_ERR_NO_FILES); } diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 396f1c6b10..e65808148a 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -608,8 +608,6 @@ selinux_edit_copy_tfiles(struct command_details *command_details, sudo_warnx(U_("sesh: unknown error %d"), error); break; } - if (ret != 0) - sudo_warnx(U_("contents of edit session left in %s"), edit_tmpdir); } done: From 84b3a1dae1b4f0a04a7cbd950309b4a98f6a9cca Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:09 -0700 Subject: [PATCH 24/31] Remove the --force option from the cppcheck args, it causes errors. --- Makefile.in | 2 +- lib/eventlog/Makefile.in | 2 +- lib/iolog/Makefile.in | 2 +- lib/logsrv/Makefile.in | 2 +- lib/util/Makefile.in | 2 +- logsrvd/Makefile.in | 2 +- plugins/audit_json/Makefile.in | 2 +- plugins/group_file/Makefile.in | 2 +- plugins/python/Makefile.in | 2 +- plugins/sample/Makefile.in | 2 +- plugins/sample_approval/Makefile.in | 2 +- plugins/sudoers/Makefile.in | 2 +- plugins/system_group/Makefile.in | 2 +- src/Makefile.in | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Makefile.in b/Makefile.in index aff53459bb..9d9d754d7a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -94,7 +94,7 @@ XGETTEXT_OPTS = -F -k_ -kN_ -kU_ --copyright-holder="Todd C. Miller" \ --flag sudo_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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # Default splint options when run from the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/eventlog/Makefile.in b/lib/eventlog/Makefile.in index 4774d0006e..a9a2793786 100644 --- a/lib/eventlog/Makefile.in +++ b/lib/eventlog/Makefile.in @@ -62,7 +62,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/iolog/Makefile.in b/lib/iolog/Makefile.in index caa3ce8704..2ae9c1b426 100644 --- a/lib/iolog/Makefile.in +++ b/lib/iolog/Makefile.in @@ -64,7 +64,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 02958be32a..76f7d4c263 100644 --- a/lib/logsrv/Makefile.in +++ b/lib/logsrv/Makefile.in @@ -56,7 +56,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index a94bfc36b0..9b4ff8b1f4 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -92,7 +92,7 @@ SSP_LDFLAGS = @SSP_LDFLAGS@ SHLIB_VERSION = 0:0:0 # cppcheck options, usually set in the top-level Makefile -CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/logsrvd/Makefile.in b/logsrvd/Makefile.in index 5c174c2642..2dcde18fbc 100644 --- a/logsrvd/Makefile.in +++ b/logsrvd/Makefile.in @@ -79,7 +79,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/audit_json/Makefile.in b/plugins/audit_json/Makefile.in index db2b458048..1172e8e878 100644 --- a/plugins/audit_json/Makefile.in +++ b/plugins/audit_json/Makefile.in @@ -69,7 +69,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/group_file/Makefile.in b/plugins/group_file/Makefile.in index 2ee66c9735..ab49bec294 100644 --- a/plugins/group_file/Makefile.in +++ b/plugins/group_file/Makefile.in @@ -72,7 +72,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/python/Makefile.in b/plugins/python/Makefile.in index 6e69972fe5..5315ff0004 100644 --- a/plugins/python/Makefile.in +++ b/plugins/python/Makefile.in @@ -76,7 +76,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sample/Makefile.in b/plugins/sample/Makefile.in index 60750d634f..82bcfd7a7d 100644 --- a/plugins/sample/Makefile.in +++ b/plugins/sample/Makefile.in @@ -71,7 +71,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sample_approval/Makefile.in b/plugins/sample_approval/Makefile.in index 789d397a8f..3e876b1d6a 100644 --- a/plugins/sample_approval/Makefile.in +++ b/plugins/sample_approval/Makefile.in @@ -69,7 +69,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 12721377d4..5aeeae633e 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -101,7 +101,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/plugins/system_group/Makefile.in b/plugins/system_group/Makefile.in index 3ac8ef623f..99159b2197 100644 --- a/plugins/system_group/Makefile.in +++ b/plugins/system_group/Makefile.in @@ -72,7 +72,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks diff --git a/src/Makefile.in b/src/Makefile.in index 772a5d63aa..fb49d670ad 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -77,7 +77,7 @@ 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 --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +CPPCHECK_OPTS = -q --enable=warning,performance,portability --suppress=constStatement --suppress=compareBoolExpressionWithInt --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 # splint options, usually set in the top-level Makefile SPLINT_OPTS = -D__restrict= -checks From 92c88d4105f00809b462a8d8bcd77a854c9b077a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 13:01:10 -0700 Subject: [PATCH 25/31] Quiet a few harmless cppcheck warnings. --- plugins/sudoers/editor.c | 2 +- plugins/sudoers/fmtsudoers.c | 2 +- plugins/sudoers/gram.c | 2 +- plugins/sudoers/gram.y | 2 +- plugins/sudoers/ldap_util.c | 2 +- plugins/sudoers/parse.h | 14 +++++++------- plugins/sudoers/starttime.c | 6 ++++-- plugins/sudoers/tsgetgrpw.c | 5 ++--- src/ttyname.c | 6 ++++-- 9 files changed, 22 insertions(+), 19 deletions(-) diff --git a/plugins/sudoers/editor.c b/plugins/sudoers/editor.c index 48d06a71b3..a0cd63d439 100644 --- a/plugins/sudoers/editor.c +++ b/plugins/sudoers/editor.c @@ -123,7 +123,7 @@ resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, int *argc_out, char ***argv_out, char * const *allowlist) { char **nargv = NULL, *editor = NULL, *editor_path = NULL; - const char *cp, *ep, *tmp; + const char *tmp, *cp, *ep = NULL; const char *edend = ed + edlen; struct stat user_editor_sb; int nargc; diff --git a/plugins/sudoers/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index e14bac0541..07961a4852 100644 --- a/plugins/sudoers/fmtsudoers.c +++ b/plugins/sudoers/fmtsudoers.c @@ -177,7 +177,7 @@ sudoers_defaults_list_to_tags(struct defaults_list *defs, struct cmndtag *tags) struct defaults *d; debug_decl(sudoers_defaults_list_to_tags, SUDOERS_DEBUG_UTIL); - TAGS_INIT(*tags); + TAGS_INIT(tags); if (defs != NULL) { TAILQ_FOREACH(d, defs, entries) { if (!sudoers_defaults_to_tags(d->var, d->val, d->op, tags)) { diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index abd299bc46..661b2167b3 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -2565,7 +2565,7 @@ yyparse (void) case 92: /* cmndtag: %empty */ #line 785 "gram.y" { - TAGS_INIT((yyval.tag)); + TAGS_INIT(&(yyval.tag)); } #line 2565 "gram.c" break; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index b9439f37bb..0957a1fe55 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -783,7 +783,7 @@ options : /* empty */ { ; cmndtag : /* empty */ { - TAGS_INIT($$); + TAGS_INIT(&$$); } | cmndtag NOPASSWD { $$.nopasswd = true; diff --git a/plugins/sudoers/ldap_util.c b/plugins/sudoers/ldap_util.c index 5d7a4b1a4f..080c77e7b9 100644 --- a/plugins/sudoers/ldap_util.c +++ b/plugins/sudoers/ldap_util.c @@ -458,7 +458,7 @@ sudo_ldap_role_to_priv(const char *cn, void *hosts, void *runasusers, TAILQ_INSERT_TAIL(&priv->cmndlist, cmndspec, entries); /* Initialize cmndspec */ - TAGS_INIT(cmndspec->tags); + TAGS_INIT(&cmndspec->tags); cmndspec->notbefore = UNSPEC; cmndspec->notafter = UNSPEC; cmndspec->timeout = UNSPEC; diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index a3390bc26f..711bf87e1d 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -42,13 +42,13 @@ * Initialize all tags to UNSPEC. */ #define TAGS_INIT(t) do { \ - (t).follow = UNSPEC; \ - (t).log_input = UNSPEC; \ - (t).log_output = UNSPEC; \ - (t).noexec = UNSPEC; \ - (t).nopasswd = UNSPEC; \ - (t).send_mail = UNSPEC; \ - (t).setenv = UNSPEC; \ + (t)->follow = UNSPEC; \ + (t)->log_input = UNSPEC; \ + (t)->log_output = UNSPEC; \ + (t)->noexec = UNSPEC; \ + (t)->nopasswd = UNSPEC; \ + (t)->send_mail = UNSPEC; \ + (t)->setenv = UNSPEC; \ } while (0) /* diff --git a/plugins/sudoers/starttime.c b/plugins/sudoers/starttime.c index 8217a77b27..daee5fde15 100644 --- a/plugins/sudoers/starttime.c +++ b/plugins/sudoers/starttime.c @@ -98,7 +98,7 @@ get_starttime(pid_t pid, struct timespec *starttime) mib[3] = (int)pid; mib[4] = sizeof(*ki_proc); mib[5] = 1; - do { + for (;;) { struct sudo_kinfo_proc *kp; size += size / 10; @@ -108,7 +108,9 @@ get_starttime(pid_t pid, struct timespec *starttime) } ki_proc = kp; rc = sysctl(mib, sudo_kp_namelen, ki_proc, &size, NULL, 0); - } while (rc == -1 && errno == ENOMEM); + if (rc != -1 || errno != ENOMEM) + break; + } if (rc != -1) { #if defined(HAVE_KINFO_PROC_FREEBSD) /* FreeBSD and Dragonfly */ diff --git a/plugins/sudoers/tsgetgrpw.c b/plugins/sudoers/tsgetgrpw.c index 3e5d616bb3..2b6d3cbf0f 100644 --- a/plugins/sudoers/tsgetgrpw.c +++ b/plugins/sudoers/tsgetgrpw.c @@ -356,8 +356,7 @@ sudo_getgrouplist2_v1(const char *name, GETGROUPS_T basegid, GETGROUPS_T **groupsp, int *ngroupsp) { GETGROUPS_T *groups = *groupsp; - int grpsize = *ngroupsp; - int i, ngroups = 1; + int i, grpsize, ngroups = 1; int ret = -1; struct group *grp; @@ -372,7 +371,7 @@ sudo_getgrouplist2_v1(const char *name, GETGROUPS_T basegid, grpsize <<= 2; } else { /* Static group vector. */ - if (grpsize < 1) + if ((grpsize = *ngroupsp) < 1) return -1; } diff --git a/src/ttyname.c b/src/ttyname.c index 7a80ccc94d..47e4ab13f3 100644 --- a/src/ttyname.c +++ b/src/ttyname.c @@ -111,7 +111,7 @@ get_process_ttyname(char *name, size_t namelen) mib[3] = (int)getpid(); mib[4] = sizeof(*ki_proc); mib[5] = 1; - do { + for (;;) { struct sudo_kinfo_proc *kp; size += size / 10; @@ -121,7 +121,9 @@ get_process_ttyname(char *name, size_t namelen) } ki_proc = kp; rc = sysctl(mib, sudo_kp_namelen, ki_proc, &size, NULL, 0); - } while (rc == -1 && errno == ENOMEM); + if (rc != -1 || errno != ENOMEM) + break; + } errno = ENOENT; if (rc != -1) { if ((dev_t)ki_proc->sudo_kp_tdev != (dev_t)-1) { From 108e29446d36b6ed044e5c1f3dcf0cccb8500bb7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 14:12:04 -0700 Subject: [PATCH 26/31] Plug a memory leak in sudoerserrorf(). --- plugins/sudoers/gram.c | 4 +++- plugins/sudoers/gram.y | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 661b2167b3..1b11e8c32d 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -3205,7 +3205,9 @@ sudoerserrorf(const char *fmt, ...) /* Optimize common case, a single string. */ s = _(va_arg(ap, char *)); } else { - if (vasprintf(&s, fmt, ap) == -1) + if (vasprintf(&s, fmt, ap) != -1) + tofree = s; + else s = _("syntax error"); } sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d:%d: %s\n"), sudoers, diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 0957a1fe55..714d26eb5d 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1066,7 +1066,9 @@ sudoerserrorf(const char *fmt, ...) /* Optimize common case, a single string. */ s = _(va_arg(ap, char *)); } else { - if (vasprintf(&s, fmt, ap) == -1) + if (vasprintf(&s, fmt, ap) != -1) + tofree = s; + else s = _("syntax error"); } sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d:%d: %s\n"), sudoers, From 4e11bc0e26b76dfd885d968b925688ec1880c734 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 14:27:09 -0700 Subject: [PATCH 27/31] Suppress PVS Studio false positives. --- lib/eventlog/eventlog.c | 12 +- lib/util/arc4random.c | 2 +- lib/util/sudo_debug.c | 1 + plugins/audit_json/audit_json.c | 2 +- plugins/python/python_convmessage.c | 8 +- plugins/sudoers/auth/pam.c | 2 +- plugins/sudoers/getdate.c | 173 +++------ plugins/sudoers/getdate.y | 3 + plugins/sudoers/goodpath.c | 2 +- plugins/sudoers/gram.c | 544 ++++++++++++++-------------- plugins/sudoers/gram.h | 2 +- plugins/sudoers/gram.y | 4 + plugins/sudoers/rcstr.c | 2 +- plugins/sudoers/redblack.c | 2 +- plugins/sudoers/toke.c | 177 ++++----- plugins/sudoers/toke.l | 3 + plugins/sudoers/toke_util.c | 2 +- plugins/sudoers/visudo.c | 2 +- src/exec_common.c | 2 +- src/sesh.c | 4 +- src/sudo.c | 3 +- src/sudo_edit.c | 4 +- 22 files changed, 456 insertions(+), 500 deletions(-) diff --git a/lib/eventlog/eventlog.c b/lib/eventlog/eventlog.c index 2da61f91f4..ae16e2e6e0 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -348,7 +348,7 @@ exec_mailer(int pipein) /* Set stdin to read side of the pipe. */ if (dup3(pipein, STDIN_FILENO, 0) == -1) { - syslog(LOG_ERR, _("unable to dup stdin: %m")); + syslog(LOG_ERR, _("unable to dup stdin: %m")); // -V618 sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to dup stdin: %s", strerror(errno)); sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); @@ -357,7 +357,7 @@ exec_mailer(int pipein) /* Build up an argv based on the mailer path and flags */ if ((mflags = strdup(evl_conf.mailerflags)) == NULL) { - syslog(LOG_ERR, _("unable to allocate memory")); + syslog(LOG_ERR, _("unable to allocate memory")); // -V618 sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); _exit(127); } @@ -393,7 +393,7 @@ exec_mailer(int pipein) execve(mpath, argv, root_envp); else execv(mpath, argv); - syslog(LOG_ERR, _("unable to execute %s: %m"), mpath); + syslog(LOG_ERR, _("unable to execute %s: %m"), mpath); // -V618 sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to execute %s: %s", mpath, strerror(errno)); _exit(127); @@ -441,7 +441,7 @@ send_mail(const struct eventlog *evlog, const char *fmt, ...) switch (fork()) { case -1: /* Error. */ - syslog(LOG_ERR, _("unable to fork: %m")); + syslog(LOG_ERR, _("unable to fork: %m")); // -V618 sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to fork: %s", strerror(errno)); sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); @@ -485,7 +485,7 @@ send_mail(const struct eventlog *evlog, const char *fmt, ...) closefrom_nodebug(STDERR_FILENO + 1); if (pipe2(pfd, O_CLOEXEC) == -1) { - syslog(LOG_ERR, _("unable to open pipe: %m")); + syslog(LOG_ERR, _("unable to open pipe: %m")); // -V618 sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to open pipe: %s", strerror(errno)); sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); @@ -495,7 +495,7 @@ send_mail(const struct eventlog *evlog, const char *fmt, ...) switch (pid = sudo_debug_fork()) { case -1: /* Error. */ - syslog(LOG_ERR, _("unable to fork: %m")); + syslog(LOG_ERR, _("unable to fork: %m")); // -V618 sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to fork"); diff --git a/lib/util/arc4random.c b/lib/util/arc4random.c index 77e3ec205f..8e19555a87 100644 --- a/lib/util/arc4random.c +++ b/lib/util/arc4random.c @@ -142,7 +142,7 @@ _rs_rekey(unsigned char *dat, size_t datlen) } /* immediately reinit for backtracking resistance */ _rs_init(rs_buf, KEYSZ + IVSZ); - memset(rs_buf, 0, KEYSZ + IVSZ); + memset(rs_buf, 0, KEYSZ + IVSZ); // -V512 rs_have = sizeof(rs_buf) - KEYSZ - IVSZ; } diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index b98e05c562..50c18450f6 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -239,6 +239,7 @@ sudo_debug_new_output(struct sudo_debug_instance *instance, return output; oom: + // -V:sudo_warn_nodebug:575, 618 sudo_warn_nodebug(NULL); bad: if (output != NULL) diff --git a/plugins/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index 64adcb7382..acc4360c67 100644 --- a/plugins/audit_json/audit_json.c +++ b/plugins/audit_json/audit_json.c @@ -456,7 +456,7 @@ audit_write_exit_record(int exit_status, int error) goto oom; } else { json_value.type = JSON_STRING; - json_value.u.string = signame; + json_value.u.string = signame; // -V507 if (!sudo_json_add_value(&json, "signal", &json_value)) goto oom; } diff --git a/plugins/python/python_convmessage.c b/plugins/python/python_convmessage.c index 91cd3dfac9..67e6d96bcb 100644 --- a/plugins/python/python_convmessage.c +++ b/plugins/python/python_convmessage.c @@ -50,11 +50,11 @@ _sudo_ConvMessage__Init(PyObject *py_self, PyObject *py_args, PyObject *py_kwarg goto cleanup; py_object_set_attr_number(py_self, "timeout", conv_message.timeout); - if (PyErr_Occurred()) + if (PyErr_Occurred()) // -V547 goto cleanup; py_object_set_attr_string(py_self, "msg", conv_message.msg); - if (PyErr_Occurred()) + if (PyErr_Occurred()) // -V547 goto cleanup; cleanup: @@ -113,11 +113,11 @@ sudo_module_ConvMessage_to_c(PyObject *py_conv_message, struct sudo_conv_message debug_return_int(SUDO_RC_ERROR); conv_message->timeout = (int)py_object_get_optional_attr_number(py_conv_message, "timeout"); - if (PyErr_Occurred()) + if (PyErr_Occurred()) // -V547 debug_return_int(SUDO_RC_ERROR); conv_message->msg = py_object_get_optional_attr_string(py_conv_message, "msg"); - if (PyErr_Occurred()) + if (PyErr_Occurred()) // -V547 debug_return_int(SUDO_RC_ERROR); debug_return_int(SUDO_RC_OK); diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index 53890c2d5e..eb75dcd3fc 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -252,7 +252,7 @@ sudo_pam_init2(struct passwd *pw, sudo_auth *auth, bool quiet) if (ttypath == NULL) ttypath = ""; #endif - if (ttypath != NULL) { + if (ttypath != NULL) { // -V547 rc = pam_set_item(pamh, PAM_TTY, ttypath); if (rc != PAM_SUCCESS) { errstr = sudo_pam_strerror(pamh, rc); diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 8cd2cbcdea..b7d08d62d8 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -29,6 +29,9 @@ /* SUPPRESS 287 on yaccpar_sccsid *//* Unused static variable */ /* SUPPRESS 288 on yyerrlab *//* Label unused */ +/* PVS Studio suppression*/ +/* -V::1037, 1042*/ + #include #include @@ -106,7 +109,7 @@ static int yyerror(const char *s); static int yylex(void); int yyparse(void); -#line 94 "getdate.y" +#line 97 "getdate.y" #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -114,7 +117,7 @@ typedef union { enum _MERIDIAN Meridian; } YYSTYPE; #endif /* YYSTYPE_DEFINED */ -#line 112 "getdate.c" +#line 115 "getdate.c" #define tAGO 257 #define tDAY 258 #define tDAYZONE 259 @@ -129,11 +132,7 @@ typedef union { #define tZONE 268 #define tDST 269 #define YYERRCODE 256 -#if defined(__cplusplus) || defined(__STDC__) const short yylhs[] = -#else -short yylhs[] = -#endif { -1, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 6, 6, 6, 5, @@ -141,11 +140,7 @@ short yylhs[] = 9, 9, 9, 9, 9, 9, 9, 9, 8, 1, 1, }; -#if defined(__cplusplus) || defined(__STDC__) const short yylen[] = -#else -short yylen[] = -#endif { 2, 0, 2, 1, 1, 1, 1, 1, 1, 2, 4, 4, 6, 6, 1, 1, 2, 1, 2, 2, 3, @@ -153,11 +148,7 @@ short yylen[] = 2, 1, 2, 2, 1, 2, 2, 1, 1, 0, 1, }; -#if defined(__cplusplus) || defined(__STDC__) const short yydefred[] = -#else -short yydefred[] = -#endif { 1, 0, 0, 15, 32, 0, 38, 35, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 0, 18, 0, @@ -165,50 +156,30 @@ short yydefred[] = 0, 0, 16, 28, 0, 23, 27, 22, 0, 0, 25, 41, 11, 0, 10, 0, 0, 21, 13, 12, }; -#if defined(__cplusplus) || defined(__STDC__) const short yydgoto[] = -#else -short yydgoto[] = -#endif { 1, 45, 11, 12, 13, 14, 15, 16, 17, 18, }; -#if defined(__cplusplus) || defined(__STDC__) const short yysindex[] = -#else -short yysindex[] = -#endif { 0, -249, -38, 0, 0, -260, 0, 0, -240, -47, -248, 0, 0, 0, 0, 0, 0, 0, -237, 0, -18, 0, 0, 0, 0, 0, 0, -262, 0, 0, -239, -238, -236, 0, 0, -235, 0, 0, 0, -56, -19, 0, 0, 0, -234, 0, -232, -258, 0, 0, 0,}; -#if defined(__cplusplus) || defined(__STDC__) const short yyrindex[] = -#else -short yyrindex[] = -#endif { 0, 0, 1, 0, 0, 0, 0, 0, 0, 69, 12, 0, 0, 0, 0, 0, 0, 0, 23, 0, 34, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0,}; -#if defined(__cplusplus) || defined(__STDC__) const short yygindex[] = -#else -short yygindex[] = -#endif { 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 337 -#if defined(__cplusplus) || defined(__STDC__) const short yytable[] = -#else -short yytable[] = -#endif { 32, 17, 44, 42, 36, 37, 19, 20, 49, 2, 3, 31, 14, 4, 5, 6, 7, 8, 9, 10, 34, @@ -245,11 +216,7 @@ short yytable[] = 40, 0, 40, 40, 26, 26, 0, 39, 26, 26, 26, 26, 0, 0, 26, 39, 39, }; -#if defined(__cplusplus) || defined(__STDC__) const short yycheck[] = -#else -short yycheck[] = -#endif { 47, 0, 58, 261, 266, 267, 44, 267, 266, 258, 259, 58, 0, 262, 263, 264, 265, 266, 267, 268, 257, @@ -292,11 +259,7 @@ short yycheck[] = #endif #define YYMAXTOKEN 269 #if YYDEBUG -#if defined(__cplusplus) || defined(__STDC__) const char * const yyname[] = -#else -char *yyname[] = -#endif { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,"','",0,0,"'/'",0,0,0,0,0,0,0,0,0,0,"':'",0,0,0,0,0,0,0,0,0, @@ -308,11 +271,7 @@ char *yyname[] = "tDAYZONE","tID","tMERIDIAN","tMINUTE_UNIT","tMONTH","tMONTH_UNIT","tSEC_UNIT", "tSNUMBER","tUNUMBER","tZONE","tDST", }; -#if defined(__cplusplus) || defined(__STDC__) const char * const yyrule[] = -#else -char *yyrule[] = -#endif {"$accept : spec", "spec :", "spec : spec item", @@ -383,7 +342,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 313 "getdate.y" +#line 316 "getdate.y" /* Month and day table. */ static TABLE const MonthDayTable[] = { @@ -1005,13 +964,9 @@ main(int argc, char *argv[]) /* NOTREACHED */ } #endif /* TEST */ -#line 951 "getdate.c" +#line 954 "getdate.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ -#if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) -#else -static int yygrowstack() -#endif { unsigned int newsize; long sslen; @@ -1027,23 +982,19 @@ static int yygrowstack() #ifdef SIZE_MAX #define YY_SIZE_MAX SIZE_MAX #else -#ifdef __STDC__ #define YY_SIZE_MAX 0xffffffffU -#else -#define YY_SIZE_MAX (unsigned int)0xffffffff -#endif #endif if (YY_SIZE_MAX / newsize < sizeof *newss) goto bail; sslen = yyssp - yyss; - newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) : - (short *)malloc(newsize * sizeof *newss); /* overflow check above */ + newss = yyss ? realloc(yyss, newsize * sizeof *newss) : + malloc(newsize * sizeof *newss); /* overflow check above */ if (newss == NULL) goto bail; yyss = newss; yyssp = newss + sslen; - newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) : - (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */ + newvs = yyvs ? realloc(yyvs, newsize * sizeof *newvs) : + malloc(newsize * sizeof *newvs); /* overflow check above */ if (newvs == NULL) goto bail; yyvs = newvs; @@ -1052,10 +1003,8 @@ static int yygrowstack() yysslim = yyss + newsize - 1; return 0; bail: - if (yyss) - free(yyss); - if (yyvs) - free(yyvs); + free(yyss); + free(yyvs); yyss = yyssp = NULL; yyvs = yyvsp = NULL; yystacksize = 0; @@ -1067,19 +1016,11 @@ static int yygrowstack() #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int -#if defined(__cplusplus) || defined(__STDC__) yyparse(void) -#else -yyparse() -#endif { int yym, yyn, yystate; #if YYDEBUG -#if defined(__cplusplus) || defined(__STDC__) const char *yys; -#else /* !(defined(__cplusplus) || defined(__STDC__)) */ - char *yys; -#endif /* !(defined(__cplusplus) || defined(__STDC__)) */ if ((yys = getenv("YYDEBUG"))) { @@ -1214,37 +1155,37 @@ yyparse() switch (yyn) { case 3: -#line 112 "getdate.y" +#line 115 "getdate.y" { yyHaveTime++; } break; case 4: -#line 115 "getdate.y" +#line 118 "getdate.y" { yyHaveZone++; } break; case 5: -#line 118 "getdate.y" +#line 121 "getdate.y" { yyHaveDate++; } break; case 6: -#line 121 "getdate.y" +#line 124 "getdate.y" { yyHaveDay++; } break; case 7: -#line 124 "getdate.y" +#line 127 "getdate.y" { yyHaveRel++; } break; case 9: -#line 130 "getdate.y" +#line 133 "getdate.y" { yyHour = yyvsp[-1].Number; yyMinutes = 0; @@ -1253,7 +1194,7 @@ case 9: } break; case 10: -#line 136 "getdate.y" +#line 139 "getdate.y" { yyHour = yyvsp[-3].Number; yyMinutes = yyvsp[-1].Number; @@ -1262,7 +1203,7 @@ case 10: } break; case 11: -#line 142 "getdate.y" +#line 145 "getdate.y" { yyHour = yyvsp[-3].Number; yyMinutes = yyvsp[-1].Number; @@ -1272,7 +1213,7 @@ case 11: } break; case 12: -#line 149 "getdate.y" +#line 152 "getdate.y" { yyHour = yyvsp[-5].Number; yyMinutes = yyvsp[-3].Number; @@ -1281,7 +1222,7 @@ case 12: } break; case 13: -#line 155 "getdate.y" +#line 158 "getdate.y" { yyHour = yyvsp[-5].Number; yyMinutes = yyvsp[-3].Number; @@ -1292,56 +1233,56 @@ case 13: } break; case 14: -#line 165 "getdate.y" +#line 168 "getdate.y" { yyTimezone = yyvsp[0].Number; yyDSTmode = DSToff; } break; case 15: -#line 169 "getdate.y" +#line 172 "getdate.y" { yyTimezone = yyvsp[0].Number; yyDSTmode = DSTon; } break; case 16: -#line 174 "getdate.y" +#line 177 "getdate.y" { yyTimezone = yyvsp[-1].Number; yyDSTmode = DSTon; } break; case 17: -#line 180 "getdate.y" +#line 183 "getdate.y" { yyDayOrdinal = 1; yyDayNumber = yyvsp[0].Number; } break; case 18: -#line 184 "getdate.y" +#line 187 "getdate.y" { yyDayOrdinal = 1; yyDayNumber = yyvsp[-1].Number; } break; case 19: -#line 188 "getdate.y" +#line 191 "getdate.y" { yyDayOrdinal = yyvsp[-1].Number; yyDayNumber = yyvsp[0].Number; } break; case 20: -#line 194 "getdate.y" +#line 197 "getdate.y" { yyMonth = yyvsp[-2].Number; yyDay = yyvsp[0].Number; } break; case 21: -#line 198 "getdate.y" +#line 201 "getdate.y" { if (yyvsp[-4].Number >= 100) { yyYear = yyvsp[-4].Number; @@ -1355,7 +1296,7 @@ case 21: } break; case 22: -#line 209 "getdate.y" +#line 212 "getdate.y" { /* ISO 8601 format. yyyy-mm-dd. */ yyYear = yyvsp[-2].Number; @@ -1364,7 +1305,7 @@ case 22: } break; case 23: -#line 215 "getdate.y" +#line 218 "getdate.y" { /* e.g. 17-JUN-1992. */ yyDay = yyvsp[-2].Number; @@ -1373,14 +1314,14 @@ case 23: } break; case 24: -#line 221 "getdate.y" +#line 224 "getdate.y" { yyMonth = yyvsp[-1].Number; yyDay = yyvsp[0].Number; } break; case 25: -#line 225 "getdate.y" +#line 228 "getdate.y" { yyMonth = yyvsp[-3].Number; yyDay = yyvsp[-2].Number; @@ -1388,14 +1329,14 @@ case 25: } break; case 26: -#line 230 "getdate.y" +#line 233 "getdate.y" { yyMonth = yyvsp[0].Number; yyDay = yyvsp[-1].Number; } break; case 27: -#line 234 "getdate.y" +#line 237 "getdate.y" { yyMonth = yyvsp[-1].Number; yyDay = yyvsp[-2].Number; @@ -1403,68 +1344,68 @@ case 27: } break; case 28: -#line 241 "getdate.y" +#line 244 "getdate.y" { yyRelSeconds = -yyRelSeconds; yyRelMonth = -yyRelMonth; } break; case 30: -#line 248 "getdate.y" +#line 251 "getdate.y" { yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L; } break; case 31: -#line 251 "getdate.y" +#line 254 "getdate.y" { yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L; } break; case 32: -#line 254 "getdate.y" +#line 257 "getdate.y" { yyRelSeconds += yyvsp[0].Number * 60L; } break; case 33: -#line 257 "getdate.y" +#line 260 "getdate.y" { yyRelSeconds += yyvsp[-1].Number; } break; case 34: -#line 260 "getdate.y" +#line 263 "getdate.y" { yyRelSeconds += yyvsp[-1].Number; } break; case 35: -#line 263 "getdate.y" +#line 266 "getdate.y" { yyRelSeconds++; } break; case 36: -#line 266 "getdate.y" +#line 269 "getdate.y" { yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; } break; case 37: -#line 269 "getdate.y" +#line 272 "getdate.y" { yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; } break; case 38: -#line 272 "getdate.y" +#line 275 "getdate.y" { yyRelMonth += yyvsp[0].Number; } break; case 39: -#line 277 "getdate.y" +#line 280 "getdate.y" { if (yyHaveTime && yyHaveDate && !yyHaveRel) yyYear = yyvsp[0].Number; @@ -1492,18 +1433,18 @@ case 39: } break; case 40: -#line 304 "getdate.y" +#line 307 "getdate.y" { yyval.Meridian = MER24; } break; case 41: -#line 307 "getdate.y" +#line 310 "getdate.y" { yyval.Meridian = yyvsp[0].Meridian; } break; -#line 1449 "getdate.c" +#line 1434 "getdate.c" } yyssp -= yym; yystate = *yyssp; @@ -1556,19 +1497,15 @@ to state %d\n", YYPREFIX, *yyssp, yystate); yyoverflow: yyerror("yacc stack overflow"); yyabort: - if (yyss) - free(yyss); - if (yyvs) - free(yyvs); + free(yyss); + free(yyvs); yyss = yyssp = NULL; yyvs = yyvsp = NULL; yystacksize = 0; return (1); yyaccept: - if (yyss) - free(yyss); - if (yyvs) - free(yyvs); + free(yyss); + free(yyvs); yyss = yyssp = NULL; yyvs = yyvsp = NULL; yystacksize = 0; diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 531705fe22..6e424a7118 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -12,6 +12,9 @@ /* SUPPRESS 287 on yaccpar_sccsid *//* Unused static variable */ /* SUPPRESS 288 on yyerrlab *//* Label unused */ +// PVS Studio suppression +// -V::1037, 1042 + #include #include diff --git a/plugins/sudoers/goodpath.c b/plugins/sudoers/goodpath.c index 9f12c40f65..c4c8bbd3cc 100644 --- a/plugins/sudoers/goodpath.c +++ b/plugins/sudoers/goodpath.c @@ -55,7 +55,7 @@ sudo_goodpath(const char *path, const char *runchroot, struct stat *sbp) errno = ENAMETOOLONG; goto done; } - path = pathbuf; + path = pathbuf; // -V507 } if (sbp == NULL) sbp = &sb; diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 1b11e8c32d..0bb72857dd 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -128,6 +128,9 @@ /* If we last saw a newline the entry is on the preceding line. */ #define this_lineno (sudoerschar == '\n' ? sudolineno - 1 : sudolineno) +// PVS Studio suppression +// -V::1037, 1042 + /* * Globals */ @@ -159,7 +162,7 @@ static struct sudo_command *new_command(char *, char *); static struct command_digest *new_digest(int, char *); static void alias_error(const char *name, int errnum); -#line 157 "gram.c" +#line 160 "gram.c" # ifndef YY_CAST # ifdef __cplusplus @@ -316,7 +319,7 @@ extern int sudoersdebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 80 "gram.y" +#line 83 "gram.y" struct cmndspec *cmndspec; struct defaults *defaults; @@ -330,7 +333,7 @@ union YYSTYPE char *string; int tok; -#line 328 "gram.c" +#line 331 "gram.c" }; typedef union YYSTYPE YYSTYPE; @@ -836,21 +839,21 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 189, 189, 192, 195, 196, 199, 202, 205, 212, - 219, 225, 228, 231, 234, 237, 241, 245, 249, 253, - 259, 262, 268, 271, 277, 278, 284, 291, 298, 305, - 312, 321, 322, 326, 332, 346, 350, 356, 363, 370, - 377, 384, 393, 394, 453, 508, 515, 522, 529, 538, - 539, 545, 548, 569, 573, 579, 591, 603, 608, 612, - 617, 622, 627, 631, 636, 639, 644, 659, 668, 677, - 686, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 715, 721, 724, 728, 732, 740, 748, 759, 765, - 771, 777, 785, 788, 791, 794, 797, 800, 803, 806, - 809, 812, 815, 818, 821, 824, 827, 832, 839, 846, - 862, 863, 866, 866, 876, 879, 880, 886, 887, 890, - 890, 900, 903, 904, 910, 911, 914, 914, 924, 927, - 928, 931, 931, 941, 944, 945, 951, 955, 961, 968, - 975, 982, 989, 998, 999, 1005, 1009, 1015, 1022, 1029 + 0, 192, 192, 195, 198, 199, 202, 205, 208, 215, + 222, 228, 231, 234, 237, 240, 244, 248, 252, 256, + 262, 265, 271, 274, 280, 281, 287, 294, 301, 308, + 315, 324, 325, 329, 335, 349, 353, 359, 366, 373, + 380, 387, 396, 397, 456, 511, 518, 525, 532, 541, + 542, 548, 551, 572, 576, 582, 594, 606, 611, 615, + 620, 625, 630, 634, 639, 642, 647, 662, 671, 680, + 689, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 718, 724, 727, 731, 735, 743, 751, 762, 768, + 774, 780, 788, 791, 794, 797, 800, 803, 806, 809, + 812, 815, 818, 821, 824, 827, 830, 835, 842, 849, + 865, 866, 869, 869, 879, 882, 883, 889, 890, 893, + 893, 903, 906, 907, 913, 914, 917, 917, 927, 930, + 931, 934, 934, 944, 947, 948, 954, 958, 964, 971, + 978, 985, 992, 1001, 1002, 1008, 1012, 1018, 1025, 1032 }; #endif @@ -1619,31 +1622,31 @@ yyparse (void) switch (yyn) { case 2: /* file: %empty */ -#line 189 "gram.y" +#line 192 "gram.y" { ; /* empty file */ } -#line 1621 "gram.c" +#line 1624 "gram.c" break; case 6: /* entry: '\n' */ -#line 199 "gram.y" +#line 202 "gram.y" { ; /* blank line */ } -#line 1629 "gram.c" +#line 1632 "gram.c" break; case 7: /* entry: error '\n' */ -#line 202 "gram.y" +#line 205 "gram.y" { yyerrok; } -#line 1637 "gram.c" +#line 1640 "gram.c" break; case 8: /* entry: include */ -#line 205 "gram.y" +#line 208 "gram.y" { if (!push_include((yyvsp[0].string), false)) { free((yyvsp[0].string)); @@ -1651,11 +1654,11 @@ yyparse (void) } free((yyvsp[0].string)); } -#line 1649 "gram.c" +#line 1652 "gram.c" break; case 9: /* entry: includedir */ -#line 212 "gram.y" +#line 215 "gram.y" { if (!push_include((yyvsp[0].string), true)) { free((yyvsp[0].string)); @@ -1663,142 +1666,142 @@ yyparse (void) } free((yyvsp[0].string)); } -#line 1661 "gram.c" +#line 1664 "gram.c" break; case 10: /* entry: userlist privileges '\n' */ -#line 219 "gram.y" +#line 222 "gram.y" { if (!add_userspec((yyvsp[-2].member), (yyvsp[-1].privilege))) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -#line 1672 "gram.c" +#line 1675 "gram.c" break; case 11: /* entry: USERALIAS useraliases '\n' */ -#line 225 "gram.y" +#line 228 "gram.y" { ; } -#line 1680 "gram.c" +#line 1683 "gram.c" break; case 12: /* entry: HOSTALIAS hostaliases '\n' */ -#line 228 "gram.y" +#line 231 "gram.y" { ; } -#line 1688 "gram.c" +#line 1691 "gram.c" break; case 13: /* entry: CMNDALIAS cmndaliases '\n' */ -#line 231 "gram.y" +#line 234 "gram.y" { ; } -#line 1696 "gram.c" +#line 1699 "gram.c" break; case 14: /* entry: RUNASALIAS runasaliases '\n' */ -#line 234 "gram.y" +#line 237 "gram.y" { ; } -#line 1704 "gram.c" +#line 1707 "gram.c" break; case 15: /* entry: DEFAULTS defaults_list '\n' */ -#line 237 "gram.y" +#line 240 "gram.y" { if (!add_defaults(DEFAULTS, NULL, (yyvsp[-1].defaults))) YYERROR; } -#line 1713 "gram.c" +#line 1716 "gram.c" break; case 16: /* entry: DEFAULTS_USER userlist defaults_list '\n' */ -#line 241 "gram.y" +#line 244 "gram.y" { if (!add_defaults(DEFAULTS_USER, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1722 "gram.c" +#line 1725 "gram.c" break; case 17: /* entry: DEFAULTS_RUNAS userlist defaults_list '\n' */ -#line 245 "gram.y" +#line 248 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1731 "gram.c" +#line 1734 "gram.c" break; case 18: /* entry: DEFAULTS_HOST hostlist defaults_list '\n' */ -#line 249 "gram.y" +#line 252 "gram.y" { if (!add_defaults(DEFAULTS_HOST, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1740 "gram.c" +#line 1743 "gram.c" break; case 19: /* entry: DEFAULTS_CMND cmndlist defaults_list '\n' */ -#line 253 "gram.y" +#line 256 "gram.y" { if (!add_defaults(DEFAULTS_CMND, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1749 "gram.c" +#line 1752 "gram.c" break; case 20: /* include: INCLUDE WORD '\n' */ -#line 259 "gram.y" +#line 262 "gram.y" { (yyval.string) = (yyvsp[-1].string); } -#line 1757 "gram.c" +#line 1760 "gram.c" break; case 21: /* include: INCLUDE WORD error '\n' */ -#line 262 "gram.y" +#line 265 "gram.y" { yyerrok; (yyval.string) = (yyvsp[-2].string); } -#line 1766 "gram.c" +#line 1769 "gram.c" break; case 22: /* includedir: INCLUDEDIR WORD '\n' */ -#line 268 "gram.y" +#line 271 "gram.y" { (yyval.string) = (yyvsp[-1].string); } -#line 1774 "gram.c" +#line 1777 "gram.c" break; case 23: /* includedir: INCLUDEDIR WORD error '\n' */ -#line 271 "gram.y" +#line 274 "gram.y" { yyerrok; (yyval.string) = (yyvsp[-2].string); } -#line 1783 "gram.c" +#line 1786 "gram.c" break; case 25: /* defaults_list: defaults_list ',' defaults_entry */ -#line 278 "gram.y" +#line 281 "gram.y" { HLTQ_CONCAT((yyvsp[-2].defaults), (yyvsp[0].defaults), entries); (yyval.defaults) = (yyvsp[-2].defaults); } -#line 1792 "gram.c" +#line 1795 "gram.c" break; case 26: /* defaults_entry: DEFVAR */ -#line 284 "gram.y" +#line 287 "gram.y" { (yyval.defaults) = new_default((yyvsp[0].string), NULL, true); if ((yyval.defaults) == NULL) { @@ -1806,11 +1809,11 @@ yyparse (void) YYERROR; } } -#line 1804 "gram.c" +#line 1807 "gram.c" break; case 27: /* defaults_entry: '!' DEFVAR */ -#line 291 "gram.y" +#line 294 "gram.y" { (yyval.defaults) = new_default((yyvsp[0].string), NULL, false); if ((yyval.defaults) == NULL) { @@ -1818,11 +1821,11 @@ yyparse (void) YYERROR; } } -#line 1816 "gram.c" +#line 1819 "gram.c" break; case 28: /* defaults_entry: DEFVAR '=' WORD */ -#line 298 "gram.y" +#line 301 "gram.y" { (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), true); if ((yyval.defaults) == NULL) { @@ -1830,11 +1833,11 @@ yyparse (void) YYERROR; } } -#line 1828 "gram.c" +#line 1831 "gram.c" break; case 29: /* defaults_entry: DEFVAR '+' WORD */ -#line 305 "gram.y" +#line 308 "gram.y" { (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), '+'); if ((yyval.defaults) == NULL) { @@ -1842,11 +1845,11 @@ yyparse (void) YYERROR; } } -#line 1840 "gram.c" +#line 1843 "gram.c" break; case 30: /* defaults_entry: DEFVAR '-' WORD */ -#line 312 "gram.y" +#line 315 "gram.y" { (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), '-'); if ((yyval.defaults) == NULL) { @@ -1854,29 +1857,29 @@ yyparse (void) YYERROR; } } -#line 1852 "gram.c" +#line 1855 "gram.c" break; case 32: /* privileges: privileges ':' privilege */ -#line 322 "gram.y" +#line 325 "gram.y" { HLTQ_CONCAT((yyvsp[-2].privilege), (yyvsp[0].privilege), entries); (yyval.privilege) = (yyvsp[-2].privilege); } -#line 1861 "gram.c" +#line 1864 "gram.c" break; case 33: /* privileges: privileges ':' error */ -#line 326 "gram.y" +#line 329 "gram.y" { yyerrok; (yyval.privilege) = (yyvsp[-2].privilege); } -#line 1870 "gram.c" +#line 1873 "gram.c" break; case 34: /* privilege: hostlist '=' cmndspeclist */ -#line 332 "gram.y" +#line 335 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1889,29 +1892,29 @@ yyparse (void) HLTQ_INIT(p, entries); (yyval.privilege) = p; } -#line 1887 "gram.c" +#line 1890 "gram.c" break; case 35: /* ophost: host */ -#line 346 "gram.y" +#line 349 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 1896 "gram.c" +#line 1899 "gram.c" break; case 36: /* ophost: '!' host */ -#line 350 "gram.y" +#line 353 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 1905 "gram.c" +#line 1908 "gram.c" break; case 37: /* host: ALIAS */ -#line 356 "gram.y" +#line 359 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -1919,11 +1922,11 @@ yyparse (void) YYERROR; } } -#line 1917 "gram.c" +#line 1920 "gram.c" break; case 38: /* host: ALL */ -#line 363 "gram.y" +#line 366 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -1931,11 +1934,11 @@ yyparse (void) YYERROR; } } -#line 1929 "gram.c" +#line 1932 "gram.c" break; case 39: /* host: NETGROUP */ -#line 370 "gram.y" +#line 373 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), NETGROUP); if ((yyval.member) == NULL) { @@ -1943,11 +1946,11 @@ yyparse (void) YYERROR; } } -#line 1941 "gram.c" +#line 1944 "gram.c" break; case 40: /* host: NTWKADDR */ -#line 377 "gram.y" +#line 380 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), NTWKADDR); if ((yyval.member) == NULL) { @@ -1955,11 +1958,11 @@ yyparse (void) YYERROR; } } -#line 1953 "gram.c" +#line 1956 "gram.c" break; case 41: /* host: WORD */ -#line 384 "gram.y" +#line 387 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), WORD); if ((yyval.member) == NULL) { @@ -1967,11 +1970,11 @@ yyparse (void) YYERROR; } } -#line 1965 "gram.c" +#line 1968 "gram.c" break; case 43: /* cmndspeclist: cmndspeclist ',' cmndspec */ -#line 394 "gram.y" +#line 397 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST((yyvsp[-2].cmndspec), cmndspec, entries); @@ -2029,11 +2032,11 @@ yyparse (void) } (yyval.cmndspec) = (yyvsp[-2].cmndspec); } -#line 2027 "gram.c" +#line 2030 "gram.c" break; case 44: /* cmndspec: runasspec options cmndtag digcmnd */ -#line 453 "gram.y" +#line 456 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -2087,11 +2090,11 @@ yyparse (void) cs->tags.setenv = IMPLIED; (yyval.cmndspec) = cs; } -#line 2085 "gram.c" +#line 2088 "gram.c" break; case 45: /* digestspec: SHA224_TOK ':' DIGEST */ -#line 508 "gram.y" +#line 511 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA224, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2099,11 +2102,11 @@ yyparse (void) YYERROR; } } -#line 2097 "gram.c" +#line 2100 "gram.c" break; case 46: /* digestspec: SHA256_TOK ':' DIGEST */ -#line 515 "gram.y" +#line 518 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA256, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2111,11 +2114,11 @@ yyparse (void) YYERROR; } } -#line 2109 "gram.c" +#line 2112 "gram.c" break; case 47: /* digestspec: SHA384_TOK ':' DIGEST */ -#line 522 "gram.y" +#line 525 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA384, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2123,11 +2126,11 @@ yyparse (void) YYERROR; } } -#line 2121 "gram.c" +#line 2124 "gram.c" break; case 48: /* digestspec: SHA512_TOK ':' DIGEST */ -#line 529 "gram.y" +#line 532 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA512, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2135,28 +2138,28 @@ yyparse (void) YYERROR; } } -#line 2133 "gram.c" +#line 2136 "gram.c" break; case 50: /* digestlist: digestlist ',' digestspec */ -#line 539 "gram.y" +#line 542 "gram.y" { HLTQ_CONCAT((yyvsp[-2].digest), (yyvsp[0].digest), entries); (yyval.digest) = (yyvsp[-2].digest); } -#line 2142 "gram.c" +#line 2145 "gram.c" break; case 51: /* digcmnd: opcmnd */ -#line 545 "gram.y" +#line 548 "gram.y" { (yyval.member) = (yyvsp[0].member); } -#line 2150 "gram.c" +#line 2153 "gram.c" break; case 52: /* digcmnd: digestlist opcmnd */ -#line 548 "gram.y" +#line 551 "gram.y" { struct sudo_command *c = (struct sudo_command *) (yyvsp[0].member)->name; @@ -2176,29 +2179,29 @@ yyparse (void) HLTQ_TO_TAILQ(&c->digests, (yyvsp[-1].digest), entries); (yyval.member) = (yyvsp[0].member); } -#line 2174 "gram.c" +#line 2177 "gram.c" break; case 53: /* opcmnd: cmnd */ -#line 569 "gram.y" +#line 572 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 2183 "gram.c" +#line 2186 "gram.c" break; case 54: /* opcmnd: '!' cmnd */ -#line 573 "gram.y" +#line 576 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 2192 "gram.c" +#line 2195 "gram.c" break; case 55: /* chdirspec: CWD '=' WORD */ -#line 579 "gram.y" +#line 582 "gram.y" { if ((yyvsp[0].string)[0] != '/' && (yyvsp[0].string)[0] != '~') { if (strcmp((yyvsp[0].string), "*") != 0) { @@ -2209,11 +2212,11 @@ yyparse (void) } (yyval.string) = (yyvsp[0].string); } -#line 2207 "gram.c" +#line 2210 "gram.c" break; case 56: /* chrootspec: CHROOT '=' WORD */ -#line 591 "gram.y" +#line 594 "gram.y" { if ((yyvsp[0].string)[0] != '/' && (yyvsp[0].string)[0] != '~') { if (strcmp((yyvsp[0].string), "*") != 0) { @@ -2224,83 +2227,83 @@ yyparse (void) } (yyval.string) = (yyvsp[0].string); } -#line 2222 "gram.c" +#line 2225 "gram.c" break; case 57: /* timeoutspec: CMND_TIMEOUT '=' WORD */ -#line 603 "gram.y" +#line 606 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2230 "gram.c" +#line 2233 "gram.c" break; case 58: /* notbeforespec: NOTBEFORE '=' WORD */ -#line 608 "gram.y" +#line 611 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2238 "gram.c" +#line 2241 "gram.c" break; case 59: /* notafterspec: NOTAFTER '=' WORD */ -#line 612 "gram.y" +#line 615 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2246 "gram.c" +#line 2249 "gram.c" break; case 60: /* rolespec: ROLE '=' WORD */ -#line 617 "gram.y" +#line 620 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2254 "gram.c" +#line 2257 "gram.c" break; case 61: /* typespec: TYPE '=' WORD */ -#line 622 "gram.y" +#line 625 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2262 "gram.c" +#line 2265 "gram.c" break; case 62: /* privsspec: PRIVS '=' WORD */ -#line 627 "gram.y" +#line 630 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2270 "gram.c" +#line 2273 "gram.c" break; case 63: /* limitprivsspec: LIMITPRIVS '=' WORD */ -#line 631 "gram.y" +#line 634 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2278 "gram.c" +#line 2281 "gram.c" break; case 64: /* runasspec: %empty */ -#line 636 "gram.y" +#line 639 "gram.y" { (yyval.runas) = NULL; } -#line 2286 "gram.c" +#line 2289 "gram.c" break; case 65: /* runasspec: '(' runaslist ')' */ -#line 639 "gram.y" +#line 642 "gram.y" { (yyval.runas) = (yyvsp[-1].runas); } -#line 2294 "gram.c" +#line 2297 "gram.c" break; case 66: /* runaslist: %empty */ -#line 644 "gram.y" +#line 647 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) != NULL) { @@ -2316,11 +2319,11 @@ yyparse (void) YYERROR; } } -#line 2314 "gram.c" +#line 2317 "gram.c" break; case 67: /* runaslist: userlist */ -#line 659 "gram.y" +#line 662 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) == NULL) { @@ -2330,11 +2333,11 @@ yyparse (void) (yyval.runas)->runasusers = (yyvsp[0].member); /* $$->runasgroups = NULL; */ } -#line 2328 "gram.c" +#line 2331 "gram.c" break; case 68: /* runaslist: userlist ':' grouplist */ -#line 668 "gram.y" +#line 671 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) == NULL) { @@ -2344,11 +2347,11 @@ yyparse (void) (yyval.runas)->runasusers = (yyvsp[-2].member); (yyval.runas)->runasgroups = (yyvsp[0].member); } -#line 2342 "gram.c" +#line 2345 "gram.c" break; case 69: /* runaslist: ':' grouplist */ -#line 677 "gram.y" +#line 680 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) == NULL) { @@ -2358,11 +2361,11 @@ yyparse (void) /* $$->runasusers = NULL; */ (yyval.runas)->runasgroups = (yyvsp[0].member); } -#line 2356 "gram.c" +#line 2359 "gram.c" break; case 70: /* runaslist: ':' */ -#line 686 "gram.y" +#line 689 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) != NULL) { @@ -2378,106 +2381,106 @@ yyparse (void) YYERROR; } } -#line 2376 "gram.c" +#line 2379 "gram.c" break; case 71: /* reserved_word: ALL */ -#line 703 "gram.y" +#line 706 "gram.y" { (yyval.string) = "ALL"; } -#line 2382 "gram.c" +#line 2385 "gram.c" break; case 72: /* reserved_word: CHROOT */ -#line 704 "gram.y" +#line 707 "gram.y" { (yyval.string) = "CHROOT"; } -#line 2388 "gram.c" +#line 2391 "gram.c" break; case 73: /* reserved_word: CWD */ -#line 705 "gram.y" +#line 708 "gram.y" { (yyval.string) = "CWD"; } -#line 2394 "gram.c" +#line 2397 "gram.c" break; case 74: /* reserved_word: CMND_TIMEOUT */ -#line 706 "gram.y" +#line 709 "gram.y" { (yyval.string) = "CMND_TIMEOUT"; } -#line 2400 "gram.c" +#line 2403 "gram.c" break; case 75: /* reserved_word: NOTBEFORE */ -#line 707 "gram.y" +#line 710 "gram.y" { (yyval.string) = "NOTBEFORE"; } -#line 2406 "gram.c" +#line 2409 "gram.c" break; case 76: /* reserved_word: NOTAFTER */ -#line 708 "gram.y" +#line 711 "gram.y" { (yyval.string) = "NOTAFTER"; } -#line 2412 "gram.c" +#line 2415 "gram.c" break; case 77: /* reserved_word: ROLE */ -#line 709 "gram.y" +#line 712 "gram.y" { (yyval.string) = "ROLE"; } -#line 2418 "gram.c" +#line 2421 "gram.c" break; case 78: /* reserved_word: TYPE */ -#line 710 "gram.y" +#line 713 "gram.y" { (yyval.string) = "TYPE"; } -#line 2424 "gram.c" +#line 2427 "gram.c" break; case 79: /* reserved_word: PRIVS */ -#line 711 "gram.y" +#line 714 "gram.y" { (yyval.string) = "PRIVS"; } -#line 2430 "gram.c" +#line 2433 "gram.c" break; case 80: /* reserved_word: LIMITPRIVS */ -#line 712 "gram.y" +#line 715 "gram.y" { (yyval.string) = "LIMITPRIVS"; } -#line 2436 "gram.c" +#line 2439 "gram.c" break; case 81: /* reserved_alias: reserved_word */ -#line 715 "gram.y" +#line 718 "gram.y" { sudoerserrorf(U_("syntax error, reserved word %s used as an alias name"), (yyvsp[0].string)); YYERROR; } -#line 2445 "gram.c" +#line 2448 "gram.c" break; case 82: /* options: %empty */ -#line 721 "gram.y" +#line 724 "gram.y" { init_options(&(yyval.options)); } -#line 2453 "gram.c" +#line 2456 "gram.c" break; case 83: /* options: options chdirspec */ -#line 724 "gram.y" +#line 727 "gram.y" { free((yyval.options).runcwd); (yyval.options).runcwd = (yyvsp[0].string); } -#line 2462 "gram.c" +#line 2465 "gram.c" break; case 84: /* options: options chrootspec */ -#line 728 "gram.y" +#line 731 "gram.y" { free((yyval.options).runchroot); (yyval.options).runchroot = (yyvsp[0].string); } -#line 2471 "gram.c" +#line 2474 "gram.c" break; case 85: /* options: options notbeforespec */ -#line 732 "gram.y" +#line 735 "gram.y" { (yyval.options).notbefore = parse_gentime((yyvsp[0].string)); free((yyvsp[0].string)); @@ -2486,11 +2489,11 @@ yyparse (void) YYERROR; } } -#line 2484 "gram.c" +#line 2487 "gram.c" break; case 86: /* options: options notafterspec */ -#line 740 "gram.y" +#line 743 "gram.y" { (yyval.options).notafter = parse_gentime((yyvsp[0].string)); free((yyvsp[0].string)); @@ -2499,11 +2502,11 @@ yyparse (void) YYERROR; } } -#line 2497 "gram.c" +#line 2500 "gram.c" break; case 87: /* options: options timeoutspec */ -#line 748 "gram.y" +#line 751 "gram.y" { (yyval.options).timeout = parse_timeout((yyvsp[0].string)); free((yyvsp[0].string)); @@ -2515,175 +2518,175 @@ yyparse (void) YYERROR; } } -#line 2513 "gram.c" +#line 2516 "gram.c" break; case 88: /* options: options rolespec */ -#line 759 "gram.y" +#line 762 "gram.y" { #ifdef HAVE_SELINUX free((yyval.options).role); (yyval.options).role = (yyvsp[0].string); #endif } -#line 2524 "gram.c" +#line 2527 "gram.c" break; case 89: /* options: options typespec */ -#line 765 "gram.y" +#line 768 "gram.y" { #ifdef HAVE_SELINUX free((yyval.options).type); (yyval.options).type = (yyvsp[0].string); #endif } -#line 2535 "gram.c" +#line 2538 "gram.c" break; case 90: /* options: options privsspec */ -#line 771 "gram.y" +#line 774 "gram.y" { #ifdef HAVE_PRIV_SET free((yyval.options).privs); (yyval.options).privs = (yyvsp[0].string); #endif } -#line 2546 "gram.c" +#line 2549 "gram.c" break; case 91: /* options: options limitprivsspec */ -#line 777 "gram.y" +#line 780 "gram.y" { #ifdef HAVE_PRIV_SET free((yyval.options).limitprivs); (yyval.options).limitprivs = (yyvsp[0].string); #endif } -#line 2557 "gram.c" +#line 2560 "gram.c" break; case 92: /* cmndtag: %empty */ -#line 785 "gram.y" +#line 788 "gram.y" { TAGS_INIT(&(yyval.tag)); } -#line 2565 "gram.c" +#line 2568 "gram.c" break; case 93: /* cmndtag: cmndtag NOPASSWD */ -#line 788 "gram.y" +#line 791 "gram.y" { (yyval.tag).nopasswd = true; } -#line 2573 "gram.c" +#line 2576 "gram.c" break; case 94: /* cmndtag: cmndtag PASSWD */ -#line 791 "gram.y" +#line 794 "gram.y" { (yyval.tag).nopasswd = false; } -#line 2581 "gram.c" +#line 2584 "gram.c" break; case 95: /* cmndtag: cmndtag NOEXEC */ -#line 794 "gram.y" +#line 797 "gram.y" { (yyval.tag).noexec = true; } -#line 2589 "gram.c" +#line 2592 "gram.c" break; case 96: /* cmndtag: cmndtag EXEC */ -#line 797 "gram.y" +#line 800 "gram.y" { (yyval.tag).noexec = false; } -#line 2597 "gram.c" +#line 2600 "gram.c" break; case 97: /* cmndtag: cmndtag SETENV */ -#line 800 "gram.y" +#line 803 "gram.y" { (yyval.tag).setenv = true; } -#line 2605 "gram.c" +#line 2608 "gram.c" break; case 98: /* cmndtag: cmndtag NOSETENV */ -#line 803 "gram.y" +#line 806 "gram.y" { (yyval.tag).setenv = false; } -#line 2613 "gram.c" +#line 2616 "gram.c" break; case 99: /* cmndtag: cmndtag LOG_INPUT */ -#line 806 "gram.y" +#line 809 "gram.y" { (yyval.tag).log_input = true; } -#line 2621 "gram.c" +#line 2624 "gram.c" break; case 100: /* cmndtag: cmndtag NOLOG_INPUT */ -#line 809 "gram.y" +#line 812 "gram.y" { (yyval.tag).log_input = false; } -#line 2629 "gram.c" +#line 2632 "gram.c" break; case 101: /* cmndtag: cmndtag LOG_OUTPUT */ -#line 812 "gram.y" +#line 815 "gram.y" { (yyval.tag).log_output = true; } -#line 2637 "gram.c" +#line 2640 "gram.c" break; case 102: /* cmndtag: cmndtag NOLOG_OUTPUT */ -#line 815 "gram.y" +#line 818 "gram.y" { (yyval.tag).log_output = false; } -#line 2645 "gram.c" +#line 2648 "gram.c" break; case 103: /* cmndtag: cmndtag FOLLOWLNK */ -#line 818 "gram.y" +#line 821 "gram.y" { (yyval.tag).follow = true; } -#line 2653 "gram.c" +#line 2656 "gram.c" break; case 104: /* cmndtag: cmndtag NOFOLLOWLNK */ -#line 821 "gram.y" +#line 824 "gram.y" { (yyval.tag).follow = false; } -#line 2661 "gram.c" +#line 2664 "gram.c" break; case 105: /* cmndtag: cmndtag MAIL */ -#line 824 "gram.y" +#line 827 "gram.y" { (yyval.tag).send_mail = true; } -#line 2669 "gram.c" +#line 2672 "gram.c" break; case 106: /* cmndtag: cmndtag NOMAIL */ -#line 827 "gram.y" +#line 830 "gram.y" { (yyval.tag).send_mail = false; } -#line 2677 "gram.c" +#line 2680 "gram.c" break; case 107: /* cmnd: ALL */ -#line 832 "gram.y" +#line 835 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -2691,11 +2694,11 @@ yyparse (void) YYERROR; } } -#line 2689 "gram.c" +#line 2692 "gram.c" break; case 108: /* cmnd: ALIAS */ -#line 839 "gram.y" +#line 842 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -2703,11 +2706,11 @@ yyparse (void) YYERROR; } } -#line 2701 "gram.c" +#line 2704 "gram.c" break; case 109: /* cmnd: COMMAND */ -#line 846 "gram.y" +#line 849 "gram.y" { struct sudo_command *c; @@ -2722,20 +2725,20 @@ yyparse (void) YYERROR; } } -#line 2720 "gram.c" +#line 2723 "gram.c" break; case 112: /* $@1: %empty */ -#line 866 "gram.y" +#line 869 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2729 "gram.c" +#line 2732 "gram.c" break; case 113: /* hostalias: ALIAS $@1 '=' hostlist */ -#line 869 "gram.y" +#line 872 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), HOSTALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2743,29 +2746,29 @@ yyparse (void) YYERROR; } } -#line 2741 "gram.c" +#line 2744 "gram.c" break; case 116: /* hostlist: hostlist ',' ophost */ -#line 880 "gram.y" +#line 883 "gram.y" { HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 2750 "gram.c" +#line 2753 "gram.c" break; case 119: /* $@2: %empty */ -#line 890 "gram.y" +#line 893 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2759 "gram.c" +#line 2762 "gram.c" break; case 120: /* cmndalias: ALIAS $@2 '=' cmndlist */ -#line 893 "gram.y" +#line 896 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), CMNDALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2773,29 +2776,29 @@ yyparse (void) YYERROR; } } -#line 2771 "gram.c" +#line 2774 "gram.c" break; case 123: /* cmndlist: cmndlist ',' digcmnd */ -#line 904 "gram.y" +#line 907 "gram.y" { HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 2780 "gram.c" +#line 2783 "gram.c" break; case 126: /* $@3: %empty */ -#line 914 "gram.y" +#line 917 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2789 "gram.c" +#line 2792 "gram.c" break; case 127: /* runasalias: ALIAS $@3 '=' userlist */ -#line 917 "gram.y" +#line 920 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), RUNASALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2803,20 +2806,20 @@ yyparse (void) YYERROR; } } -#line 2801 "gram.c" +#line 2804 "gram.c" break; case 131: /* $@4: %empty */ -#line 931 "gram.y" +#line 934 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2810 "gram.c" +#line 2813 "gram.c" break; case 132: /* useralias: ALIAS $@4 '=' userlist */ -#line 934 "gram.y" +#line 937 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), USERALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2824,38 +2827,38 @@ yyparse (void) YYERROR; } } -#line 2822 "gram.c" +#line 2825 "gram.c" break; case 135: /* userlist: userlist ',' opuser */ -#line 945 "gram.y" +#line 948 "gram.y" { HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 2831 "gram.c" +#line 2834 "gram.c" break; case 136: /* opuser: user */ -#line 951 "gram.y" +#line 954 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 2840 "gram.c" +#line 2843 "gram.c" break; case 137: /* opuser: '!' user */ -#line 955 "gram.y" +#line 958 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 2849 "gram.c" +#line 2852 "gram.c" break; case 138: /* user: ALIAS */ -#line 961 "gram.y" +#line 964 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -2863,11 +2866,11 @@ yyparse (void) YYERROR; } } -#line 2861 "gram.c" +#line 2864 "gram.c" break; case 139: /* user: ALL */ -#line 968 "gram.y" +#line 971 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -2875,11 +2878,11 @@ yyparse (void) YYERROR; } } -#line 2873 "gram.c" +#line 2876 "gram.c" break; case 140: /* user: NETGROUP */ -#line 975 "gram.y" +#line 978 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), NETGROUP); if ((yyval.member) == NULL) { @@ -2887,11 +2890,11 @@ yyparse (void) YYERROR; } } -#line 2885 "gram.c" +#line 2888 "gram.c" break; case 141: /* user: USERGROUP */ -#line 982 "gram.y" +#line 985 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), USERGROUP); if ((yyval.member) == NULL) { @@ -2899,11 +2902,11 @@ yyparse (void) YYERROR; } } -#line 2897 "gram.c" +#line 2900 "gram.c" break; case 142: /* user: WORD */ -#line 989 "gram.y" +#line 992 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), WORD); if ((yyval.member) == NULL) { @@ -2911,38 +2914,38 @@ yyparse (void) YYERROR; } } -#line 2909 "gram.c" +#line 2912 "gram.c" break; case 144: /* grouplist: grouplist ',' opgroup */ -#line 999 "gram.y" +#line 1002 "gram.y" { HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 2918 "gram.c" +#line 2921 "gram.c" break; case 145: /* opgroup: group */ -#line 1005 "gram.y" +#line 1008 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 2927 "gram.c" +#line 2930 "gram.c" break; case 146: /* opgroup: '!' group */ -#line 1009 "gram.y" +#line 1012 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 2936 "gram.c" +#line 2939 "gram.c" break; case 147: /* group: ALIAS */ -#line 1015 "gram.y" +#line 1018 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -2950,11 +2953,11 @@ yyparse (void) YYERROR; } } -#line 2948 "gram.c" +#line 2951 "gram.c" break; case 148: /* group: ALL */ -#line 1022 "gram.y" +#line 1025 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -2962,11 +2965,11 @@ yyparse (void) YYERROR; } } -#line 2960 "gram.c" +#line 2963 "gram.c" break; case 149: /* group: WORD */ -#line 1029 "gram.y" +#line 1032 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), WORD); if ((yyval.member) == NULL) { @@ -2974,11 +2977,11 @@ yyparse (void) YYERROR; } } -#line 2972 "gram.c" +#line 2975 "gram.c" break; -#line 2976 "gram.c" +#line 2979 "gram.c" default: break; } @@ -3172,7 +3175,7 @@ yyparse (void) return yyresult; } -#line 1037 "gram.y" +#line 1040 "gram.y" /* Like yyerror() but takes a printf-style format string. */ void @@ -3243,6 +3246,7 @@ sudoerserrorf(const char *fmt, ...) void sudoerserror(const char *s) { + // -V:sudoerserror:575, 618 if (s == NULL) sudoerserrorf(NULL); else diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 1827de81d5..97c6638627 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -167,7 +167,7 @@ extern int sudoersdebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 80 "gram.y" +#line 83 "gram.y" struct cmndspec *cmndspec; struct defaults *defaults; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 714d26eb5d..d4dcf0d9ba 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -45,6 +45,9 @@ /* If we last saw a newline the entry is on the preceding line. */ #define this_lineno (sudoerschar == '\n' ? sudolineno - 1 : sudolineno) +// PVS Studio suppression +// -V::1037, 1042 + /* * Globals */ @@ -1104,6 +1107,7 @@ sudoerserrorf(const char *fmt, ...) void sudoerserror(const char *s) { + // -V:sudoerserror:575, 618 if (s == NULL) sudoerserrorf(NULL); else diff --git a/plugins/sudoers/rcstr.c b/plugins/sudoers/rcstr.c index 4426e094f0..04233a385b 100644 --- a/plugins/sudoers/rcstr.c +++ b/plugins/sudoers/rcstr.c @@ -66,7 +66,7 @@ rcstr_alloc(size_t len) rcs->refcnt = 1; rcs->str[0] = '\0'; /* cppcheck-suppress memleak */ - debug_return_ptr(rcs->str); + debug_return_ptr(rcs->str); // -V773 } char * diff --git a/plugins/sudoers/redblack.c b/plugins/sudoers/redblack.c index 3c837b8ee1..a7d023cd99 100644 --- a/plugins/sudoers/redblack.c +++ b/plugins/sudoers/redblack.c @@ -109,7 +109,7 @@ rbcreate(int (*compar)(const void *, const void*)) * Similarly, the fake root node keeps us from having to worry * about splitting the root. */ - tree->root.left = tree->root.right = tree->root.parent = &tree->nil; + tree->root.left = tree->root.right = tree->root.parent = &tree->nil; // -V778 tree->root.color = black; tree->root.data = NULL; diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 1e4d9bc44c..366f805c0b 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -2759,6 +2759,9 @@ char *sudoerstext; # define NAMLEN(dirent) strlen((dirent)->d_name) #endif +// PVS Studio suppression +// -V::519, 1004, 1037 + int sudolineno; /* current sudoers line number. */ char *sudoers; /* sudoers file being parsed. */ struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */ @@ -2801,7 +2804,7 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; -#line 2799 "toke.c" +#line 2802 "toke.c" #define INITIAL 0 #define GOTDEFS 1 @@ -3021,9 +3024,9 @@ YY_DECL } { -#line 114 "toke.l" +#line 117 "toke.l" -#line 3021 "toke.c" +#line 3024 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -3083,7 +3086,7 @@ YY_DECL case 1: YY_RULE_SETUP -#line 115 "toke.l" +#line 118 "toke.l" { LEXTRACE(", "); return ','; @@ -3091,12 +3094,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 120 "toke.l" +#line 123 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 122 "toke.l" +#line 125 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -3108,7 +3111,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 131 "toke.l" +#line 134 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -3117,7 +3120,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 137 "toke.l" +#line 140 "toke.l" { LEXTRACE("= "); return '='; @@ -3125,7 +3128,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 142 "toke.l" +#line 145 "toke.l" { LEXTRACE("+= "); return '+'; @@ -3133,7 +3136,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 147 "toke.l" +#line 150 "toke.l" { LEXTRACE("-= "); return '-'; @@ -3141,7 +3144,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 152 "toke.l" +#line 155 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3151,7 +3154,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 159 "toke.l" +#line 162 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -3164,7 +3167,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 168 "toke.l" +#line 171 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -3173,7 +3176,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 174 "toke.l" +#line 177 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -3211,7 +3214,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 209 "toke.l" +#line 212 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -3220,7 +3223,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 215 "toke.l" +#line 218 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -3231,7 +3234,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 223 "toke.l" +#line 226 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -3242,7 +3245,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 231 "toke.l" +#line 234 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -3254,7 +3257,7 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 239 "toke.l" +#line 242 "toke.l" { BEGIN INITIAL; sudoersless(0); @@ -3264,7 +3267,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 246 "toke.l" +#line 249 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -3275,7 +3278,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 254 "toke.l" +#line 257 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -3293,7 +3296,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 269 "toke.l" +#line 272 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -3318,7 +3321,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 291 "toke.l" +#line 294 "toke.l" { if (continued) { sudoerserror(N_("invalid line continuation")); @@ -3333,7 +3336,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 303 "toke.l" +#line 306 "toke.l" { if (continued) { sudoerserror(N_("invalid line continuation")); @@ -3349,7 +3352,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 315 "toke.l" +#line 318 "toke.l" { if (continued) { sudoerserror(N_("invalid line continuation")); @@ -3369,7 +3372,7 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 331 "toke.l" +#line 334 "toke.l" { if (continued) { sudoerserror(N_("invalid line continuation")); @@ -3388,7 +3391,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 347 "toke.l" +#line 350 "toke.l" { char deftype; int n; @@ -3432,7 +3435,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 388 "toke.l" +#line 391 "toke.l" { int n; @@ -3462,7 +3465,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 415 "toke.l" +#line 418 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -3471,7 +3474,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 421 "toke.l" +#line 424 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -3480,7 +3483,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 427 "toke.l" +#line 430 "toke.l" { LEXTRACE("NOEXEC "); return NOEXEC; @@ -3488,7 +3491,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 432 "toke.l" +#line 435 "toke.l" { LEXTRACE("EXEC "); return EXEC; @@ -3496,7 +3499,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 437 "toke.l" +#line 440 "toke.l" { LEXTRACE("SETENV "); return SETENV; @@ -3504,7 +3507,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 442 "toke.l" +#line 445 "toke.l" { LEXTRACE("NOSETENV "); return NOSETENV; @@ -3512,7 +3515,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 447 "toke.l" +#line 450 "toke.l" { LEXTRACE("LOG_OUTPUT "); return LOG_OUTPUT; @@ -3520,7 +3523,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 452 "toke.l" +#line 455 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); return NOLOG_OUTPUT; @@ -3528,7 +3531,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 457 "toke.l" +#line 460 "toke.l" { LEXTRACE("LOG_INPUT "); return LOG_INPUT; @@ -3536,7 +3539,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 462 "toke.l" +#line 465 "toke.l" { LEXTRACE("NOLOG_INPUT "); return NOLOG_INPUT; @@ -3544,7 +3547,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 467 "toke.l" +#line 470 "toke.l" { LEXTRACE("MAIL "); return MAIL; @@ -3552,7 +3555,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 472 "toke.l" +#line 475 "toke.l" { LEXTRACE("NOMAIL "); return NOMAIL; @@ -3560,7 +3563,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 477 "toke.l" +#line 480 "toke.l" { LEXTRACE("FOLLOW "); return FOLLOWLNK; @@ -3568,7 +3571,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 482 "toke.l" +#line 485 "toke.l" { LEXTRACE("NOFOLLOW "); return NOFOLLOWLNK; @@ -3576,7 +3579,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 487 "toke.l" +#line 490 "toke.l" { if (sudoerstext[0] == '+') sudoerserror(N_("empty netgroup")); @@ -3588,7 +3591,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 496 "toke.l" +#line 499 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3599,7 +3602,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 504 "toke.l" +#line 507 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3610,7 +3613,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 512 "toke.l" +#line 515 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3620,7 +3623,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 519 "toke.l" +#line 522 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3630,7 +3633,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 526 "toke.l" +#line 529 "toke.l" { if (!ipv6_valid(sudoerstext)) { sudoerserror(N_("invalid IPv6 address")); @@ -3645,7 +3648,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 538 "toke.l" +#line 541 "toke.l" { if (!ipv6_valid(sudoerstext)) { sudoerserror(N_("invalid IPv6 address")); @@ -3660,7 +3663,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 550 "toke.l" +#line 553 "toke.l" { LEXTRACE("ALL "); return ALL; @@ -3669,7 +3672,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 556 "toke.l" +#line 559 "toke.l" { LEXTRACE("CMND_TIMEOUT "); return CMND_TIMEOUT; @@ -3677,7 +3680,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 561 "toke.l" +#line 564 "toke.l" { LEXTRACE("NOTBEFORE "); return NOTBEFORE; @@ -3685,7 +3688,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 566 "toke.l" +#line 569 "toke.l" { LEXTRACE("NOTAFTER "); return NOTAFTER; @@ -3693,7 +3696,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 571 "toke.l" +#line 574 "toke.l" { LEXTRACE("CWD "); prev_state = YY_START; @@ -3703,7 +3706,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 578 "toke.l" +#line 581 "toke.l" { LEXTRACE("CHROOT "); prev_state = YY_START; @@ -3713,7 +3716,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 585 "toke.l" +#line 588 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3725,7 +3728,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 594 "toke.l" +#line 597 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3737,7 +3740,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 602 "toke.l" +#line 605 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3749,7 +3752,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 611 "toke.l" +#line 614 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3761,7 +3764,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 620 "toke.l" +#line 623 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3772,7 +3775,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 628 "toke.l" +#line 631 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3784,7 +3787,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 637 "toke.l" +#line 640 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3794,7 +3797,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 644 "toke.l" +#line 647 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3804,7 +3807,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 651 "toke.l" +#line 654 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3814,7 +3817,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 658 "toke.l" +#line 661 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3824,7 +3827,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 665 "toke.l" +#line 668 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3834,7 +3837,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 672 "toke.l" +#line 675 "toke.l" { BEGIN prev_state; if (!fill(sudoerstext, sudoersleng)) @@ -3845,7 +3848,7 @@ YY_RULE_SETUP YY_BREAK case 65: YY_RULE_SETUP -#line 680 "toke.l" +#line 683 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3862,7 +3865,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 694 "toke.l" +#line 697 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3872,7 +3875,7 @@ YY_RULE_SETUP YY_BREAK case 67: YY_RULE_SETUP -#line 701 "toke.l" +#line 704 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -3884,7 +3887,7 @@ YY_RULE_SETUP case 68: YY_RULE_SETUP -#line 710 "toke.l" +#line 713 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) @@ -3896,7 +3899,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 719 "toke.l" +#line 722 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3907,7 +3910,7 @@ YY_RULE_SETUP case 70: YY_RULE_SETUP -#line 727 "toke.l" +#line 730 "toke.l" { LEXTRACE("( "); return '('; @@ -3915,7 +3918,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 732 "toke.l" +#line 735 "toke.l" { LEXTRACE(") "); return ')'; @@ -3923,7 +3926,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 737 "toke.l" +#line 740 "toke.l" { LEXTRACE(", "); return ','; @@ -3931,7 +3934,7 @@ YY_RULE_SETUP YY_BREAK case 73: YY_RULE_SETUP -#line 742 "toke.l" +#line 745 "toke.l" { LEXTRACE("= "); return '='; @@ -3939,7 +3942,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 747 "toke.l" +#line 750 "toke.l" { LEXTRACE(": "); return ':'; @@ -3947,7 +3950,7 @@ YY_RULE_SETUP YY_BREAK case 75: YY_RULE_SETUP -#line 752 "toke.l" +#line 755 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3958,7 +3961,7 @@ YY_RULE_SETUP case 76: /* rule 76 can match eol */ YY_RULE_SETUP -#line 759 "toke.l" +#line 762 "toke.l" { if (YY_START == INSTR) { /* re-scan after changing state */ @@ -3977,7 +3980,7 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 775 "toke.l" +#line 778 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } @@ -3985,7 +3988,7 @@ YY_RULE_SETUP case 78: /* rule 78 can match eol */ YY_RULE_SETUP -#line 779 "toke.l" +#line 782 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; @@ -3995,7 +3998,7 @@ YY_RULE_SETUP case 79: /* rule 79 can match eol */ YY_RULE_SETUP -#line 785 "toke.l" +#line 788 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -4013,7 +4016,7 @@ YY_RULE_SETUP YY_BREAK case 80: YY_RULE_SETUP -#line 800 "toke.l" +#line 803 "toke.l" { LEXTRACE("NOMATCH "); return NOMATCH; @@ -4028,7 +4031,7 @@ case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): case YY_STATE_EOF(EXPECTPATH): -#line 805 "toke.l" +#line 808 "toke.l" { if (!pop_include()) yyterminate(); @@ -4036,10 +4039,10 @@ case YY_STATE_EOF(EXPECTPATH): YY_BREAK case 81: YY_RULE_SETUP -#line 810 "toke.l" +#line 813 "toke.l" ECHO; YY_BREAK -#line 4037 "toke.c" +#line 4040 "toke.c" case YY_END_OF_BUFFER: { @@ -5000,7 +5003,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 810 "toke.l" +#line 813 "toke.l" struct path_list { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 5903dcdfc0..cf5a7d40f0 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -50,6 +50,9 @@ # define NAMLEN(dirent) strlen((dirent)->d_name) #endif +// PVS Studio suppression +// -V::519, 1004, 1037 + int sudolineno; /* current sudoers line number. */ char *sudoers; /* sudoers file being parsed. */ struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */ diff --git a/plugins/sudoers/toke_util.c b/plugins/sudoers/toke_util.c index 22cad9e10e..5307666ebe 100644 --- a/plugins/sudoers/toke_util.c +++ b/plugins/sudoers/toke_util.c @@ -117,7 +117,7 @@ fill_cmnd(const char *src, size_t len) *dst = '\0'; /* Check for sudoedit specified as a fully-qualified path. */ - if ((dst = strrchr(sudoerslval.command.cmnd, '/')) != NULL) { + if ((dst = strrchr(sudoerslval.command.cmnd, '/')) != NULL) { // -V575 if (strcmp(dst, "/sudoedit") == 0) { if (sudoers_strict) { sudoerserror( diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index e09297bb97..6fd3c83861 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -477,7 +477,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, int editor_argc, ac = editor_argc - 3; if (lineno > 0) { (void)snprintf(linestr, sizeof(linestr), "+%d", lineno); - editor_argv[ac++] = linestr; + editor_argv[ac++] = linestr; // -V507 } editor_argv[ac++] = "--"; editor_argv[ac++] = sp->tpath; diff --git a/src/exec_common.c b/src/exec_common.c index 909d364ace..32834de08b 100644 --- a/src/exec_common.c +++ b/src/exec_common.c @@ -99,7 +99,7 @@ preload_dso(char *envp[], const char *dso_file) * whether it was dynamically allocated. [TODO: plugin API] */ if (preload_idx == -1 || !enabled) { - const int env_size = env_len + 1 + (preload_idx == -1) + enabled; + const int env_size = env_len + 1 + (preload_idx == -1) + enabled; // -V547 char **nenvp = reallocarray(NULL, env_size, sizeof(*envp)); if (nenvp == NULL) diff --git a/src/sesh.c b/src/sesh.c index 5f8f984b4b..f8f4654391 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -348,7 +348,7 @@ sesh_sudoedit(int argc, char *argv[]) if (argv[2] != NULL && strcmp(argv[2], "-h") == 0) { argv++; argc--; - CLR(edit_flags, CD_SUDOEDIT_FOLLOW); + CLR(edit_flags, CD_SUDOEDIT_FOLLOW); // -V753 } /* Check for -w flag (disallow directories writable by the user). */ @@ -399,7 +399,7 @@ sesh_sudoedit(int argc, char *argv[]) */ run_cred.uid = run_cred.euid = geteuid(); run_cred.gid = run_cred.egid = getegid(); - run_cred.ngroups = getgroups(0, NULL); + run_cred.ngroups = getgroups(0, NULL); // -V575 if (run_cred.ngroups > 0) { run_cred.groups = reallocarray(NULL, run_cred.ngroups, sizeof(GETGROUPS_T)); diff --git a/src/sudo.c b/src/sudo.c index f2d8d666e5..4c6c60e1e0 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -434,7 +434,8 @@ get_user_groups(const char *user, struct sudo_cred *cred) maxgroups = NGROUPS_MAX; /* Note that macOS may return ngroups > NGROUPS_MAX. */ - if ((cred->ngroups = getgroups(0, NULL)) > 0) { + cred->ngroups = getgroups(0, NULL); // -V575 + if (cred->ngroups > 0) { /* Use groups from kernel if not at limit or source is static. */ if (cred->ngroups != maxgroups || group_source == GROUP_SOURCE_STATIC) { cred->groups = reallocarray(NULL, cred->ngroups, sizeof(GETGROUPS_T)); diff --git a/src/sudo_edit.c b/src/sudo_edit.c index e65808148a..842eca307f 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -81,7 +81,7 @@ set_tmpdir(struct sudo_cred *user_cred) saved_cred.euid = geteuid(); saved_cred.gid = getgid(); saved_cred.egid = getegid(); - saved_cred.ngroups = getgroups(0, NULL); + saved_cred.ngroups = getgroups(0, NULL); // -V575 if (saved_cred.ngroups > 0) { saved_cred.groups = reallocarray(NULL, saved_cred.ngroups, sizeof(GETGROUPS_T)); @@ -216,7 +216,7 @@ sudo_edit_create_tfiles(struct command_details *command_details, continue; } tf[j].ofile = files[i]; - tf[j].osize = sb.st_size; + tf[j].osize = sb.st_size; // -V614 mtim_get(&sb, tf[j].omtim); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "seteuid(%u)", (unsigned int)user_details.cred.uid); From 4603da02afad0969937bc1c2b3a53821c41aff12 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 6 Jan 2021 19:16:26 -0700 Subject: [PATCH 28/31] Add a comment to verify_import() to clarify its purpose. --- plugins/python/python_importblocker.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/python/python_importblocker.c b/plugins/python/python_importblocker.c index a2b98eeea9..2bce36c0b9 100644 --- a/plugins/python/python_importblocker.c +++ b/plugins/python/python_importblocker.c @@ -35,6 +35,8 @@ _verify_import(const char *file_path) { debug_decl(_verify_import, PYTHON_DEBUG_INTERNAL); + // Check mode and owner similar to what we do in open_sudoers(). + // This is to help avoid loading a potentially insecure module. struct stat sb; if (stat(file_path, &sb) != 0) { PyErr_Format(PyExc_ImportError, "Failed to stat file '%s'", file_path); From 1b72d6a5cc636dd2bf4ca2ba8f97adf57f7e3e47 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 8 Jan 2021 19:29:17 -0700 Subject: [PATCH 29/31] Allow SELinux support to be disabled via the sudoers file. Defaults to true if sudo is built with SELinux support and SELinux is not disabled on the system. --- doc/sudoers.man.in | 14 ++++++++++++-- doc/sudoers.man.in.sed | 8 ++++++++ doc/sudoers.mdoc.in | 13 +++++++++++-- plugins/sudoers/def_data.c | 4 ++++ plugins/sudoers/def_data.h | 2 ++ plugins/sudoers/def_data.in | 3 +++ plugins/sudoers/defaults.c | 3 +++ plugins/sudoers/policy.c | 4 ++-- 8 files changed, 45 insertions(+), 6 deletions(-) diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index c193506045..6bd08d9c05 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -2,7 +2,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2020 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2021 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "December 11, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "January 8, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -3238,6 +3238,16 @@ when running a command or editing a file. This flag is \fIoff\fR by default. +.if \n(SL \{\ +.TP 18n +selinux +If enabled, the user may specify an SELinux role and/or type to use +when running the command, as permitted by the SELinux policy. +If SELinux is disabled on the system, this flag has no effect. +This flag is +\fIon\fR +by default. +.\} .TP 18n set_home If enabled and diff --git a/doc/sudoers.man.in.sed b/doc/sudoers.man.in.sed index 32ee5600de..eca83a306c 100644 --- a/doc/sudoers.man.in.sed +++ b/doc/sudoers.man.in.sed @@ -94,6 +94,14 @@ s/^\(.TH .*\)/.nr SL @SEMAN@\ /^\.TP 18n\nprivs$/i\ .if \\n(PS \\{\\ /^\.TP 18n\nprivs$/!i\ +.\\} + } + } + /^\.TP 18n\nselinux$/,/^\.TP 18n/ { + /^\.TP 18n/ { + /^\.TP 18n\nselinux$/i\ +.if \\n(SL \\{\\ + /^\.TP 18n\nselinux$/!i\ .\\} } } diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index cb1b9ad979..c14855b49e 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2020 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2021 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd December 11, 2020 +.Dd January 8, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -3051,6 +3051,15 @@ when running a command or editing a file. This flag is .Em off by default. +.if \n(SL \{\ +.It selinux +If enabled, the user may specify an SELinux role and/or type to use +when running the command, as permitted by the SELinux policy. +If SELinux is disabled on the system, this flag has no effect. +This flag is +.Em on +by default. +.\} .It set_home If enabled and .Nm sudo diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 7e4ec11fda..56cd224685 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -569,6 +569,10 @@ struct sudo_defs_types sudo_defs_table[] = { "log_format", T_TUPLE, N_("The format of logs to produce: %s"), def_data_log_format, + }, { + "selinux", T_FLAG, + N_("Enable SELinux RBAC support"), + NULL, }, { NULL, 0, NULL } diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index 3c6a668153..5c712b82f1 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -262,6 +262,8 @@ #define def_runchroot (sudo_defs_table[I_RUNCHROOT].sd_un.str) #define I_LOG_FORMAT 130 #define def_log_format (sudo_defs_table[I_LOG_FORMAT].sd_un.tuple) +#define I_SELINUX 131 +#define def_selinux (sudo_defs_table[I_SELINUX].sd_un.flag) enum def_tuple { never, diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index 4f18d6a0d9..e8162e8331 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -409,3 +409,6 @@ log_format T_TUPLE "The format of logs to produce: %s" sudo json +selinux + T_FLAG + "Enable SELinux RBAC support" diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index bfc2652203..8bc48b7986 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -526,6 +526,9 @@ init_defaults(void) #else def_pam_session = true; #endif +#ifdef HAVE_SELINUX + def_selinux = true; +#endif #ifdef HAVE_INNETGR def_use_netgroups = true; #endif diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 6f1787f181..d4be264916 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -839,11 +839,11 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[], } #endif /* HAVE_LOGIN_CAP_H */ #ifdef HAVE_SELINUX - if (user_role != NULL) { + if (def_selinux && user_role != NULL) { if ((command_info[info_len++] = sudo_new_key_val("selinux_role", user_role)) == NULL) goto oom; } - if (user_type != NULL) { + if (def_selinux && user_type != NULL) { if ((command_info[info_len++] = sudo_new_key_val("selinux_type", user_type)) == NULL) goto oom; } From 250cccfe4ca2a15ae106adc7884db2742648794d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 9 Jan 2021 12:59:48 -0700 Subject: [PATCH 30/31] Update .pot files for 1.9.5. --- plugins/sudoers/po/sudoers.pot | 598 +++++++++++++++++---------------- po/sudo.pot | 317 +++++++++-------- 2 files changed, 481 insertions(+), 434 deletions(-) diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot index 4b3bb805bd..e63b49b7c2 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.9.4\n" +"Project-Id-Version: sudo 1.9.5\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-11-14 06:24-0700\n" +"POT-Creation-Date: 2021-01-09 12:59-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: confstr.sh:1 gram.y:1077 +#: confstr.sh:1 gram.y:1075 msgid "syntax error" msgstr "" @@ -41,163 +41,167 @@ msgstr "" msgid "Sorry, try again." msgstr "" -#: gram.y:220 gram.y:286 gram.y:293 gram.y:300 gram.y:307 gram.y:314 gram.y:334 -#: gram.y:358 gram.y:365 gram.y:372 gram.y:379 gram.y:386 gram.y:455 gram.y:464 -#: gram.y:475 gram.y:510 gram.y:517 gram.y:524 gram.y:531 gram.y:558 gram.y:654 -#: gram.y:661 gram.y:670 gram.y:679 gram.y:696 gram.y:834 gram.y:841 gram.y:849 -#: gram.y:855 gram.y:971 gram.y:978 gram.y:985 gram.y:992 gram.y:999 -#: gram.y:1025 gram.y:1032 gram.y:1039 gram.y:1236 gram.y:1526 -#: lib/eventlog/eventlog.c:280 lib/eventlog/eventlog.c:352 -#: lib/eventlog/eventlog.c:753 lib/eventlog/eventlog.c:817 -#: lib/eventlog/eventlog.c:1062 lib/iolog/iolog_fileio.c:998 +#: gram.y:224 gram.y:290 gram.y:297 gram.y:304 gram.y:311 gram.y:318 gram.y:338 +#: gram.y:362 gram.y:369 gram.y:376 gram.y:383 gram.y:390 gram.y:459 gram.y:468 +#: gram.y:479 gram.y:514 gram.y:521 gram.y:528 gram.y:535 gram.y:562 gram.y:658 +#: gram.y:665 gram.y:674 gram.y:683 gram.y:700 gram.y:838 gram.y:845 gram.y:853 +#: gram.y:859 gram.y:967 gram.y:974 gram.y:981 gram.y:988 gram.y:995 +#: gram.y:1021 gram.y:1028 gram.y:1035 gram.y:1123 gram.y:1244 gram.y:1534 +#: lib/eventlog/eventlog.c:288 lib/eventlog/eventlog.c:360 +#: lib/eventlog/eventlog.c:761 lib/eventlog/eventlog.c:825 +#: lib/eventlog/eventlog.c:1070 lib/iolog/iolog_fileio.c:998 #: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:305 #: lib/iolog/iolog_json.c:335 lib/iolog/iolog_json.c:457 #: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 #: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 #: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 logsrvd/sendlog.c:480 -#: plugins/sudoers/alias.c:126 plugins/sudoers/alias.c:134 -#: plugins/sudoers/alias.c:153 plugins/sudoers/audit.c:115 -#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/bsdauth.c:143 -#: plugins/sudoers/auth/kerb5.c:118 plugins/sudoers/auth/kerb5.c:144 -#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/cvtsudoers.c:119 -#: plugins/sudoers/cvtsudoers.c:160 plugins/sudoers/cvtsudoers.c:177 -#: plugins/sudoers/cvtsudoers.c:188 plugins/sudoers/cvtsudoers.c:300 -#: plugins/sudoers/cvtsudoers.c:428 plugins/sudoers/cvtsudoers.c:561 -#: plugins/sudoers/cvtsudoers.c:578 plugins/sudoers/cvtsudoers.c:641 -#: plugins/sudoers/cvtsudoers.c:756 plugins/sudoers/cvtsudoers.c:764 -#: plugins/sudoers/cvtsudoers.c:1178 plugins/sudoers/cvtsudoers.c:1182 -#: plugins/sudoers/cvtsudoers.c:1284 plugins/sudoers/cvtsudoers_json.c:76 -#: plugins/sudoers/cvtsudoers_ldif.c:151 plugins/sudoers/cvtsudoers_ldif.c:194 -#: plugins/sudoers/cvtsudoers_ldif.c:235 plugins/sudoers/cvtsudoers_ldif.c:300 -#: plugins/sudoers/cvtsudoers_ldif.c:371 plugins/sudoers/cvtsudoers_ldif.c:421 -#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:440 -#: plugins/sudoers/cvtsudoers_ldif.c:447 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:615 -#: plugins/sudoers/defaults.c:630 plugins/sudoers/defaults.c:923 -#: plugins/sudoers/defaults.c:1098 plugins/sudoers/editor.c:181 -#: plugins/sudoers/env.c:261 plugins/sudoers/exptilde.c:92 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:596 -#: plugins/sudoers/iolog.c:613 plugins/sudoers/ldap.c:184 -#: plugins/sudoers/ldap.c:422 plugins/sudoers/ldap.c:432 -#: plugins/sudoers/ldap.c:437 plugins/sudoers/ldap.c:441 -#: plugins/sudoers/ldap.c:453 plugins/sudoers/ldap.c:744 -#: plugins/sudoers/ldap.c:908 plugins/sudoers/ldap.c:1281 -#: plugins/sudoers/ldap.c:1709 plugins/sudoers/ldap.c:1746 -#: plugins/sudoers/ldap.c:1827 plugins/sudoers/ldap.c:1962 -#: plugins/sudoers/ldap.c:2063 plugins/sudoers/ldap.c:2079 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:84 -#: plugins/sudoers/log_client.c:105 plugins/sudoers/log_client.c:381 -#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 -#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 -#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 -#: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:166 -#: plugins/sudoers/logging.c:426 plugins/sudoers/logging.c:446 -#: plugins/sudoers/logging.c:527 plugins/sudoers/match_command.c:281 -#: plugins/sudoers/match_command.c:449 plugins/sudoers/match_command.c:499 -#: plugins/sudoers/match_command.c:573 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 -#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 -#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 -#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 -#: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 -#: plugins/sudoers/parse_ldif.c:352 plugins/sudoers/parse_ldif.c:379 -#: plugins/sudoers/parse_ldif.c:396 plugins/sudoers/parse_ldif.c:408 -#: plugins/sudoers/parse_ldif.c:412 plugins/sudoers/parse_ldif.c:426 -#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 -#: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 -#: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:526 -#: plugins/sudoers/policy.c:874 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 -#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 -#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 -#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 -#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:407 -#: plugins/sudoers/sssd.c:470 plugins/sudoers/sssd.c:514 -#: plugins/sudoers/sssd.c:561 plugins/sudoers/sssd.c:754 -#: plugins/sudoers/stubs.c:110 plugins/sudoers/stubs.c:118 -#: plugins/sudoers/sudoers.c:300 plugins/sudoers/sudoers.c:326 -#: plugins/sudoers/sudoers.c:370 plugins/sudoers/sudoers.c:381 -#: plugins/sudoers/sudoers.c:391 plugins/sudoers/sudoers.c:433 -#: plugins/sudoers/sudoers.c:794 plugins/sudoers/sudoers.c:927 -#: plugins/sudoers/sudoers.c:961 plugins/sudoers/sudoers.c:1265 -#: plugins/sudoers/sudoreplay.c:552 plugins/sudoers/sudoreplay.c:555 -#: plugins/sudoers/sudoreplay.c:1259 plugins/sudoers/sudoreplay.c:1469 -#: plugins/sudoers/sudoreplay.c:1473 plugins/sudoers/testsudoers.c:128 -#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/testsudoers.c:587 plugins/sudoers/timestamp.c:432 -#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 -#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 -#: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 -#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 -#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 -#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 -#: plugins/sudoers/visudo.c:1129 toke.l:913 toke.l:1033 toke.l:1091 +#: plugins/sudoers/audit.c:115 plugins/sudoers/audit.c:265 +#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 +#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 +#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 +#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 +#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 +#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:634 +#: plugins/sudoers/defaults.c:927 plugins/sudoers/defaults.c:1102 +#: plugins/sudoers/editor.c:181 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:596 plugins/sudoers/iolog.c:613 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:422 +#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:437 +#: plugins/sudoers/ldap.c:441 plugins/sudoers/ldap.c:453 +#: plugins/sudoers/ldap.c:744 plugins/sudoers/ldap.c:908 +#: plugins/sudoers/ldap.c:1281 plugins/sudoers/ldap.c:1709 +#: plugins/sudoers/ldap.c:1746 plugins/sudoers/ldap.c:1827 +#: plugins/sudoers/ldap.c:1962 plugins/sudoers/ldap.c:2063 +#: plugins/sudoers/ldap.c:2079 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:678 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:326 +#: plugins/sudoers/ldap_util.c:333 plugins/sudoers/ldap_util.c:603 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:105 +#: plugins/sudoers/log_client.c:381 plugins/sudoers/log_client.c:686 +#: plugins/sudoers/log_client.c:704 plugins/sudoers/log_client.c:1413 +#: plugins/sudoers/log_client.c:1626 plugins/sudoers/log_client.c:1951 +#: plugins/sudoers/log_client.c:2008 plugins/sudoers/logging.c:100 +#: plugins/sudoers/logging.c:166 plugins/sudoers/logging.c:426 +#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:527 +#: plugins/sudoers/match_command.c:277 plugins/sudoers/match_command.c:445 +#: plugins/sudoers/match_command.c:495 plugins/sudoers/match_command.c:569 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:199 +#: plugins/sudoers/parse.c:213 plugins/sudoers/parse.c:230 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:264 +#: plugins/sudoers/parse.c:275 plugins/sudoers/parse_ldif.c:153 +#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 +#: plugins/sudoers/parse_ldif.c:260 plugins/sudoers/parse_ldif.c:265 +#: plugins/sudoers/parse_ldif.c:341 plugins/sudoers/parse_ldif.c:352 +#: plugins/sudoers/parse_ldif.c:379 plugins/sudoers/parse_ldif.c:396 +#: plugins/sudoers/parse_ldif.c:408 plugins/sudoers/parse_ldif.c:412 +#: plugins/sudoers/parse_ldif.c:426 plugins/sudoers/parse_ldif.c:594 +#: plugins/sudoers/parse_ldif.c:624 plugins/sudoers/parse_ldif.c:649 +#: plugins/sudoers/parse_ldif.c:707 plugins/sudoers/parse_ldif.c:724 +#: plugins/sudoers/parse_ldif.c:752 plugins/sudoers/parse_ldif.c:759 +#: plugins/sudoers/policy.c:526 plugins/sudoers/policy.c:874 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:407 plugins/sudoers/sssd.c:470 +#: plugins/sudoers/sssd.c:514 plugins/sudoers/sssd.c:561 +#: plugins/sudoers/sssd.c:754 plugins/sudoers/stubs.c:110 +#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:298 +#: plugins/sudoers/sudoers.c:324 plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:379 plugins/sudoers/sudoers.c:389 +#: plugins/sudoers/sudoers.c:431 plugins/sudoers/sudoers.c:792 +#: plugins/sudoers/sudoers.c:927 plugins/sudoers/sudoers.c:961 +#: plugins/sudoers/sudoers.c:1265 plugins/sudoers/sudoreplay.c:552 +#: plugins/sudoers/sudoreplay.c:555 plugins/sudoers/sudoreplay.c:1259 +#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/sudoreplay.c:1473 +#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:587 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:466 +#: plugins/sudoers/timestamp.c:967 plugins/sudoers/toke_util.c:51 +#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:129 +#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:145 plugins/sudoers/visudo.c:323 +#: plugins/sudoers/visudo.c:329 plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:615 plugins/sudoers/visudo.c:935 +#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:916 +#: toke.l:1036 toke.l:1094 msgid "unable to allocate memory" msgstr "" -#: gram.y:552 +#: gram.y:556 msgid "a digest requires a path name" msgstr "" -#: gram.y:581 +#: gram.y:585 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "" -#: gram.y:593 +#: gram.y:597 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "" -#: gram.y:715 +#: gram.y:719 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "" -#: gram.y:735 +#: gram.y:739 msgid "invalid notbefore value" msgstr "" -#: gram.y:743 +#: gram.y:747 msgid "invalid notafter value" msgstr "" -#: gram.y:752 plugins/sudoers/policy.c:335 +#: gram.y:756 plugins/sudoers/policy.c:335 msgid "timeout value too large" msgstr "" -#: gram.y:754 plugins/sudoers/policy.c:337 +#: gram.y:758 plugins/sudoers/policy.c:337 msgid "invalid timeout value" msgstr "" -#: gram.y:1079 +#: gram.y:1077 #, c-format msgid "%s:%d:%d: %s\n" msgstr "" -#: gram.y:1526 lib/eventlog/eventlog.c:280 lib/eventlog/eventlog.c:753 -#: lib/eventlog/eventlog.c:815 lib/eventlog/eventlog.c:816 -#: lib/eventlog/eventlog.c:1062 lib/iolog/iolog_fileio.c:998 +#: gram.y:1121 +#, c-format +msgid "Alias \"%s\" already defined" +msgstr "" + +#: gram.y:1534 lib/eventlog/eventlog.c:288 lib/eventlog/eventlog.c:761 +#: lib/eventlog/eventlog.c:823 lib/eventlog/eventlog.c:824 +#: lib/eventlog/eventlog.c:1070 lib/iolog/iolog_fileio.c:998 #: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:304 #: lib/iolog/iolog_json.c:335 lib/iolog/iolog_json.c:457 #: lib/iolog/iolog_json.c:735 lib/iolog/iolog_util.c:106 #: lib/iolog/iolog_util.c:115 lib/iolog/iolog_util.c:125 #: lib/iolog/iolog_util.c:133 lib/iolog/iolog_util.c:137 -#: lib/iolog/iolog_util.c:196 logsrvd/logsrvd.c:1280 logsrvd/logsrvd.c:1293 -#: logsrvd/logsrvd.c:1338 logsrvd/sendlog.c:480 logsrvd/sendlog.c:1321 +#: lib/iolog/iolog_util.c:196 logsrvd/logsrvd.c:1290 logsrvd/logsrvd.c:1303 +#: logsrvd/logsrvd.c:1348 logsrvd/sendlog.c:480 logsrvd/sendlog.c:1321 #: logsrvd/sendlog.c:1328 logsrvd/sendlog.c:1746 plugins/sudoers/audit.c:115 -#: plugins/sudoers/audit.c:210 plugins/sudoers/auth/pam.c:482 +#: plugins/sudoers/audit.c:265 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 #: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 #: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 @@ -212,8 +216,8 @@ msgstr "" #: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 #: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 #: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 -#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:630 -#: plugins/sudoers/defaults.c:923 plugins/sudoers/defaults.c:1098 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:634 +#: plugins/sudoers/defaults.c:927 plugins/sudoers/defaults.c:1102 #: plugins/sudoers/editor.c:181 plugins/sudoers/env.c:261 #: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 #: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 @@ -233,17 +237,17 @@ msgstr "" #: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 #: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 #: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:603 -#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/log_client.c:105 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:105 #: plugins/sudoers/log_client.c:214 plugins/sudoers/log_client.c:235 #: plugins/sudoers/log_client.c:248 plugins/sudoers/log_client.c:381 -#: plugins/sudoers/log_client.c:688 plugins/sudoers/log_client.c:706 -#: plugins/sudoers/log_client.c:1407 plugins/sudoers/log_client.c:1620 -#: plugins/sudoers/log_client.c:1942 plugins/sudoers/log_client.c:1999 +#: plugins/sudoers/log_client.c:686 plugins/sudoers/log_client.c:704 +#: plugins/sudoers/log_client.c:1413 plugins/sudoers/log_client.c:1626 +#: plugins/sudoers/log_client.c:1951 plugins/sudoers/log_client.c:2008 #: plugins/sudoers/logging.c:100 plugins/sudoers/logging.c:165 #: plugins/sudoers/logging.c:166 plugins/sudoers/logging.c:425 #: plugins/sudoers/logging.c:445 plugins/sudoers/logging.c:527 -#: plugins/sudoers/match_command.c:280 plugins/sudoers/match_command.c:448 -#: plugins/sudoers/match_command.c:498 plugins/sudoers/match_command.c:573 +#: plugins/sudoers/match_command.c:276 plugins/sudoers/match_command.c:444 +#: plugins/sudoers/match_command.c:494 plugins/sudoers/match_command.c:569 #: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:198 #: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:229 #: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:263 @@ -276,30 +280,30 @@ msgstr "" #: plugins/sudoers/sssd.c:407 plugins/sudoers/sssd.c:470 #: plugins/sudoers/sssd.c:514 plugins/sudoers/sssd.c:561 #: plugins/sudoers/sssd.c:754 plugins/sudoers/stubs.c:110 -#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:300 -#: plugins/sudoers/sudoers.c:326 plugins/sudoers/sudoers.c:370 -#: plugins/sudoers/sudoers.c:381 plugins/sudoers/sudoers.c:391 -#: plugins/sudoers/sudoers.c:433 plugins/sudoers/sudoers.c:794 +#: plugins/sudoers/stubs.c:118 plugins/sudoers/sudoers.c:298 +#: plugins/sudoers/sudoers.c:324 plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:379 plugins/sudoers/sudoers.c:389 +#: plugins/sudoers/sudoers.c:431 plugins/sudoers/sudoers.c:792 #: plugins/sudoers/sudoers.c:927 plugins/sudoers/sudoers.c:961 #: plugins/sudoers/sudoers.c:1265 plugins/sudoers/sudoreplay.c:552 #: plugins/sudoers/sudoreplay.c:555 plugins/sudoers/sudoreplay.c:1259 #: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/sudoreplay.c:1473 #: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:587 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 +#: plugins/sudoers/timestamp.c:422 plugins/sudoers/timestamp.c:466 +#: plugins/sudoers/timestamp.c:967 plugins/sudoers/toke_util.c:51 #: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 #: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 #: plugins/sudoers/visudo.c:145 plugins/sudoers/visudo.c:323 #: plugins/sudoers/visudo.c:329 plugins/sudoers/visudo.c:439 #: plugins/sudoers/visudo.c:615 plugins/sudoers/visudo.c:935 -#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:913 -#: toke.l:1033 toke.l:1091 +#: plugins/sudoers/visudo.c:1008 plugins/sudoers/visudo.c:1129 toke.l:916 +#: toke.l:1036 toke.l:1094 #, c-format msgid "%s: %s" msgstr "" -#: lib/eventlog/eventlog.c:285 lib/iolog/iolog_json.c:463 +#: lib/eventlog/eventlog.c:293 lib/iolog/iolog_json.c:463 #: lib/iolog/iolog_json.c:466 lib/iolog/iolog_json.c:468 #: lib/iolog/iolog_json.c:560 plugins/sudoers/cvtsudoers_ldif.c:244 #: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 @@ -307,7 +311,7 @@ msgstr "" #: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:618 #: plugins/sudoers/ldap.c:517 plugins/sudoers/ldap.c:748 #: plugins/sudoers/ldap.c:1081 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:90 +#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:92 #: plugins/sudoers/policy.c:556 plugins/sudoers/policy.c:711 #: plugins/sudoers/policy.c:721 plugins/sudoers/prompt.c:161 #: plugins/sudoers/sudoers.c:983 plugins/sudoers/testsudoers.c:249 @@ -316,36 +320,36 @@ msgstr "" msgid "internal error, %s overflow" msgstr "" -#: lib/eventlog/eventlog.c:343 +#: lib/eventlog/eventlog.c:351 #, c-format msgid "unable to dup stdin: %m" msgstr "" -#: lib/eventlog/eventlog.c:388 +#: lib/eventlog/eventlog.c:396 #, c-format msgid "unable to execute %s: %m" msgstr "" -#: lib/eventlog/eventlog.c:428 plugins/sudoers/auth/aix_auth.c:198 +#: lib/eventlog/eventlog.c:436 plugins/sudoers/auth/aix_auth.c:198 msgid "unable to fork" msgstr "" -#: lib/eventlog/eventlog.c:436 lib/eventlog/eventlog.c:490 +#: lib/eventlog/eventlog.c:444 lib/eventlog/eventlog.c:498 #, c-format msgid "unable to fork: %m" msgstr "" -#: lib/eventlog/eventlog.c:480 +#: lib/eventlog/eventlog.c:488 #, c-format msgid "unable to open pipe: %m" msgstr "" -#: lib/eventlog/eventlog.c:894 +#: lib/eventlog/eventlog.c:902 #, c-format msgid "%8s : %s" msgstr "" -#: lib/eventlog/eventlog.c:923 +#: lib/eventlog/eventlog.c:931 #, c-format msgid "%8s : (command continued) %s" msgstr "" @@ -484,141 +488,141 @@ msgstr "" msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "" -#: logsrvd/logsrvd.c:290 logsrvd/logsrvd.c:353 logsrvd/logsrvd.c:394 -#: logsrvd/logsrvd.c:449 logsrvd/logsrvd.c:517 logsrvd/logsrvd.c:568 -#: logsrvd/logsrvd.c:600 logsrvd/logsrvd.c:632 +#: logsrvd/logsrvd.c:294 logsrvd/logsrvd.c:357 logsrvd/logsrvd.c:398 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:521 logsrvd/logsrvd.c:572 +#: logsrvd/logsrvd.c:604 logsrvd/logsrvd.c:636 msgid "state machine error" msgstr "" -#: logsrvd/logsrvd.c:299 +#: logsrvd/logsrvd.c:303 msgid "invalid AcceptMessage" msgstr "" -#: logsrvd/logsrvd.c:307 +#: logsrvd/logsrvd.c:311 msgid "error parsing AcceptMessage" msgstr "" -#: logsrvd/logsrvd.c:314 +#: logsrvd/logsrvd.c:318 msgid "error creating I/O log" msgstr "" -#: logsrvd/logsrvd.c:321 +#: logsrvd/logsrvd.c:325 msgid "error logging accept event" msgstr "" -#: logsrvd/logsrvd.c:362 +#: logsrvd/logsrvd.c:366 msgid "invalid RejectMessage" msgstr "" -#: logsrvd/logsrvd.c:370 +#: logsrvd/logsrvd.c:374 msgid "error parsing RejectMessage" msgstr "" -#: logsrvd/logsrvd.c:376 +#: logsrvd/logsrvd.c:380 msgid "error logging reject event" msgstr "" -#: logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 msgid "invalid AlertMessage" msgstr "" -#: logsrvd/logsrvd.c:494 +#: logsrvd/logsrvd.c:498 msgid "error parsing AlertMessage" msgstr "" -#: logsrvd/logsrvd.c:502 +#: logsrvd/logsrvd.c:506 msgid "error logging alert event" msgstr "" -#: logsrvd/logsrvd.c:523 logsrvd/logsrvd.c:574 logsrvd/logsrvd.c:606 +#: logsrvd/logsrvd.c:527 logsrvd/logsrvd.c:578 logsrvd/logsrvd.c:610 msgid "protocol error" msgstr "" -#: logsrvd/logsrvd.c:533 +#: logsrvd/logsrvd.c:537 msgid "error writing IoBuffer" msgstr "" -#: logsrvd/logsrvd.c:585 +#: logsrvd/logsrvd.c:589 msgid "error writing ChangeWindowSize" msgstr "" -#: logsrvd/logsrvd.c:617 +#: logsrvd/logsrvd.c:621 msgid "error writing CommandSuspend" msgstr "" -#: logsrvd/logsrvd.c:702 +#: logsrvd/logsrvd.c:706 msgid "unrecognized ClientMessage type" msgstr "" -#: logsrvd/logsrvd.c:967 +#: logsrvd/logsrvd.c:977 msgid "client message too large" msgstr "" -#: logsrvd/logsrvd.c:1197 logsrvd/logsrvd.c:1205 +#: logsrvd/logsrvd.c:1207 logsrvd/logsrvd.c:1215 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "" -#: logsrvd/logsrvd.c:1225 logsrvd/logsrvd.c:1233 +#: logsrvd/logsrvd.c:1235 logsrvd/logsrvd.c:1243 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "" -#: logsrvd/logsrvd.c:1269 +#: logsrvd/logsrvd.c:1279 #, c-format msgid "unable to get TLS server method: %s" msgstr "" -#: logsrvd/logsrvd.c:1274 +#: logsrvd/logsrvd.c:1284 #, c-format msgid "unable to create TLS context: %s" msgstr "" -#: logsrvd/logsrvd.c:1281 plugins/sudoers/log_client.c:236 +#: logsrvd/logsrvd.c:1291 plugins/sudoers/log_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "" -#: logsrvd/logsrvd.c:1294 plugins/sudoers/log_client.c:216 +#: logsrvd/logsrvd.c:1304 plugins/sudoers/log_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "" -#: logsrvd/logsrvd.c:1339 plugins/sudoers/log_client.c:249 +#: logsrvd/logsrvd.c:1349 plugins/sudoers/log_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "" -#: logsrvd/logsrvd.c:1356 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1366 logsrvd/logsrvd.c:1375 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "" -#: logsrvd/logsrvd.c:1378 +#: logsrvd/logsrvd.c:1388 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "" -#: logsrvd/logsrvd.c:1563 +#: logsrvd/logsrvd.c:1573 msgid "unable to get remote IP addr" msgstr "" -#: logsrvd/logsrvd.c:1591 plugins/sudoers/log_client.c:263 +#: logsrvd/logsrvd.c:1601 plugins/sudoers/log_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "" -#: logsrvd/logsrvd.c:1599 logsrvd/logsrvd.c:1721 logsrvd/logsrvd.c:1823 +#: logsrvd/logsrvd.c:1609 logsrvd/logsrvd.c:1731 logsrvd/logsrvd.c:1833 #: logsrvd/sendlog.c:1125 logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1496 #: logsrvd/sendlog.c:1554 plugins/sudoers/iolog.c:956 #: plugins/sudoers/iolog.c:1089 plugins/sudoers/iolog.c:1187 #: plugins/sudoers/log_client.c:109 plugins/sudoers/log_client.c:324 #: plugins/sudoers/log_client.c:340 plugins/sudoers/log_client.c:386 -#: plugins/sudoers/log_client.c:587 plugins/sudoers/log_client.c:594 -#: plugins/sudoers/log_client.c:1103 plugins/sudoers/log_client.c:1376 -#: plugins/sudoers/log_client.c:1417 plugins/sudoers/log_client.c:1425 -#: plugins/sudoers/log_client.c:1576 plugins/sudoers/log_client.c:1692 -#: plugins/sudoers/log_client.c:2007 plugins/sudoers/log_client.c:2015 +#: plugins/sudoers/log_client.c:585 plugins/sudoers/log_client.c:592 +#: plugins/sudoers/log_client.c:1109 plugins/sudoers/log_client.c:1382 +#: plugins/sudoers/log_client.c:1423 plugins/sudoers/log_client.c:1431 +#: plugins/sudoers/log_client.c:1582 plugins/sudoers/log_client.c:1698 +#: plugins/sudoers/log_client.c:2016 plugins/sudoers/log_client.c:2024 #: plugins/sudoers/sudoreplay.c:512 plugins/sudoers/sudoreplay.c:559 #: plugins/sudoers/sudoreplay.c:791 plugins/sudoers/sudoreplay.c:903 #: plugins/sudoers/sudoreplay.c:993 plugins/sudoers/sudoreplay.c:1008 @@ -628,18 +632,18 @@ msgstr "" msgid "unable to add event to queue" msgstr "" -#: logsrvd/logsrvd.c:1775 logsrvd/logsrvd.c:2011 +#: logsrvd/logsrvd.c:1785 logsrvd/logsrvd.c:2027 msgid "unable setup listen socket" msgstr "" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:124 +#: logsrvd/logsrvd.c:1933 logsrvd/sendlog.c:124 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" "\n" msgstr "" -#: logsrvd/logsrvd.c:1920 +#: logsrvd/logsrvd.c:1936 msgid "" "\n" "Options:\n" @@ -650,16 +654,16 @@ msgid "" " -V, --version display version information and exit\n" msgstr "" -#: logsrvd/logsrvd.c:1972 logsrvd/sendlog.c:1719 +#: logsrvd/logsrvd.c:1988 logsrvd/sendlog.c:1719 msgid "Protobuf-C version 1.3 or higher required" msgstr "" -#: logsrvd/logsrvd.c:1990 +#: logsrvd/logsrvd.c:2006 #, c-format msgid "invalid random drop value: %s" msgstr "" -#: logsrvd/logsrvd.c:1994 logsrvd/sendlog.c:1769 +#: logsrvd/logsrvd.c:2010 logsrvd/sendlog.c:1769 #: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:299 #: plugins/sudoers/visudo.c:177 #, c-format @@ -675,48 +679,48 @@ msgstr "" msgid "%s:%s" msgstr "" -#: logsrvd/logsrvd_conf.c:409 logsrvd/logsrvd_conf.c:653 +#: logsrvd/logsrvd_conf.c:410 logsrvd/logsrvd_conf.c:655 #, c-format msgid "%s: not a fully qualified path" msgstr "" -#: logsrvd/logsrvd_conf.c:767 +#: logsrvd/logsrvd_conf.c:769 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "" -#: logsrvd/logsrvd_conf.c:778 +#: logsrvd/logsrvd_conf.c:780 #, c-format msgid "%s:%d invalid config section: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:786 +#: logsrvd/logsrvd_conf.c:788 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:792 +#: logsrvd/logsrvd_conf.c:794 #, c-format msgid "%s:%d expected section name: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:806 +#: logsrvd/logsrvd_conf.c:808 #, c-format msgid "invalid value for %s: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:814 +#: logsrvd/logsrvd_conf.c:816 #, c-format msgid "%s:%d unknown key: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1003 +#: logsrvd/logsrvd_conf.c:1005 #, c-format msgid "unknown syslog facility %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1007 logsrvd/logsrvd_conf.c:1011 -#: logsrvd/logsrvd_conf.c:1015 +#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1013 +#: logsrvd/logsrvd_conf.c:1017 #, c-format msgid "unknown syslog priority %s" msgstr "" @@ -756,7 +760,7 @@ msgstr "" msgid "unable to read %s/%s: %s" msgstr "" -#: logsrvd/sendlog.c:277 plugins/sudoers/log_client.c:694 +#: logsrvd/sendlog.c:277 plugins/sudoers/log_client.c:692 #, c-format msgid "client message too large: %zu" msgstr "" @@ -773,31 +777,31 @@ msgid "unexpected I/O event %d" msgstr "" #: logsrvd/sendlog.c:908 logsrvd/sendlog.c:925 logsrvd/sendlog.c:959 -#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1386 -#: plugins/sudoers/log_client.c:1454 plugins/sudoers/log_client.c:1490 +#: plugins/sudoers/log_client.c:1124 plugins/sudoers/log_client.c:1392 +#: plugins/sudoers/log_client.c:1460 plugins/sudoers/log_client.c:1496 #, c-format msgid "%s: unexpected state %d" msgstr "" -#: logsrvd/sendlog.c:931 plugins/sudoers/log_client.c:1460 +#: logsrvd/sendlog.c:931 plugins/sudoers/log_client.c:1466 msgid "invalid ServerHello" msgstr "" -#: logsrvd/sendlog.c:995 plugins/sudoers/log_client.c:1534 +#: logsrvd/sendlog.c:995 plugins/sudoers/log_client.c:1540 #, c-format msgid "error message received from server: %s" msgstr "" -#: logsrvd/sendlog.c:1008 plugins/sudoers/log_client.c:1547 +#: logsrvd/sendlog.c:1008 plugins/sudoers/log_client.c:1553 #, c-format msgid "abort message received from server: %s" msgstr "" -#: logsrvd/sendlog.c:1027 plugins/sudoers/log_client.c:1566 +#: logsrvd/sendlog.c:1027 plugins/sudoers/log_client.c:1572 msgid "unable to unpack ServerMessage" msgstr "" -#: logsrvd/sendlog.c:1067 plugins/sudoers/log_client.c:1597 +#: logsrvd/sendlog.c:1067 plugins/sudoers/log_client.c:1603 #, c-format msgid "%s: unexpected type_case value %d" msgstr "" @@ -810,7 +814,7 @@ msgstr "" msgid "premature EOF" msgstr "" -#: logsrvd/sendlog.c:1187 plugins/sudoers/log_client.c:1751 +#: logsrvd/sendlog.c:1187 plugins/sudoers/log_client.c:1760 #, c-format msgid "server message too large: %u" msgstr "" @@ -871,14 +875,9 @@ msgstr "" msgid "commit point received from server [%lld, %ld]" msgstr "" -#: plugins/sudoers/alias.c:148 -#, c-format -msgid "Alias \"%s\" already defined" -msgstr "" - -#: plugins/sudoers/audit.c:206 plugins/sudoers/audit.c:343 -#: plugins/sudoers/log_client.c:954 plugins/sudoers/log_client.c:1002 -#: plugins/sudoers/log_client.c:1050 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/audit.c:261 plugins/sudoers/audit.c:400 +#: plugins/sudoers/log_client.c:960 plugins/sudoers/log_client.c:1008 +#: plugins/sudoers/log_client.c:1056 plugins/sudoers/log_client.c:1181 #: plugins/sudoers/logging.c:548 plugins/sudoers/policy.c:114 msgid "unable to get time of day" msgstr "" @@ -1093,7 +1092,27 @@ msgstr "" msgid "unable to commit audit record" msgstr "" -#: plugins/sudoers/check.c:258 +#: plugins/sudoers/check.c:264 +#, c-format +msgid "error reading lecture file %s" +msgstr "" + +#: plugins/sudoers/check.c:270 +#, c-format +msgid "ignoring lecture file %s: not a regular file" +msgstr "" + +#: plugins/sudoers/check.c:274 plugins/sudoers/cvtsudoers.c:617 +#: plugins/sudoers/cvtsudoers.c:634 plugins/sudoers/cvtsudoers.c:1244 +#: plugins/sudoers/cvtsudoers_json.c:872 plugins/sudoers/cvtsudoers_ldif.c:688 +#: plugins/sudoers/sudoers.c:1053 plugins/sudoers/sudoreplay.c:1435 +#: plugins/sudoers/timestamp.c:431 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:922 +#, c-format +msgid "unable to open %s" +msgstr "" + +#: plugins/sudoers/check.c:283 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1105,16 +1124,16 @@ msgid "" "\n" msgstr "" -#: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:837 plugins/sudoers/sudoers.c:858 +#: plugins/sudoers/check.c:325 plugins/sudoers/check.c:335 +#: plugins/sudoers/sudoers.c:835 plugins/sudoers/sudoers.c:856 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "" -#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 -#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1088 -#: plugins/sudoers/sudoers.c:440 plugins/sudoers/sudoers.c:1307 +#: plugins/sudoers/check.c:330 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1091 +#: plugins/sudoers/sudoers.c:438 plugins/sudoers/sudoers.c:1307 #: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" @@ -1155,7 +1174,7 @@ msgstr "" msgid "%s: input and output files must be different" msgstr "" -#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:178 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:176 #: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 #: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" @@ -1186,15 +1205,6 @@ msgstr "" msgid "invalid filter: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 -#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 -#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1053 -#: plugins/sudoers/sudoreplay.c:1435 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 -#, c-format -msgid "unable to open %s" -msgstr "" - #: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" @@ -1211,7 +1221,7 @@ msgid "parse error in %s\n" msgstr "" #: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1124 -#: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 +#: plugins/sudoers/timestamp.c:315 plugins/sudoers/timestamp.c:318 #, c-format msgid "unable to write to %s" msgstr "" @@ -1862,6 +1872,10 @@ msgstr "" msgid "The format of logs to produce: %s" msgstr "" +#: plugins/sudoers/def_data.c:574 +msgid "Enable SELinux RBAC support" +msgstr "" + #: plugins/sudoers/defaults.c:185 #, c-format msgid "%s:%d:%d: unknown defaults entry \"%s\"" @@ -1912,22 +1926,22 @@ msgstr "" msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:1030 +#: plugins/sudoers/defaults.c:1034 #, c-format msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" msgstr "" -#: plugins/sudoers/defaults.c:1034 +#: plugins/sudoers/defaults.c:1038 #, c-format msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" msgstr "" -#: plugins/sudoers/defaults.c:1045 +#: plugins/sudoers/defaults.c:1049 #, c-format msgid "%s:%d:%d: values for \"%s\" must start with a '/'" msgstr "" -#: plugins/sudoers/defaults.c:1049 +#: plugins/sudoers/defaults.c:1053 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "" @@ -1936,11 +1950,11 @@ msgstr "" msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "" -#: plugins/sudoers/env.c:1133 +#: plugins/sudoers/env.c:1135 msgid "unable to rebuild the environment" msgstr "" -#: plugins/sudoers/env.c:1207 +#: plugins/sudoers/env.c:1209 #, c-format msgid "" "sorry, you are not allowed to set the following environment variables: %s" @@ -2005,7 +2019,7 @@ msgstr "" msgid "Local IP address and netmask pairs:\n" msgstr "" -#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:445 +#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:443 #: plugins/sudoers/sudoers.c:1341 plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" @@ -2034,13 +2048,13 @@ msgid "%s: internal error, I/O log file for event %d not open" msgstr "" #: plugins/sudoers/iolog.c:979 plugins/sudoers/iolog.c:1107 -#: plugins/sudoers/iolog.c:1212 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/iolog.c:1212 plugins/sudoers/timestamp.c:836 +#: plugins/sudoers/timestamp.c:928 plugins/sudoers/visudo.c:493 #: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "" -#: plugins/sudoers/iolog.c:1204 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/iolog.c:1204 plugins/sudoers/log_client.c:1199 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "" @@ -2094,16 +2108,16 @@ msgstr "" msgid "unable to convert sudoOption: %s%s%s" msgstr "" -#: plugins/sudoers/linux_audit.c:58 +#: plugins/sudoers/linux_audit.c:58 plugins/sudoers/linux_audit.c:60 msgid "unable to open audit system" msgstr "" -#: plugins/sudoers/linux_audit.c:101 +#: plugins/sudoers/linux_audit.c:103 msgid "unable to send audit message" msgstr "" #: plugins/sudoers/log_client.c:113 plugins/sudoers/log_client.c:391 -#: plugins/sudoers/log_client.c:1431 plugins/sudoers/log_client.c:2023 +#: plugins/sudoers/log_client.c:1437 plugins/sudoers/log_client.c:2032 msgid "error in event loop" msgstr "" @@ -2125,20 +2139,20 @@ msgstr "" msgid "TLS handshake was unsuccessful" msgstr "" -#: plugins/sudoers/log_client.c:1202 +#: plugins/sudoers/log_client.c:1208 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "" -#: plugins/sudoers/log_client.c:1738 +#: plugins/sudoers/log_client.c:1723 plugins/sudoers/log_client.c:1747 msgid "lost connection to log server" msgstr "" -#: plugins/sudoers/log_client.c:1815 +#: plugins/sudoers/log_client.c:1824 msgid "missing write buffer" msgstr "" -#: plugins/sudoers/log_client.c:1964 +#: plugins/sudoers/log_client.c:1973 msgid "unable to connect to log server" msgstr "" @@ -2174,15 +2188,15 @@ msgstr "" msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:316 plugins/sudoers/sudoers.c:583 -#: plugins/sudoers/sudoers.c:585 plugins/sudoers/sudoers.c:587 -#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:739 -#: plugins/sudoers/sudoers.c:741 +#: plugins/sudoers/logging.c:316 plugins/sudoers/sudoers.c:581 +#: plugins/sudoers/sudoers.c:583 plugins/sudoers/sudoers.c:585 +#: plugins/sudoers/sudoers.c:587 plugins/sudoers/sudoers.c:737 +#: plugins/sudoers/sudoers.c:739 #, c-format msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:579 +#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:577 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2204,12 +2218,12 @@ msgstr "" msgid "a password is required" msgstr "" -#: plugins/sudoers/logging.c:729 +#: plugins/sudoers/logging.c:739 #, c-format msgid "unable to open log file: %s" msgstr "" -#: plugins/sudoers/logging.c:762 +#: plugins/sudoers/logging.c:772 #, c-format msgid "unable to write log file: %s" msgstr "" @@ -2319,39 +2333,39 @@ msgstr "" msgid "unable to execute %s" msgstr "" -#: plugins/sudoers/policy.c:1111 +#: plugins/sudoers/policy.c:1114 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "" -#: plugins/sudoers/policy.c:1113 +#: plugins/sudoers/policy.c:1116 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "" -#: plugins/sudoers/policy.c:1117 +#: plugins/sudoers/policy.c:1120 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1120 +#: plugins/sudoers/policy.c:1123 #, c-format msgid "nsswitch path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1122 +#: plugins/sudoers/policy.c:1125 #, c-format msgid "ldap.conf path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1123 +#: plugins/sudoers/policy.c:1126 #, c-format msgid "ldap.secret path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1156 +#: plugins/sudoers/policy.c:1159 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "" @@ -2490,81 +2504,81 @@ msgstr "" msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: plugins/sudoers/sudoers.c:214 plugins/sudoers/sudoers.c:1010 +#: plugins/sudoers/sudoers.c:212 plugins/sudoers/sudoers.c:1010 msgid "problem with defaults entries" msgstr "" -#: plugins/sudoers/sudoers.c:218 +#: plugins/sudoers/sudoers.c:216 msgid "no valid sudoers sources found, quitting" msgstr "" -#: plugins/sudoers/sudoers.c:292 +#: plugins/sudoers/sudoers.c:290 #, c-format msgid "user not allowed to change root directory to %s" msgstr "" -#: plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:292 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "" -#: plugins/sudoers/sudoers.c:319 +#: plugins/sudoers/sudoers.c:317 #, c-format msgid "user not allowed to change directory to %s" msgstr "" -#: plugins/sudoers/sudoers.c:320 +#: plugins/sudoers/sudoers.c:318 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:349 msgid "sudoers specifies that root is not allowed to sudo" msgstr "" -#: plugins/sudoers/sudoers.c:411 +#: plugins/sudoers/sudoers.c:409 msgid "user not allowed to override closefrom limit" msgstr "" -#: plugins/sudoers/sudoers.c:412 +#: plugins/sudoers/sudoers.c:410 msgid "you are not permitted to use the -C option" msgstr "" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:470 #, c-format msgid "timestamp owner (%s): No such user" msgstr "" -#: plugins/sudoers/sudoers.c:487 +#: plugins/sudoers/sudoers.c:485 msgid "no tty" msgstr "" -#: plugins/sudoers/sudoers.c:488 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you must have a tty to run sudo" msgstr "" -#: plugins/sudoers/sudoers.c:495 +#: plugins/sudoers/sudoers.c:493 #, c-format msgid "invalid shell for user %s: %s" msgstr "" -#: plugins/sudoers/sudoers.c:578 +#: plugins/sudoers/sudoers.c:576 msgid "command in current directory" msgstr "" -#: plugins/sudoers/sudoers.c:597 +#: plugins/sudoers/sudoers.c:595 msgid "user not allowed to set a command timeout" msgstr "" -#: plugins/sudoers/sudoers.c:599 +#: plugins/sudoers/sudoers.c:597 msgid "sorry, you are not allowed set a command timeout" msgstr "" -#: plugins/sudoers/sudoers.c:607 +#: plugins/sudoers/sudoers.c:605 msgid "user not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:609 +#: plugins/sudoers/sudoers.c:607 msgid "sorry, you are not allowed to preserve the environment" msgstr "" @@ -2593,17 +2607,17 @@ msgstr "" msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/timestamp.c:252 toke.l:1112 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/timestamp.c:252 toke.l:1115 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:1094 toke.l:1117 +#: plugins/sudoers/sudoers.c:1094 toke.l:1120 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:1098 toke.l:1120 +#: plugins/sudoers/sudoers.c:1098 toke.l:1123 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" @@ -2782,26 +2796,26 @@ msgstr "" msgid "%s is group writable" msgstr "" -#: plugins/sudoers/timestamp.c:336 plugins/sudoers/timestamp.c:680 +#: plugins/sudoers/timestamp.c:326 plugins/sudoers/timestamp.c:661 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "" -#: plugins/sudoers/timestamp.c:866 +#: plugins/sudoers/timestamp.c:847 msgid "ignoring time stamp from the future" msgstr "" -#: plugins/sudoers/timestamp.c:889 +#: plugins/sudoers/timestamp.c:870 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "" -#: plugins/sudoers/timestamp.c:1011 +#: plugins/sudoers/timestamp.c:992 #, c-format msgid "unable to lock time stamp file %s" msgstr "" -#: plugins/sudoers/timestamp.c:1055 plugins/sudoers/timestamp.c:1075 +#: plugins/sudoers/timestamp.c:1036 plugins/sudoers/timestamp.c:1056 #, c-format msgid "lecture status path too long: %s/%s" msgstr "" @@ -2982,30 +2996,30 @@ msgid "" " -V, --version display version information and exit\n" msgstr "" -#: toke.l:179 +#: toke.l:182 msgid "empty string" msgstr "" -#: toke.l:189 toke.l:491 +#: toke.l:192 toke.l:494 msgid "empty group" msgstr "" -#: toke.l:197 toke.l:489 +#: toke.l:200 toke.l:492 msgid "empty netgroup" msgstr "" -#: toke.l:293 toke.l:305 toke.l:317 toke.l:333 toke.l:352 toke.l:392 +#: toke.l:296 toke.l:308 toke.l:320 toke.l:336 toke.l:355 toke.l:395 msgid "invalid line continuation" msgstr "" -#: toke.l:528 toke.l:540 +#: toke.l:531 toke.l:543 msgid "invalid IPv6 address" msgstr "" -#: toke.l:764 +#: toke.l:767 msgid "unexpected line break in string" msgstr "" -#: toke.l:1084 +#: toke.l:1087 msgid "too many levels of includes" msgstr "" diff --git a/po/sudo.pot b/po/sudo.pot index b94d7c5bbd..f08c0d7503 100644 --- a/po/sudo.pot +++ b/po/sudo.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.3\n" +"Project-Id-Version: sudo 1.9.5\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"POT-Creation-Date: 2021-01-09 12:59-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -30,8 +30,8 @@ msgid "unable to restore registry" msgstr "" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/gidlist.c:76 -#: lib/util/json.c:54 lib/util/json.c:180 lib/util/sudo_conf.c:186 -#: lib/util/sudo_conf.c:272 lib/util/sudo_conf.c:349 lib/util/sudo_conf.c:575 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:198 +#: lib/util/sudo_conf.c:284 lib/util/sudo_conf.c:361 lib/util/sudo_conf.c:647 #: src/conversation.c:80 src/exec_common.c:106 src/exec_common.c:122 #: src/exec_common.c:131 src/exec_monitor.c:206 src/exec_monitor.c:455 #: src/exec_monitor.c:461 src/exec_monitor.c:469 src/exec_monitor.c:477 @@ -42,30 +42,32 @@ msgstr "" #: src/exec_nopty.c:249 src/exec_nopty.c:256 src/exec_nopty.c:263 #: src/exec_nopty.c:270 src/exec_nopty.c:277 src/exec_nopty.c:284 #: src/exec_nopty.c:291 src/exec_nopty.c:299 src/exec_nopty.c:473 -#: src/exec_pty.c:827 src/exec_pty.c:836 src/exec_pty.c:893 src/exec_pty.c:1046 -#: src/exec_pty.c:1218 src/exec_pty.c:1227 src/exec_pty.c:1234 -#: src/exec_pty.c:1241 src/exec_pty.c:1248 src/exec_pty.c:1255 -#: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 -#: src/exec_pty.c:1740 src/load_plugins.c:52 src/load_plugins.c:65 +#: src/exec_pty.c:834 src/exec_pty.c:843 src/exec_pty.c:900 src/exec_pty.c:1053 +#: src/exec_pty.c:1225 src/exec_pty.c:1234 src/exec_pty.c:1241 +#: src/exec_pty.c:1248 src/exec_pty.c:1255 src/exec_pty.c:1262 +#: src/exec_pty.c:1269 src/exec_pty.c:1276 src/exec_pty.c:1283 +#: src/exec_pty.c:1290 src/exec_pty.c:1297 src/exec_pty.c:1305 +#: src/exec_pty.c:1747 src/load_plugins.c:52 src/load_plugins.c:65 #: src/load_plugins.c:163 src/load_plugins.c:188 src/load_plugins.c:223 -#: src/load_plugins.c:463 src/load_plugins.c:469 src/parse_args.c:181 +#: src/load_plugins.c:455 src/load_plugins.c:461 src/parse_args.c:181 #: src/parse_args.c:202 src/parse_args.c:275 src/parse_args.c:616 #: src/parse_args.c:638 src/parse_args.c:663 src/preserve_fds.c:46 #: src/preserve_fds.c:131 src/selinux.c:90 src/selinux.c:360 src/selinux.c:489 -#: src/selinux.c:498 src/sesh.c:115 src/sudo.c:632 src/sudo.c:701 -#: src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 src/sudo.c:760 src/sudo.c:769 -#: src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 src/sudo.c:867 src/sudo.c:1053 -#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 -#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:976 src/sudo_edit.c:996 +#: src/selinux.c:498 src/sesh.c:110 src/sesh.c:143 src/sesh.c:149 +#: src/sesh.c:156 src/sesh.c:162 src/sesh.c:407 src/sudo.c:632 src/sudo.c:702 +#: src/sudo.c:712 src/sudo.c:733 src/sudo.c:752 src/sudo.c:761 src/sudo.c:770 +#: src/sudo.c:787 src/sudo.c:829 src/sudo.c:839 src/sudo.c:868 src/sudo.c:1054 +#: src/sudo.c:1076 src/sudo.c:1378 src/sudo.c:1551 src/sudo.c:1776 +#: src/sudo.c:2120 src/sudo_edit.c:89 src/sudo_edit.c:151 src/sudo_edit.c:431 +#: src/sudo_edit.c:440 src/sudo_edit.c:539 src/sudo_edit.c:546 +#: src/sudo_edit.c:682 src/sudo_edit.c:702 #, c-format msgid "%s: %s" msgstr "" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 -#: lib/util/json.c:181 lib/util/sudo_conf.c:187 lib/util/sudo_conf.c:272 -#: lib/util/sudo_conf.c:349 lib/util/sudo_conf.c:575 src/conversation.c:81 +#: lib/util/json.c:184 lib/util/sudo_conf.c:199 lib/util/sudo_conf.c:284 +#: lib/util/sudo_conf.c:361 lib/util/sudo_conf.c:647 src/conversation.c:81 #: src/exec_common.c:106 src/exec_common.c:123 src/exec_common.c:132 #: src/exec_monitor.c:455 src/exec_monitor.c:461 src/exec_monitor.c:469 #: src/exec_monitor.c:477 src/exec_monitor.c:484 src/exec_monitor.c:491 @@ -75,26 +77,27 @@ msgstr "" #: src/exec_nopty.c:242 src/exec_nopty.c:249 src/exec_nopty.c:256 #: src/exec_nopty.c:263 src/exec_nopty.c:270 src/exec_nopty.c:277 #: src/exec_nopty.c:284 src/exec_nopty.c:291 src/exec_nopty.c:299 -#: src/exec_pty.c:827 src/exec_pty.c:836 src/exec_pty.c:893 src/exec_pty.c:1218 -#: src/exec_pty.c:1227 src/exec_pty.c:1234 src/exec_pty.c:1241 -#: src/exec_pty.c:1248 src/exec_pty.c:1255 src/exec_pty.c:1262 -#: src/exec_pty.c:1269 src/exec_pty.c:1276 src/exec_pty.c:1283 -#: src/exec_pty.c:1290 src/exec_pty.c:1298 src/exec_pty.c:1740 +#: src/exec_pty.c:834 src/exec_pty.c:843 src/exec_pty.c:900 src/exec_pty.c:1225 +#: src/exec_pty.c:1234 src/exec_pty.c:1241 src/exec_pty.c:1248 +#: src/exec_pty.c:1255 src/exec_pty.c:1262 src/exec_pty.c:1269 +#: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 +#: src/exec_pty.c:1297 src/exec_pty.c:1305 src/exec_pty.c:1747 #: src/load_plugins.c:163 src/load_plugins.c:188 src/load_plugins.c:223 -#: src/load_plugins.c:463 src/load_plugins.c:469 src/parse_args.c:181 +#: src/load_plugins.c:455 src/load_plugins.c:461 src/parse_args.c:181 #: src/parse_args.c:203 src/parse_args.c:275 src/parse_args.c:616 #: src/parse_args.c:638 src/parse_args.c:663 src/preserve_fds.c:46 #: src/preserve_fds.c:131 src/selinux.c:90 src/selinux.c:360 src/selinux.c:489 -#: src/selinux.c:498 src/sesh.c:115 src/sudo.c:235 src/sudo.c:632 -#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 -#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 -#: src/sudo_edit.c:996 +#: src/selinux.c:498 src/sesh.c:110 src/sesh.c:408 src/sudo.c:236 +#: src/sudo.c:632 src/sudo.c:868 src/sudo.c:1054 src/sudo.c:1076 +#: src/sudo.c:1378 src/sudo.c:1551 src/sudo.c:1776 src/sudo.c:2120 +#: src/sudo_edit.c:89 src/sudo_edit.c:151 src/sudo_edit.c:431 +#: src/sudo_edit.c:440 src/sudo_edit.c:539 src/sudo_edit.c:546 +#: src/sudo_edit.c:682 src/sudo_edit.c:702 msgid "unable to allocate memory" msgstr "" -#: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:369 +#: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:686 src/selinux.c:234 +#: src/selinux.c:264 src/sudo.c:367 src/sudo_edit.c:496 src/sudo_edit.c:559 #, c-format msgid "unable to open %s" msgstr "" @@ -104,7 +107,7 @@ msgstr "" msgid "unable to mkdir %s" msgstr "" -#: lib/util/mkdir_parents.c:93 lib/util/sudo_conf.c:591 +#: lib/util/mkdir_parents.c:93 lib/util/sudo_conf.c:663 src/copy_file.c:150 #, c-format msgid "unable to stat %s" msgstr "" @@ -119,7 +122,7 @@ msgid "Unknown signal" msgstr "" #: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 +#: lib/util/strtonum.c:187 src/sesh.c:143 src/sesh.c:156 msgid "invalid value" msgstr "" @@ -131,66 +134,80 @@ msgstr "" msgid "value too small" msgstr "" -#: lib/util/sudo_conf.c:205 +#: lib/util/sudo_conf.c:217 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:371 lib/util/sudo_conf.c:387 lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:383 lib/util/sudo_conf.c:399 lib/util/sudo_conf.c:452 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:408 +#: lib/util/sudo_conf.c:420 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:424 +#: lib/util/sudo_conf.c:436 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:594 +#: lib/util/sudo_conf.c:666 #, c-format msgid "%s is not a regular file" msgstr "" -#: lib/util/sudo_conf.c:597 +#: lib/util/sudo_conf.c:669 src/copy_file.c:162 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: lib/util/sudo_conf.c:601 +#: lib/util/sudo_conf.c:673 #, c-format msgid "%s is world writable" msgstr "" -#: lib/util/sudo_conf.c:604 +#: lib/util/sudo_conf.c:676 #, c-format msgid "%s is group writable" msgstr "" -#: src/copy_file.c:91 +#: src/copy_file.c:93 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "" -#: src/copy_file.c:95 +#: src/copy_file.c:97 #, c-format msgid "not overwriting %s" msgstr "" -#: src/copy_file.c:117 +#: src/copy_file.c:119 #, c-format msgid "unable to read from %s" msgstr "" -#: src/copy_file.c:134 src/sudo_edit.c:695 +#: src/copy_file.c:136 src/sudo_edit.c:322 #, c-format msgid "unable to write to %s" msgstr "" +#: src/copy_file.c:154 src/sesh.c:215 src/sudo_edit.c:199 +#, c-format +msgid "%s: not a regular file" +msgstr "" + +#: src/copy_file.c:158 +#, c-format +msgid "%s: bad file mode: 0%o" +msgstr "" + +#: src/edit_open.c:265 +msgid "unable to restore current working directory" +msgstr "" + #: src/exec.c:128 #, c-format msgid "unknown login class %s" @@ -225,8 +242,8 @@ msgid "starting from %s" msgstr "" #: src/exec.c:300 src/exec_monitor.c:564 src/exec_monitor.c:566 -#: src/exec_nopty.c:531 src/exec_pty.c:568 src/exec_pty.c:1386 -#: src/exec_pty.c:1388 src/signal.c:139 src/signal.c:153 +#: src/exec_nopty.c:531 src/exec_pty.c:575 src/exec_pty.c:1393 +#: src/exec_pty.c:1395 src/signal.c:139 src/signal.c:153 #, c-format msgid "unable to set handler for signal %d" msgstr "" @@ -251,14 +268,14 @@ msgstr "" #: src/exec_nopty.c:230 src/exec_nopty.c:237 src/exec_nopty.c:244 #: src/exec_nopty.c:251 src/exec_nopty.c:258 src/exec_nopty.c:265 #: src/exec_nopty.c:272 src/exec_nopty.c:279 src/exec_nopty.c:286 -#: src/exec_nopty.c:293 src/exec_nopty.c:301 src/exec_pty.c:693 -#: src/exec_pty.c:698 src/exec_pty.c:795 src/exec_pty.c:802 src/exec_pty.c:899 -#: src/exec_pty.c:1220 src/exec_pty.c:1229 src/exec_pty.c:1236 -#: src/exec_pty.c:1243 src/exec_pty.c:1250 src/exec_pty.c:1257 -#: src/exec_pty.c:1264 src/exec_pty.c:1271 src/exec_pty.c:1278 -#: src/exec_pty.c:1285 src/exec_pty.c:1292 src/exec_pty.c:1693 -#: src/exec_pty.c:1703 src/exec_pty.c:1748 src/exec_pty.c:1755 -#: src/exec_pty.c:1782 +#: src/exec_nopty.c:293 src/exec_nopty.c:301 src/exec_pty.c:700 +#: src/exec_pty.c:705 src/exec_pty.c:802 src/exec_pty.c:809 src/exec_pty.c:906 +#: src/exec_pty.c:1227 src/exec_pty.c:1236 src/exec_pty.c:1243 +#: src/exec_pty.c:1250 src/exec_pty.c:1257 src/exec_pty.c:1264 +#: src/exec_pty.c:1271 src/exec_pty.c:1278 src/exec_pty.c:1285 +#: src/exec_pty.c:1292 src/exec_pty.c:1299 src/exec_pty.c:1700 +#: src/exec_pty.c:1710 src/exec_pty.c:1755 src/exec_pty.c:1762 +#: src/exec_pty.c:1789 msgid "unable to add event to queue" msgstr "" @@ -266,8 +283,8 @@ msgstr "" msgid "unable to set controlling tty" msgstr "" -#: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 +#: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1472 +#: src/exec_pty.c:1493 src/exec_pty.c:1513 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "" @@ -275,8 +292,8 @@ msgstr "" msgid "unable to receive message from parent" msgstr "" -#: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:310 +#: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1551 +#: src/sudo_edit.c:363 src/tgetpass.c:310 msgid "unable to fork" msgstr "" @@ -284,20 +301,20 @@ msgstr "" msgid "unable to restore tty label" msgstr "" -#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 +#: src/exec_monitor.c:632 src/sesh.c:120 src/sudo.c:1132 #, c-format msgid "unable to execute %s" msgstr "" -#: src/exec_nopty.c:352 src/exec_pty.c:1395 +#: src/exec_nopty.c:352 src/exec_pty.c:1402 msgid "policy plugin failed session initialization" msgstr "" -#: src/exec_nopty.c:429 src/exec_pty.c:1632 +#: src/exec_nopty.c:429 src/exec_pty.c:1639 msgid "error in event loop" msgstr "" -#: src/exec_nopty.c:539 src/exec_pty.c:606 src/signal.c:101 +#: src/exec_nopty.c:539 src/exec_pty.c:613 src/signal.c:101 #, c-format msgid "unable to restore handler for signal %d" msgstr "" @@ -306,36 +323,36 @@ msgstr "" msgid "unable to allocate pty" msgstr "" -#: src/exec_pty.c:216 src/exec_pty.c:255 src/exec_pty.c:294 src/exec_pty.c:344 -#: src/exec_pty.c:394 +#: src/exec_pty.c:216 src/exec_pty.c:256 src/exec_pty.c:296 src/exec_pty.c:347 +#: src/exec_pty.c:398 msgid "I/O plugin error" msgstr "" -#: src/exec_pty.c:219 src/exec_pty.c:258 src/exec_pty.c:297 src/exec_pty.c:347 -#: src/exec_pty.c:397 +#: src/exec_pty.c:220 src/exec_pty.c:260 src/exec_pty.c:300 src/exec_pty.c:351 +#: src/exec_pty.c:402 msgid "command rejected by I/O plugin" msgstr "" -#: src/exec_pty.c:444 +#: src/exec_pty.c:449 msgid "error logging suspend" msgstr "" -#: src/exec_pty.c:477 +#: src/exec_pty.c:483 msgid "error changing window size" msgstr "" -#: src/exec_pty.c:1375 +#: src/exec_pty.c:1382 msgid "unable to create sockets" msgstr "" -#: src/exec_pty.c:1587 +#: src/exec_pty.c:1594 msgid "unable to send message to monitor process" msgstr "" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 -#: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:354 +#: src/load_plugins.c:283 src/load_plugins.c:293 src/load_plugins.c:303 +#: src/load_plugins.c:350 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "" @@ -355,46 +372,47 @@ msgstr "" msgid "%s must be only be writable by owner" msgstr "" -#: src/load_plugins.c:247 src/load_plugins.c:322 +#: src/load_plugins.c:247 src/load_plugins.c:318 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "" -#: src/load_plugins.c:289 +#: src/load_plugins.c:285 #, c-format msgid "unable to load %s: %s" msgstr "" -#: src/load_plugins.c:299 +#: src/load_plugins.c:295 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: src/load_plugins.c:309 +#: src/load_plugins.c:305 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "" -#: src/load_plugins.c:327 +#: src/load_plugins.c:323 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "" -#: src/load_plugins.c:330 +#: src/load_plugins.c:326 msgid "only a single policy plugin may be specified" msgstr "" -#: src/load_plugins.c:356 +#: src/load_plugins.c:352 #, c-format msgid "unknown plugin type %d found in %s" msgstr "" -#: src/load_plugins.c:552 +#: src/load_plugins.c:535 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 +#: src/net_ifs.c:179 src/net_ifs.c:197 src/net_ifs.c:343 src/sudo.c:479 +#: src/sudo_edit.c:400 src/sudo_edit.c:408 #, c-format msgid "internal error, %s overflow" msgstr "" @@ -692,20 +710,40 @@ msgstr "" msgid "unable to set key creation context to %s" msgstr "" -#: src/sesh.c:77 +#: src/sesh.c:72 msgid "requires at least one argument" msgstr "" -#: src/sesh.c:106 +#: src/sesh.c:101 #, c-format msgid "invalid file descriptor number: %s" msgstr "" -#: src/sesh.c:120 +#: src/sesh.c:115 #, c-format msgid "unable to run %s as a login shell" msgstr "" +#: src/sesh.c:197 src/sesh.c:297 src/sudo_edit.c:206 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "" + +#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:209 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "" + +#: src/sesh.c:284 src/sesh.c:305 src/sesh.c:314 src/sesh.c:322 +#: src/sudo_edit.c:333 +#, c-format +msgid "contents of edit session left in %s" +msgstr "" + +#: src/sesh.c:412 src/sudo_edit.c:93 +msgid "unable to get group list" +msgstr "" + #: src/signal.c:79 #, c-format msgid "unable to save handler for signal %d" @@ -754,25 +792,25 @@ msgstr "" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "" -#: src/sudo.c:220 +#: src/sudo.c:222 #, c-format msgid "Sudo version %s\n" msgstr "" -#: src/sudo.c:222 +#: src/sudo.c:224 #, c-format msgid "Configure options: %s\n" msgstr "" -#: src/sudo.c:231 +#: src/sudo.c:232 msgid "fatal error, unable to load plugins" msgstr "" -#: src/sudo.c:277 +#: src/sudo.c:278 msgid "plugin did not return a command to execute" msgstr "" -#: src/sudo.c:312 +#: src/sudo.c:310 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "" @@ -786,171 +824,166 @@ msgstr "" msgid "unable to determine tty" msgstr "" -#: src/sudo.c:913 +#: src/sudo.c:914 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "" -#: src/sudo.c:916 +#: src/sudo.c:917 #, c-format msgid "" "effective uid is not %d, is %s on a file system with the 'nosuid' option set " "or an NFS file system without root privileges?" msgstr "" -#: src/sudo.c:922 +#: src/sudo.c:923 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "" -#: src/sudo.c:938 +#: src/sudo.c:939 msgid "unable to set supplementary group IDs" msgstr "" -#: src/sudo.c:945 +#: src/sudo.c:946 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "" -#: src/sudo.c:951 +#: src/sudo.c:952 #, c-format msgid "unable to set gid to runas gid %u" msgstr "" -#: src/sudo.c:994 +#: src/sudo.c:995 #, c-format msgid "unexpected child termination condition: %d" msgstr "" -#: src/sudo.c:1103 +#: src/sudo.c:1104 msgid "unable to initialize policy plugin" msgstr "" -#: src/sudo.c:1166 +#: src/sudo.c:1167 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "" -#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 +#: src/sudo.c:1182 src/sudo.c:1235 src/sudo.c:1279 msgid "command rejected by policy" msgstr "" -#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 +#: src/sudo.c:1187 src/sudo.c:1240 src/sudo.c:1284 src/sudo.c:1358 msgid "policy plugin error" msgstr "" -#: src/sudo.c:1220 +#: src/sudo.c:1221 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "" -#: src/sudo.c:1264 +#: src/sudo.c:1265 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "" -#: src/sudo.c:1302 +#: src/sudo.c:1303 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "" -#: src/sudo.c:1431 +#: src/sudo.c:1436 #, c-format msgid "error initializing I/O plugin %s" msgstr "" -#: src/sudo.c:1585 +#: src/sudo.c:1590 #, c-format msgid "error initializing audit plugin %s" msgstr "" -#: src/sudo.c:1763 +#: src/sudo.c:1668 #, c-format -msgid "error initializing approval plugin %s" +msgid "%s: unable to log error event%s%s" msgstr "" -#: src/sudo.c:1839 -msgid "command rejected by approver" +#: src/sudo.c:1703 +#, c-format +msgid "%s: unable to log accept event%s%s" msgstr "" -#: src/sudo.c:1848 -msgid "approval plugin error" +#: src/sudo.c:1708 src/sudo.c:1746 +msgid "audit plugin error" msgstr "" -#: src/sudo_edit.c:226 -msgid "no writable temporary directory found" +#: src/sudo.c:1741 +#, c-format +msgid "%s: unable to log reject event%s%s" msgstr "" -#: src/sudo_edit.c:351 -msgid "unable to restore current working directory" +#: src/sudo.c:1799 +#, c-format +msgid "error initializing approval plugin %s" msgstr "" -#: src/sudo_edit.c:566 src/sudo_edit.c:666 -#, c-format -msgid "%s: not a regular file" +#: src/sudo.c:1875 +msgid "command rejected by approver" msgstr "" -#: src/sudo_edit.c:573 -#, c-format -msgid "%s: editing symbolic links is not permitted" +#: src/sudo.c:1884 +msgid "approval plugin error" msgstr "" -#: src/sudo_edit.c:576 -#, c-format -msgid "%s: editing files in a writable directory is not permitted" +#: src/sudo_edit.c:112 +msgid "no writable temporary directory found" msgstr "" -#: src/sudo_edit.c:667 +#: src/sudo_edit.c:293 #, c-format msgid "%s left unmodified" msgstr "" -#: src/sudo_edit.c:680 src/sudo_edit.c:871 +#: src/sudo_edit.c:306 src/sudo_edit.c:571 #, c-format msgid "%s unchanged" msgstr "" -#: src/sudo_edit.c:706 src/sudo_edit.c:909 -#, c-format -msgid "contents of edit session left in %s" -msgstr "" - -#: src/sudo_edit.c:814 +#: src/sudo_edit.c:483 msgid "sesh: internal error: odd number of paths" msgstr "" -#: src/sudo_edit.c:816 +#: src/sudo_edit.c:485 msgid "sesh: unable to create temporary files" msgstr "" -#: src/sudo_edit.c:818 src/sudo_edit.c:902 +#: src/sudo_edit.c:487 src/sudo_edit.c:605 msgid "sesh: killed by a signal" msgstr "" -#: src/sudo_edit.c:820 src/sudo_edit.c:905 +#: src/sudo_edit.c:489 src/sudo_edit.c:608 #, c-format msgid "sesh: unknown error %d" msgstr "" -#: src/sudo_edit.c:895 +#: src/sudo_edit.c:598 msgid "unable to copy temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:899 +#: src/sudo_edit.c:602 msgid "" "unable to copy some of the temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:943 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "" -#: src/sudo_edit.c:960 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "" -#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 +#: src/sudo_edit.c:717 src/sudo_edit.c:725 msgid "unable to read the clock" msgstr "" From 9e111eae57524ca72002ad1db36eb68ccd50b167 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 8 Jan 2021 19:52:45 -0700 Subject: [PATCH 31/31] Sudo 1.9.5 --- NEWS | 63 +++++++++++++++++++++++++++++++++++++++++++++ configure | 18 ++++++------- configure.ac | 4 +-- doc/LICENSE | 2 +- etc/sudo-logsrvd.pp | 2 +- etc/sudo-python.pp | 2 +- etc/sudo.pp | 2 +- 7 files changed, 78 insertions(+), 15 deletions(-) diff --git a/NEWS b/NEWS index 0949f20698..a3a1a8c3a6 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,66 @@ +What's new in Sudo 1.9.5 + + * Fixed a crash introduced in 1.9.4 when running "sudo -i" as an + unknown user. This is related to but distinct from Bug #948. + + * If the "lecture_file" setting is enabled in sudoers, it must now + refer to a regular file or a symbolic link to a regular file. + + * Fixed a potential use-after-free bug in sudo_logsrvd when the + server shuts down if there are existing connections from clients + that are only logging events and not session I/O data. + + * Fixed a buffer size mismatch when serializing the list of IP + addresses for configured network interfaces. This bug is not + actually exploitable since the allocated buffer is large enough + to hold the list of addresses. + + * If sudo is executed with a name other that "sudo" or "sudoedit", + it will now fall back to "sudo" as the program name. This affects + warning, help and usage messages as well as the matching of Debug + lines in the /etc/sudo.conf file. Previously, it was possible + for the invoking user to manipulate the program name by setting + argv[0] to an arbitrary value when executing sudo. + + * Sudo now checks for failure when setting the close-on-exec flag + on open file descriptors. This should never fail but, if it + were to, there is the possibility of a file descriptor leak to + a child process (such as the command sudo runs). + + * Fixed CVE-2021-23239, a potential information leak in sudoedit + that could be used to test for the existence of directories not + normally accessible to the user in certain circumstances. When + creating a new file, sudoedit checks to make sure the parent + directory of the new file exists before running the editor. + However, a race condition exists if the invoking user can replace + (or create) the parent directory. If a symbolic link is created + in place of the parent directory, sudoedit will run the editor + as long as the target of the link exists. If the target of the + link does not exist, an error message will be displayed. The + race condition can be used to test for the existence of an + arbitrary directory. However, it _cannot_ be used to write to + an arbitrary location. + + * Fixed CVE-2021-23240, a flaw in the temporary file handling of + sudoedit's SELinux RBAC support. On systems where SELinux is + enabled, a user with sudoedit permissions may be able to set the + owner of an arbitrary file to the user-ID of the target user. + On Linux kernels that support "protected symlinks", setting + /proc/sys/fs/protected_symlinks to 1 will prevent the bug from + being exploited. For more information see + https://www.sudo.ws/alerts/sudoedit_selinux.html. + + * Added writability checks for sudoedit when SELinux RBAC is in use. + This makes sudoedit behavior consistent regardless of whether + or not SELinux RBAC is in use. Previously, the "sudoedit_checkdir" + setting had no effect for RBAC entries. + + * A new sudoers option "selinux" can be used to disable sudo's + SELinux RBAC support. + + * Quieted warnings from PVS Studio, clang analyzer, and cppcheck. + Added suppression annotations for PVS Studio false positives. + What's new in Sudo 1.9.4p2 * Fixed a bug introduced in sudo 1.9.4p1 which could lead to a crash diff --git a/configure b/configure index 2467429c83..5bf112da63 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.9.4p2. +# Generated by GNU Autoconf 2.69 for sudo 1.9.5. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.9.4p2' -PACKAGE_STRING='sudo 1.9.4p2' +PACKAGE_VERSION='1.9.5' +PACKAGE_STRING='sudo 1.9.5' PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' @@ -1584,7 +1584,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.9.4p2 to adapt to many kinds of systems. +\`configure' configures sudo 1.9.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1650,7 +1650,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.9.4p2:";; + short | recursive ) echo "Configuration of sudo 1.9.5:";; esac cat <<\_ACEOF @@ -1924,7 +1924,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.9.4p2 +sudo configure 1.9.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2633,7 +2633,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.9.4p2, which was +It was created by sudo $as_me 1.9.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -28816,7 +28816,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.9.4p2, which was +This file was extended by sudo $as_me 1.9.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -28882,7 +28882,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.9.4p2 +sudo config.status 1.9.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 4221dbec8e..2f68c33174 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ dnl Use the top-level autogen.sh script to generate configure and config.h.in dnl dnl SPDX-License-Identifier: ISC dnl -dnl Copyright (c) 1994-1996, 1998-2020 Todd C. Miller +dnl Copyright (c) 1994-1996, 1998-2021 Todd C. Miller dnl dnl Permission to use, copy, modify, and distribute this software for any dnl purpose with or without fee is hereby granted, provided that the above @@ -18,7 +18,7 @@ dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. dnl AC_PREREQ([2.59]) -AC_INIT([sudo], [1.9.4p2], [https://bugzilla.sudo.ws/], [sudo]) +AC_INIT([sudo], [1.9.5], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADERS([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl diff --git a/doc/LICENSE b/doc/LICENSE index 28a9492622..60f193f38e 100644 --- a/doc/LICENSE +++ b/doc/LICENSE @@ -1,6 +1,6 @@ Sudo is distributed under the following license: - Copyright (c) 1994-1996, 1998-2020 + Copyright (c) 1994-1996, 1998-2021 Todd C. Miller Permission to use, copy, modify, and distribute this software for any diff --git a/etc/sudo-logsrvd.pp b/etc/sudo-logsrvd.pp index af167b89bc..663ae6dbbc 100644 --- a/etc/sudo-logsrvd.pp +++ b/etc/sudo-logsrvd.pp @@ -5,7 +5,7 @@ from sudo clients. This makes it possible to have all sudo I/O logs on a central server." vendor="Todd C. Miller" - copyright="(c) 2019-2020 Todd C. Miller" + copyright="(c) 2019-2021 Todd C. Miller" %if [aix] # Convert to 4 part version for AIX, including patch level diff --git a/etc/sudo-python.pp b/etc/sudo-python.pp index e1ef5cbc96..fac3b3454e 100644 --- a/etc/sudo-python.pp +++ b/etc/sudo-python.pp @@ -3,7 +3,7 @@ summary="Sudo Python plugin framework" description="The sudo Python plugin allows you to extend sudo using Python." vendor="Todd C. Miller" - copyright="(c) 2019-2020 Todd C. Miller" + copyright="(c) 2019-2021 Todd C. Miller" %if [aix] # Convert to 4 part version for AIX, including patch level diff --git a/etc/sudo.pp b/etc/sudo.pp index 22011255c0..b4ac0d12fe 100644 --- a/etc/sudo.pp +++ b/etc/sudo.pp @@ -10,7 +10,7 @@ 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-2020 Todd C. Miller" + copyright="(c) 1993-1996,1998-2021 Todd C. Miller" sudoedit_man=`echo ${pp_destdir}$mandir/*/sudoedit.*|sed "s:^${pp_destdir}::"` sudoedit_man_target=`basename $sudoedit_man | sed 's/edit//'`